この記事は何?
Agentic AI が賑わっている中、「週末にちょろっとモバイルアプリを作ろうかな」と考えている方がいるかと思います。本記事では、Claude Code を使って Flutter 製 iOS アプリを開発し、git push するだけで実機に届く仕組みを構築するまでの流れを簡易的に説明します。
私の手元に iOS デバイスしかなかったので、Android APK の構築は手順から省いています。(Pixel 10 Pro Fold 欲しい)
GitHub、CI/CD、GCP あたりは普段から触っている前提で書いています。一方で、iOSアプリ特有の「署名」「Provisioning Profile」「Ad Hoc配信」 といった概念は、初めて触る方が多いと思うのでそこを重点的に説明します。
この記事は細かい手順書ではありません。 各ステップの具体的な操作は Claude Code に聞けばやってくれます。大事なのは 「どんなサービスを組み合わせて、それぞれが何の役割を担うのか」 という全体像を理解しておくことです。全体像さえ頭に入っていれば、あとは Claude Code に「次は何をすればいい?」と聞くだけで進められます。
急いでいる方へ: 記事の末尾に Claude Code に送るプロンプト集 を載せています。全体像を読む時間がない方は、そこからプロンプトをコピーして Claude Code に投げるだけでも始められます。
ゴール
git push するだけで、自分の iPhone にアプリが届く仕組みを作ります。
コードを書く → git push → 自動でビルド → iPhone に届く
まず全体像 — 利用するサービスと、それぞれの役割
この仕組みで使うサービスは6つです。それぞれが何の役割を担うか、まずここだけ押さえてください。
| サービス | 役割 | 費用 |
|---|---|---|
| Claude Code | コーディング&iOS固有の知識の補完 | $20〜$100/月 |
| GitHub | ソース管理 | 無料 |
| GitHub Actions | CI/CD(ビルド・テスト・配信の自動化) | 無料 |
| Apple Developer Program | コード署名(Ad Hoc 配信用) | 約15,000円/年 |
| Firebase App Distribution | IPAのテスト配信 | 無料 |
| GCP | GitHub Actions → Firebase 間の認証(WIF) | 無料 |
これらが以下の流れでつながります:
┌──────────────────────────┐
│ あなたの Mac │
│ │
│ Claude Code でコードを書く │
│ git push する │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ GitHub │
│ push をトリガーに → │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ GitHub Actions │
│ │
│ ① analyze(テスト・lint) │
│ ② build-ios(IPA作成) │
│ ③ deploy(Firebase 配信) │
│ ④ notify(Slack 通知) │
└────────┬─────────────────┘
▼
┌──────────────────────────┐
│ iPhone / iPad │
│ Firebase App Tester │
└──────────────────────────┘
Step 1. 事前準備
アカウント登録
| サービス | 登録先 | 備考 |
|---|---|---|
| Apple Developer Program | developer.apple.com | 年額 $99。審査に数日かかることがある |
| Firebase | firebase.google.com | Blaze プラン(従量課金)推奨。App Distribution 自体は無料 |
| GCP | console.cloud.google.com | Firebase と同じプロジェクトを使う |
| Anthropic(Claude) | claude.ai | Pro $20/月 or Max $100/月 |
Mac に入れるもの
# Flutter
# → https://flutter.dev/docs/get-started/install
# Xcode(App Store から)
# Claude Code
# → https://docs.anthropic.com/en/docs/claude-code/overview
npm install -g firebase-tools
brew install gh
Step 2. プロジェクトを作る
flutter create {my_app}
cd {my_app}
git init
CLAUDE.md を置く
リポジトリのルートに CLAUDE.md を置きます。Claude Code がプロジェクトのコンテキストとして読み込む指示書です。
# CLAUDE.md
## プロジェクト概要
Flutter製iOSアプリ
## 技術スタック
- Flutter / Dart
- Firebase
## コマンド
- テスト: `flutter test`
- ビルド: `flutter build ipa --release`
- 実行: `flutter run`
## ルール
- サービス層とUI層を分離する
- テストは test/ ディレクトリに配置
ARCHITECTURE.md や DEPLOYMENT.md も Markdown で整備しておくと、Claude Code の出力精度が上がります。
Step 3. Claude Code でコードを書く
$ claude
> ログイン画面を作ってください。
> メールアドレスとパスワードの入力欄、ログインボタンを配置してください。
普段の開発と同じ感覚で使えます。この先のステップ(署名設定、WIF構築、GitHub Actions のワークフロー作成など)も、Claude Code に何をしたいか伝えれば具体的な手順やコードを出してくれます。 この記事では「何をやるか」の全体像だけ押さえておいてください。
Step 4. Apple の署名まわり — iOS固有の最大のハードル
普段 Web やバックエンドを触っているエンジニアが iOS で最初に戸惑うのが、この署名の仕組みです。
なぜ署名が必要か
iOSは App Store 経由でもそうでなくても、署名のないアプリは実機で動きません。 Apple Developer Program に登録し、「この開発者が作ったアプリを、この端末で動かしてOK」という許可を設定する必要があります。
用語の整理
| 用語 | 役割 |
|---|---|
| Apple Distribution 証明書 | アプリの署名に使う証明書(.p12)。GitHub Secrets に格納 |
| Provisioning Profile | 証明書 + App ID + 許可端末リスト をまとめたファイル |
| UDID | iPhone / iPad の端末固有 ID |
| Ad Hoc 配信 | App Store を経由せず、Provisioning Profile に登録した端末へ直接配信する方式 |
| ExportOptions.plist |
flutter build ipa 時に渡す署名設定ファイル |
やることの概要
-
xcrun xctrace list devicesで対象端末の UDID を取得 - Apple Developer Portal で証明書・端末登録・Provisioning Profile を作成
-
ios/ExportOptions.plistを作成
ここが一番ややこしいですが、Claude Code に「Ad Hoc 配信の署名設定をしたい」と伝えれば案内してくれます。一度設定すれば、証明書の期限切れ(年1回程度)まで触ることはありません。
Step 5. Firebase App Distribution — IPA のテスト配信
App Store 公開前のビルドを、登録したテスターの端末に配信するサービスです。完全無料。
やることの概要
- Firebase Console でプロジェクト作成 → iOS アプリ登録
-
GoogleService-Info.plistをios/Runner/に配置 - App Distribution でテスターグループを作成、テスターのメールアドレスを追加
iOS の Ad Hoc 配信で知っておくべき「2層構造」
テスト配信が成功するには 2つの許可 が必要です。
| レイヤー | 許可内容 | 設定場所 |
|---|---|---|
| Apple | この端末でアプリを実行してOK | Provisioning Profile に UDID を登録 |
| Firebase | このテスターにビルドを配信してOK | testers グループにメール追加 |
両方揃って初めて配信が成功します。 「届かない」ときはこの2つを確認してください。
Step 6. GCP の認証 — GitHub Actions → Firebase の認証
GitHub Actions から Firebase App Distribution API を叩くための認証です。
サービスアカウントキー vs WIF
| 方法 | 特徴 |
|---|---|
| サービスアカウントキー(JSON) | 手軽だが、キーの漏洩リスクがある |
| Workload Identity Federation(WIF) | OIDC ベースのキーレス認証。キーが存在しないので漏洩しない |
私は WIF を使っています。GitHub Actions の OIDC トークンを GCP の Workload Identity Pool で検証し、一時的な認証情報を発行する仕組みです。
Step 7. GitHub Secrets
CI/CD パイプラインで使う秘密情報を gh secret set で登録します。
| Secret名 | 内容 |
|---|---|
IOS_CERTIFICATE_P12 |
Apple Distribution 証明書(base64) |
IOS_CERTIFICATE_PASSWORD |
証明書のパスワード |
IOS_PROVISION_PROFILE |
Ad Hoc Provisioning Profile(base64) |
FIREBASE_APP_ID_IOS |
Firebase iOS アプリ ID |
WIF_PROVIDER |
Workload Identity Provider のリソース名 |
WIF_SERVICE_ACCOUNT |
Firebase App Distribution 用の SA |
SLACK_WEBHOOK_URL |
Slack 通知用(任意) |
Step 8. GitHub Actions ワークフロー
.github/workflows/deploy.yml で4ジョブを定義します。
① analyze flutter analyze + flutter test(ubuntu。毎回実行)
② build-ios flutter build ipa(macos。main push 時のみ)
③ deploy firebase appdistribution:distribute(ubuntu。build-ios 完了後)
④ notify Slack webhook(ubuntu。always)
追記: GitHub Actions で build-ios を回すと課金が発生します。手元では15minかかっていたため、Build(Mac上で行う)-> GitHub Actionsでは analyze -> deploy -> notify までと変更しました。
ポイント
- analyze は ubuntu、build-ios は macos-latest — macOS Runner は無料枠の消費が10倍。テストとビルドを分離してコストを抑える
-
build-ios は
if: github.ref == 'refs/heads/main'— PR ごとにビルドすると無料枠を使い切る -
ビルド番号は
github.run_number— 手動管理不要 -
deploy は
google-github-actions/auth@v2で WIF 認証
deploy.yml の全文は Claude Code に「GitHub Actions で Flutter iOS ビルド → Firebase App Distribution に配信するワークフローを生成して」と伝えれば、プロジェクトの構成に合わせて出力してくれます。
Step 9. push して動作確認
git push origin main
GitHub の Actions タブでパイプラインの進行を確認。成功すれば Firebase App Tester にビルドが届きます。
テスター側の初回セットアップ
- Firebase からの招待メールを Safari で開く
- Firebase App Tester アプリをインストール
- Google アカウントでログイン → アプリをダウンロード
2回目以降は App Tester を開くだけで最新版が表示されます。
かかるお金まとめ
| サービス | 費用 | 補足 |
|---|---|---|
| Apple Developer Program | 約15,000円/年 | 必須 |
| Claude Code(Pro) | $20/月 | 週末開発ならこれで十分 |
| Claude Code(Max 5x) | $100/月 | 集中して開発するならこちら |
| GitHub | 無料 | |
| GitHub Actions | 無料 | 2,000分/月。macOS は10倍消費(実質200分) |
| Firebase App Distribution | 無料 | |
| GCP | 無料 |
パターン別
| パターン | 月額目安 | 年額目安 |
|---|---|---|
| 週末だけ開発(Pro) | 約4,300円 | 約51,000円 |
| がっつり開発(Max 5x) | 約16,300円 | 約195,000円 |
| API従量課金 | 約1,300円〜 | 約15,000円〜 |
つまずきやすいところ
| 症状 | まず疑うこと |
|---|---|
| CI/CD が突然失敗 | Apple 証明書 or Provisioning Profile の期限切れ |
| シミュレータOK、実機NG |
Info.plist のパーミッション設定漏れ |
| Firebase にビルドが届かない | UDID 登録(Apple側)とテスターメール登録(Firebase側)の両方を確認 |
| 無料枠を使い切った | analyze を ubuntu に、build-ios を main push のみに |
エラーが出たら、メッセージを貼り付けつつ 「なぜこのエラーが発生するのか理由も説明して」 と伝えるのがおすすめです。対処法だけでなく発生理由もセットで聞くことで、iOS 固有の仕組みへの理解が深まります。
実機で動くようになるまでに何回かビルドエラーを踏むことになりますが、そのたびに Claude Code と対話していると、気づけば署名や Provisioning Profile の仕組みにも詳しくなっています。
付録: Claude Code にどんなプロンプトを送ればいい?
「Claude Code を使えばいいのはわかったけど、最初に何を伝えればいいのかわからない」という方のために、私が実際にプロジェクト開始時に送った内容を要約して参考例を載せておきます。
プロンプト例 1: プロジェクトの立ち上げ
Flutter で iOS アプリを新規作成したい。
【やりたいこと】
- {アプリの概要を1〜2文で}
- 例: 「日々のタスクと作業時間を記録し、デイリーログとして管理する Web + モバイルアプリ」
【技術スタック】
- Flutter / Dart
- 状態管理: Riverpod
- Firebase(Analytics、App Distribution)
- CI/CD: GitHub Actions
【お願い】
1. flutter create でプロジェクトを作成
2. CLAUDE.md(プロジェクトの指示書)を作成
3. ARCHITECTURE.md(設計ドキュメント)を作成
4. ディレクトリ構成は lib/ 配下を models / services / providers / ui に分ける
ポイントは、「何を作りたいか」と「どの技術を使うか」を最初に伝えることです。Claude Code はこの情報をもとに CLAUDE.md を生成し、以降の開発はその指示書に沿って一貫したコードを出力してくれます。
プロンプト例 2: CI/CD パイプラインの構築
このプロジェクトに GitHub Actions の CI/CD パイプラインを構築したい。
【要件】
- main push 時に iOS ビルド → Firebase App Distribution へ配信
- PR 時はテストと静的解析のみ(iOS ビルドは走らせない)
- テストは ubuntu、iOS ビルドは macos-latest
- ビルド番号は github.run_number で自動インクリメント
- GCP Workload Identity Federation でキーレス認証
- 成功/失敗を Slack に通知
【前提】
- Apple Developer Program 登録済み(Ad Hoc 配信)
- Firebase プロジェクト作成済み
- ExportOptions.plist は ios/ に配置済み
.github/workflows/deploy.yml を生成してください。
必要な GitHub Secrets の一覧も出してください。
プロンプト例 3: iOS 署名まわりの設定
iOS の Ad Hoc 配信に必要な署名の設定をしたい。
Apple Developer Program には登録済み。
以下を順番に案内してほしい:
1. Apple Distribution 証明書の作成と .p12 エクスポート
2. テスト端末の UDID 取得と Apple Developer Portal への登録
3. Ad Hoc Provisioning Profile の作成
4. ExportOptions.plist の作成
5. GitHub Secrets への登録コマンド
プロンプト例 4: 開発中の日常的なやりとり
# 機能追加
> 設定画面にダークモード切り替えのトグルを追加して
# デバッグ
> flutter build ipa で以下のエラーが出た。対処法を教えて
> [エラーメッセージを貼り付け]
# 相談
> Firebase App Distribution にビルドが届かない。
> GitHub Actions のログでは deploy ジョブが成功しているのに。
> 何を確認すればいい?
大事なのは「何をしたいか」「何が起きているか」を伝えること。具体的なコマンドや設定値は Claude Code が出してくれます。
補足: Slack × Claude Code の連携
本記事では GitHub Actions の通知用に Slack Incoming Webhook を使っていますが、それとは別に Slack 上で @Claude とメンションするだけで、リポジトリの調査やコード修正の指示を送ることもできます。
仕組み
Slack で @Claude にメンションし、対象のリポジトリを指定すると、Anthropic のクラウドインフラ上にコンテナが起動し、Claude Code のセッションが開始されます。セッションは GitHub 連携を通じてリポジトリにアクセスし、コードの調査・修正・PR 作成まで行えます。
Slack で @Claude にメンション(リポジトリを指定)
↓
Anthropic クラウド上にコンテナが起動、Claude Code セッション開始
↓
GitHub 連携でリポジトリにアクセス・調査
↓
進捗を Slack スレッドにリアルタイム投稿
↓
完了後、結果の報告や PR 作成が行われる
Slack 側の設定
Slack と Claude の連携に MCP(Model Context Protocol)の設定は不要です。必要なのは以下の2つだけです。
- Slack Incoming Webhook(GitHub Actions のビルド通知用) — 本記事の CI/CD パイプラインで設定済み
-
Claude Slack アプリのインストール —
@Claudeメンションによるコーディング指示用
つまり、通知は Incoming Webhook で受け取り、指示は @Claude メンションで送る、という使い分けです。
何がうれしいか
-
ビルド失敗の通知を見て、そのまま
@Claudeで修正指示を出せる — ターミナルを開く必要がない - 出先でも iPhone の Slack アプリから指示を飛ばせる — 週末の買い物中でもバグ修正を走らせておける
- スレッドのコンテキスト(エラーログなど)をそのまま Claude が読める — 状況説明の手間が省ける
前提条件
| 要件 | 詳細 |
|---|---|
| Claude プラン | Pro / Max / Team / Enterprise(Claude Code アクセス付き) |
| GitHub 連携 | Claude に GitHub アカウントを接続し、対象リポジトリへのアクセスを許可済み |
| Slack アプリ | Slack App Marketplace から Claude アプリをインストール |
まとめ
この記事で伝えたかったのは、各サービスの役割と、それらがどうつながるか という全体像です。
| サービス | 役割 |
|---|---|
| Claude Code | コーディング&iOS固有の知識の補完 |
| GitHub | ソース管理 |
| GitHub Actions | CI/CD(ビルド・テスト・配信の自動化) |
| Apple Developer Program | コード署名 |
| Firebase App Distribution | IPA のテスト配信 |
| GCP | GitHub Actions → Firebase の認証(WIF) |
各ステップの具体的な操作やコマンドは、Claude Code に「何をしたいか」を伝えれば出してくれます。全体像を把握した上で Claude Code と対話すれば、iOS の開発経験がなくても週末で一通り動く仕組みを組めるはずです。
作りたいものがたくさんある人へ
一つアプリを作り始めると、次から次へと新しいアイデアが形になり、気づけば複数のプロジェクトを同時並行で進めたくなります。
- 実機で動く喜びから、無限に改善を繰り返したくなる。
- ログを集約したくなり、外部連携やアーキテクチャの刷新にものめり込む。
- 隙間時間さえも「次の一手」を考える思考に塗り替えられてしまう。
気づけば、起きている時間のすべてが「次に何を作るか・どう改善するか」を考える時間になってしまいます。
作りたいものが多い人ほど、この「開発の沼」には要注意です。生活のバランスがガラリと変わるからこそ、最も大切な「睡眠、食事、運動、そして開発」という優先順位を忘れないようにしましょう。