fastlaneでWindowsのmsbuildを使う
fastlaneでmsbuildを使いたい!
fastlaneというモバイル向けのビルドステップを簡略化してくれるruby製のツールがあります。プラグインなどが簡単に導入でき柔軟でとてもよいツールです(SlackやCDツールとの連携が楽)
fastlaneは数年前までmacOS専用のiOSのみのツールでしたがWindows/Linuxにも対応し、Androidのサポートも加わっています。使い方によってはモバイルに限りません。
今回はモバイルであってもなくてもVisualStudioで開発する際にMSBuildコマンドが使えればfastlaneで多少楽にビルドステップが書けると思います。
そんなツールでmsbuildを使いWindowsプラットフォームでビルドする想定のメモ書きです。
msbuildを使うには
fastlaneはmsbuildの実行をデフォルトではサポートしていません。 fastlaneはshの実行も簡単にできるので何でもshで書けます。msbuildも全てshにまとめていると実行できます(gitbashやcygwin導入時)
ただ、shで実行するだけではfastlaneライクには書けません。
ここでプラグインの導入を検討しました。
検索をすると上記のプラグインが最初に目につくと思います。 自分もこれでmsbuildが使える!と思い中身を確認したところ、fastalneが元々macOSのみ対応していた名残もあり
この行を見ると引数で実行バイナリのディレクトリを指定するようになっています。引数がなければ msbuild
というPATHの通ったバイナリを実行します。
これはMSBuildの構造の問題もありますが、MSBuidlのexeと同じディレクトリには MSBuild
というディレクトリがあります。そのため、実行バイナリのディレクトリを指定するやり方では MSBuild
ディレクトリを参照してしまい実行できません。そして MSBuild.exe
にパスを通していてもプラグインは msbuild
を呼び出すため実行されません。Windows環境では詰みました…
というわけで改めて探すと
というのを見つけました。Xamarinは内部的にmsbuildを使うところがあるので中身を確認したところ。引数で msbuild
の実行バイナリを指定する形式でしたのでexeも指定できました!
これで一旦めでたし!なのです!が!
msbuildのコマンドオプションの引数が…ない…だと…
という事態に陥ったのですが、fastlaneの作りとして裏でターミナルなどにコマンドを渡しているだけではあるので
lane :release do option = " /m" msbuild( msbuild: "exeまでのパス", project: "slnまでのパス", target: "ビルドするターゲット" + option ) end
のようにオプションのパラメータではない引数の後ろに空白を入力してオプションを指定すれば動きます!解決!(本当はissue作ってPRを作ったりした方がいいと思いますが)
おわり
fastlaneのmsbuildメモでした。Windows対応などがまだ浸透していないことを考えるとmacOSのみでビルド環境を構築した方がいいのかもしれません。ただ自分のようにWindowsでやりたい!という人は工夫をすれば乗り越えれると思います! rubyは割と簡単に扱えるので自分でプラグインを書くのもいいかもしれませんね!
追記(2020/12/01)
上記で紹介しているlaneを使うとログが正常に出ない場合がありshのlaneでMSBuild.exeを叩いた方がよさそうでした。ログが出るため。