Fastlane を設定し終わったはずなのに、いざリリース日に fastlane beta を叩くと証明書エラーで止まる——そんな経験、一度はありませんでしょうか。私自身、複数のアプリを個人で運用する中で、Fastlane の設定ファイルが少し複雑なアプリになった瞬間に迷子になった経験があります。
Claude Code と Fastlane を組み合わせると、この「設定が崩れたときの復旧」が大幅に楽になります。Claude Code は Fastfile の構文を理解した上で修正案を提示し、fastlane env の出力を読んでどの環境変数が不足しているかを自分で判断します。今回は、iOS と Android 両対応のデプロイパイプラインを Claude Code の力を借りて構築する手順をご紹介します。
Fastlane × Claude Code の役割分担
まず「Fastlane に何をさせて、Claude Code には何をさせるか」を整理しておきましょう。
Fastlane が担当する領域:
- ビルド・署名・アーカイブの実行(
xcodebuild/gradleのラッパー) - App Store Connect / Google Play Developer Console への自動アップロード
- スクリーンショット自動生成(
snapshot/screengrab) - 証明書・プロビジョニングプロファイルの管理(
match)
Claude Code が担当する領域:
- Fastfile の雛形生成と既存設定の読み解き
- エラーメッセージの診断と Fastfile 修正案の提示
- 環境変数の不足・型ミスの検出
- App Store Connect API キーの設定確認と
Appfileの最適化
Claude Code は「Fastlane の詳細を知っている開発パートナー」として機能します。自分ではなかなか読み込む気になれない Fastlane の公式ドキュメントを、必要な部分だけかいつまんで教えてくれる存在です。
前提環境の確認
作業を始める前に、以下が揃っているか確認してください。
- Xcode 26 / Android Studio Meerkat 以降
- Ruby 3.2 以上(
ruby --versionで確認) - Fastlane 2.225.0 以上(
fastlane --versionで確認) - App Store Connect API キー(
.p8ファイル + Key ID + Issuer ID) - Google Play サービスアカウント JSON(Android の場合)
Fastlane がインストールされていない場合、Claude Code に bundle init からの初期設定を任せるのが最も簡単です。
# プロジェクトルートで実行
claude "このiOSプロジェクトにFastlaneをセットアップしてください。
Ruby bundlerを使い、Gemfileも作成してください。
App Store Connect APIキーは .env ファイルで管理する方針にしてください"このプロンプト1つで、Claude Code は Gemfile・fastlane/Appfile・fastlane/Fastfile の雛形を生成し、.env.example に必要な環境変数をリストアップしてくれます。
Fastfile の設計:iOS 編
以下は Claude Code が生成した Fastfile の典型例です。App Store Connect API を使った署名レスのアップロードが肝心なポイントです。
# fastlane/Fastfile(iOS)
default_platform(:ios)
platform :ios do
before_all do
# .env から環境変数を読み込み(dotenv gem 使用)
Dotenv.load(".env")
end
desc "開発環境用ビルドを TestFlight にアップロード"
lane :beta do
# App Store Connect API 認証(証明書ファイル不要)
app_store_connect_api_key(
key_id: ENV["ASC_KEY_ID"],
issuer_id: ENV["ASC_ISSUER_ID"],
key_content: ENV["ASC_KEY_CONTENT"], # .p8 の内容を base64 エンコードした文字列
is_key_content_base64: true
)
# match で証明書を同期(Git リポジトリから取得)
match(type: "appstore", readonly: true)
# ビルド番号をインクリメント
increment_build_number(
build_number: latest_testflight_build_number + 1
)
# ビルドとアーカイブ
build_app(
scheme: ENV["SCHEME_NAME"],
export_method: "app-store",
output_directory: "./build",
output_name: "MyApp.ipa"
)
# TestFlight にアップロード
upload_to_testflight(
skip_waiting_for_build_processing: true, # 処理完了を待たずに終了
changelog: "自動デプロイ: #{Time.now.strftime('%Y-%m-%d %H:%M')}"
)
end
desc "本番リリース(App Store 審査提出)"
lane :release do
beta # beta レーンを再利用してビルド
upload_to_app_store(
submit_for_review: true,
automatic_release: false, # 審査通過後も手動で公開
force: true # スクリーンショット再アップロードをスキップ
)
end
endここで重要なのが is_key_content_base64: true の指定です。.p8 ファイルを直接パスで指定する方法もありますが、CI 環境では環境変数でバイナリを渡す方が安全です。.p8 の中身を base64 エンコードする方法は次のコマンドで確認できます。
# .p8 ファイルの内容を base64 エンコード(1行で出力)
base64 -i AuthKey_XXXXXXXXXX.p8 | tr -d '\n'Fastfile の設計:Android 編
Android の場合は Google Play API とキーストアの管理が中心になります。
# fastlane/Fastfile(Android追記)
platform :android do
desc "内部テストトラックにアップロード"
lane :beta do
gradle(
task: "bundle",
build_type: "Release",
project_dir: "android/",
properties: {
"android.injected.signing.store.file" => ENV["KEYSTORE_PATH"],
"android.injected.signing.store.password" => ENV["KEYSTORE_PASSWORD"],
"android.injected.signing.key.alias" => ENV["KEY_ALIAS"],
"android.injected.signing.key.password" => ENV["KEY_PASSWORD"]
}
)
upload_to_play_store(
track: "internal",
aab: "android/app/build/outputs/bundle/release/app-release.aab",
json_key: ENV["GOOGLE_PLAY_JSON_KEY_PATH"]
)
end
endキーストアのパスワードを環境変数で渡す設計にすることで、keystore.properties ファイルをリポジトリに含める必要がなくなります。
Claude Code を使ったデバッグの実際
Fastlane で最もつまずくのが証明書・プロビジョニング周りのエラーです。実際に私が遭遇したエラーのデバッグを Claude Code に任せた例を紹介します。
# エラーの例
[!] Your account already has a valid certificate for this
bundle identifier stored locally. However, the fastlane
provisioning profile was regenerated.
このエラーをターミナルにコピーして Claude Code に貼ると、「match(force_for_new_devices: true) を追加する」か「match(readonly: false) で証明書を強制再生成する」の2択を文脈付きで提案してくれます。どちらを選ぶべきかの理由も説明してくれるので、Fastlane の内部挙動を学びながら問題解決できます。
# Claude Code への質問例(ターミナルから直接)
claude "fastlaneのbetaレーンを実行したら以下のエラーが出ました。
どう修正すればよいですか?
[エラーの内容をここにペースト]
現在のFastfileの内容は以下です:
[Fastfileの内容をここにペースト]"コードと文脈を一緒に渡すことで、一般論ではなくこのプロジェクト固有の解決策を提案してくれます。
.env ファイルの設計と秘密情報の管理
# .env.example(リポジトリにコミットするテンプレート)
# App Store Connect API
ASC_KEY_ID=YOUR_KEY_ID
ASC_ISSUER_ID=YOUR_ISSUER_ID
ASC_KEY_CONTENT=BASE64_ENCODED_P8_CONTENT
# アプリ設定
SCHEME_NAME=MyApp
BUNDLE_ID=com.example.myapp
# Android キーストア
KEYSTORE_PATH=/path/to/release.keystore
KEYSTORE_PASSWORD=YOUR_KEYSTORE_PASSWORD
KEY_ALIAS=release
KEY_PASSWORD=YOUR_KEY_PASSWORD
# Google Play
GOOGLE_PLAY_JSON_KEY_PATH=/path/to/service-account.json.env 自体は .gitignore に追加し、.env.example だけをコミットします。この設計を Claude Code に最初から指示すると、生成される Fastfile も最初から ENV[] 参照で書いてくれます。
まずは fastlane beta を1回走らせてみましょう
環境が整ったら、まず手元のターミナルから bundle exec fastlane beta を実行してみてください。途中でエラーが出たら、その出力を丸ごと Claude Code に渡すのが最も効率的なデバッグ方法です。Fastlane の設定は「最初の1回を通す」ことが最大の山で、一度通ってしまえばその後は安定して動き続けます。
iOS 開発の証明書まわりをもっと深く理解したい場合は Claude Code × App Store Connect API: iOS/Androidアプリ完全自動リリースパイプライン構築ガイド も参考にしてみてください。テスト自動化と組み合わせるなら Claude Code で作る iOS テスト自動化基盤 も合わせてご覧いただけると、リリースまでのパイプライン全体像が見えてきます。