fastlaneの使い方を自分で調べられるための手引き

始めに

モバイルアプリのビルドや配信などにfastlaneを使うと便利に行うことができます。

github.com

この記事はfastlaneの使い方ガイドではなく、fastlaneの使い方を自分で調べられるようになるためのガイドです。もしあなたがFastfileに何を書けるのかわからずあまり使いこなせていないのならば、この記事が手引きになるかもしれません。

そもそもFastfileって何よ

RubyDSLというものです。どんなことが書けるかは公式ドキュメントの Advanced - fastlane docs が参考になります。雑に説明すると、ビルドやテストなどのlaneの定義をすることができて、laneで何をするのかはRubyのプログラムとして記述できます。内部的にprivateなlaneも定義できて、複数のlaneから使う共通処理のような使い方もできます。 簡単にでもRubyの文法を知っておくことで、この辺のわからなさは取り除けるのではないでしょうか。僕はfastlaneを便利に使いたくてRubyの入門書を読みました。

amzn.to

僕はfastlaneと出会った頃、僕はRubyは全然知らなくてFastfileを見て自分にはこれを自在に編集することは難しいと途方に暮れましたが、なんとか自力でFastfile編集していけるようにはなったつもりです。

そもそもどんなことができるの

公式の Setup - fastlane docs に"What's Next?"という項目があり、そこでいくつかの利用例が紹介されています。 fastlaneはActionやPluginという形式で「よくある処理」を簡単に実現できるようになっています。Actionの一覧や仕様は Actions - fastlane docs が参考になります。Pluginは Available Plugins - fastlane docs から参照できるようですが、まだ使ったことがないのでよくわかっていません。

基本的にはこれらActionやPluginを組み合わせることで「証明書登録->プロビジョニングプロファイル準備->アプリのアーカイブ->配信」のような一連の処理を一つのlaneで実現するのが一般的な使い方と思います。

Actionの中でなにをやっているのかわからない

幸いなことにfastlaneはオープンソースなのでソースコードを見てみることで得られる情報もあります。細かい処理すべてを把握することは大変ですが、全体的なフローを見るだけでもかなり参考になるはずです。

update_app_identifierというアクションがあり、これは「App Bundle Identifireを書き換える」というものです。僕はこれが「xcodeprojを書き換えるのかinfo.plistを書き換えるのかよくわからない」という疑問を持って中を見たことがありますが、概要の把握は難しくなかった印象です。

コード読みの手初めとしてはおすすめかもしれないので、記事執筆時点でのソースコードへのリンクをはっておきます。 fastlane/update_app_identifier.rb at 7c556247862d8635ec3e4dd059a515b60ec2e286 · fastlane/fastlane · GitHub

Swiftになれている方にとってはSwftの方が読みやすいかもしれないので、update_app_identifierをSwiftぽく要約してみました。間違っていましたらコメントなどで突っ込んでいただけるとうれしいです。

func updateAppIdentifier(plistFilePath: String, xcodeprojFilePath: String, to appIdentifire: String) {
    let plist: [String: Any] = plistを開く(plistFilePath)
    if plist["CFBundleIdentifier"] == "${PRODUCT_BUNDLE_IDENTIFIER}" {
        // plistがxcodeprojの設定を参照しているのでそちらを書き換える
        var project = xcodeprojを開く(xcodeprojFilePath)
        var configs = project.objects.filter { $0がplistFilePathを使っている }
        for config in configs {
            config.build_settings["PRODUCT_BUNDLE_IDENTIFIER"] = appIdentifire
        }
        project.save()
    } else {
        // plistにべた書きされているのでそちらを書き換える
        var newPlist = plist
        newPlist["CFBundleIdentifier"] = appIdentifire
        plistをファイルに保存(newPlist, to: plistFilePath)
    }
}

単純なコマンドでしたら中の実装を詳細に把握できなくても、仕様が理解できると思います。 もしfastlane側の不備や機能不足でしたらあなたがプルリクエストを送ってしまうこともできます。

Contributeしたいのですが

@giginet さんの発表資料がわかりやすくておすすめです。

speakerdeck.com

僕はこの発表を聞いてFix typoしました。この発表の@giginetさんがマージしてくれています。(ありがとうございました🙏)

github.com

僕はこれがOSSへの初めてのContributeだったのですが、一度ContributeしてからはOSSソースコードもどんどん読むようになりましたし、プルリクエストを出すことのハードルも下がったような気がします。fastlaneももっと好きになれました。

コミュニティ

fastlane勉強会というものがあり、僕はだいたい参加しています。

fastlane.connpass.com

僕はこの勉強会からいろいろな知見を得ました。(というはほぼこの辺からもらった知見と刺激ばかり) 先ほどの@giginetさんの発表もこの勉強会で登壇されたときのものです。

この勉強会ではSlackもやっているのでチョットワカル人たちとコミュニケーションすることもできます。

まとめ

  • Fastfileを初めて見ると訳がわからないけど基本がわかればあとは怖くない
  • fastlaneはオープンソースなので臆することなくソースコードを読むとより詳細な仕様がわかり、怖がらずにActionを使えます
  • Contributeするのも「やっていき」の面で有効です
  • fastlane勉強会がおすすめです
  • fastlane勉強会主催者の @nerd0geek1さんは個人でやっているので運営が大変らしいですが、「参加してみたい」という声を届けるとよいかもしれません