🤔

MessagePack For C#のAOT Code Generationをコンテナで実行する

2022/09/30に公開

毎回忘れるAOTのやり方

MessagePack for C#をUnityなどの環境で使おうと思うと事前にコンパイルが必要です。必要なのですが、1回やったらしばらく使わないので、毎回やろうとするたびに忘れるんですよね……。
特に依存している.NET Core Runtimeのバージョンが3なのでそこで毎回「どうするんだっけ……?」ってなります。

なのでコンテナ化する

こんな感じのDockerfileを作って

Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:3.1.422-alpine3.16
RUN dotnet tool install --global MessagePack.Generator
ENV PATH="$PATH:/root/.dotnet/tools"

こんな感じでビルドして

docker build -t mpgenerator .

こんな感じで対象のディレクトリで使う

docker run --rm -v `pwd`:/mp mpgenerator mpc -i /mp -o /mp/Generated

べんり!

メモ書き

.NETのimageには複数あるがRuntimeではdotnet tool installで失敗するので、SDKの方でやる必要がある。イメージのサイズが大きい……。

mpgenerator latest 0eb988bb68c6 2 hours ago 511MB

とはいえ手元のローカル環境でしか動かさないので別にダイエットする必要もない。
そもそもAOTが必要なコードはコンパイルが通らない状態ということであり、そんなのを自動ビルドできるような環境にプッシュしないと思うので[1]。なのでUSERも作っていない。

まとめ

めっっっっっちゃべんりになった……!
毎回30分くらいひっかかってた気がするので、ここにメモしておけばもう大丈夫でしょう。
インストールとかしなくていい! めっっっっっちゃべんりになった……!

おしまい。

参考

https://qiita.com/karuakun/items/8d98f0430bf2dbc6af59

https://qiita.com/nekomimi-daimao/items/cd1e59c71b78bf5afda8

「どうするんだっけ……?」ってググってたら出てきた昔の自分の記事。

脚注
  1. .metaがどうなるかわからないのでUnityのコード生成を自動ビルドはこわい。 ↩︎

Discussion