勉強不足で至らんブログ

勉強不足ですが色々と書いていきます。

fastlaneでWindowsのmsbuildを使う

fastlaneでmsbuildを使いたい!

docs.fastlane.tools

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ライクには書けません。

ここでプラグインの導入を検討しました。

github.com

検索をすると上記のプラグインが最初に目につくと思います。 自分もこれでmsbuildが使える!と思い中身を確認したところ、fastalneが元々macOSのみ対応していた名残もあり

https://github.com/willowtreeapps/fastlane-plugin-msbuild/blob/master/lib/fastlane/plugin/msbuild/actions/msbuild_action.rb#L9

この行を見ると引数で実行バイナリのディレクトリを指定するようになっています。引数がなければ msbuild というPATHの通ったバイナリを実行します。 これはMSBuildの構造の問題もありますが、MSBuidlのexeと同じディレクトリには MSBuild というディレクトリがあります。そのため、実行バイナリのディレクトリを指定するやり方では MSBuild ディレクトリを参照してしまい実行できません。そして MSBuild.exe にパスを通していてもプラグインmsbuild を呼び出すため実行されません。Windows環境では詰みました…

というわけで改めて探すと

github.com

というのを見つけました。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を叩いた方がよさそうでした。ログが出るため。