CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-06-01中級

Claude Code を相棒に Firebase を CocoaPods から SPM へ移したときの実装メモ

個人開発の iOS アプリで Firebase を CocoaPods から Swift Package Manager へ移行した記録です。Claude Code に何を任せ、何を自分で判断したか、Crashlytics の dSYM でつまずいた点まで率直にまとめました。

Claude Code198Firebase4Swift Package Manager2iOS24Crashlytics8

長く運用しているアプリほど、ビルド環境の「古い前提」が静かに重荷になっていきます。私の場合は Firebase でした。2014 年から個人で iOS アプリを作り続けてきて、累計のダウンロードは 5,000 万を超えました。その多くで Firebase を使っているのですが、導入当時の自然な選択だった CocoaPods が、Apple Silicon 移行後のビルド時間やプライバシーマニフェスト対応のたびに、少しずつ手間の発生源になっていたのです。

今回、複数あるアプリのうちまず 1 本を Swift Package Manager(以下 SPM)へ移しました。作業そのものより、「どこを Claude Code に任せ、どこを自分で決めたか」の線引きが実用的だったので、その記録を残します。

なぜ今 SPM に移すのか

正直に言うと、CocoaPods でも動いてはいました。動いているものを触るのは怖いものです。それでも移行に踏み切った理由は三つあります。

一つ目は、クリーンビルドの待ち時間です。pod install を含むフローは、CI でも手元でも地味に時間を食います。二つ目は、Xcode 15 以降で Firebase の SPM 配布が十分に安定してきたこと。以前は SPM 版で詰まる話をよく聞きましたが、今は素直に入ります。三つ目は、プライバシーマニフェスト対応です。Firebase SDK 側がマニフェストを同梱するようになり、SPM 経由のほうが取り込みの見通しが良いと感じました。

逆に言えば、これらに困っていないアプリは無理に移す必要はありません。「動いているものを尊重しつつ、痛みが出た順に直す」のが、個人開発で長く続けるコツだと考えています。

実際にやった手順

移行はおおまかに「CocoaPods を抜く」「SPM で入れ直す」「ビルドフェーズを直す」の三段階でした。

最初に Podfile から Firebase 関連を取り除きます。

# Before(Podfile)
target 'MyWallpaperApp' do
  use_frameworks!
  pod 'Firebase/Analytics'
  pod 'Firebase/Crashlytics'
  pod 'Firebase/Messaging'
  pod 'SomeOtherLib'   # Firebase 以外はそのまま残す
end
 
# After(Podfile)— Firebase の 3 行を削除
target 'MyWallpaperApp' do
  use_frameworks!
  pod 'SomeOtherLib'
end

Firebase 以外にも Pod を使っている場合は、Podfile を空にせず、Firebase の行だけを消すのが安全です。その後、CocoaPods の痕跡を整理します。

# Firebase の行を消したあとに反映
pod install
 
# Firebase 以外の Pod も無い場合のみ、完全に外す
# pod deintegrate
# rm Podfile Podfile.lock
# rm -rf Pods
# 以降は .xcworkspace ではなく .xcodeproj を開く

次に Xcode で SPM の Firebase を追加します。File → Add Package Dependencies から firebase-ios-sdk を指定し、必要なプロダクト(私の場合は FirebaseAnalytics、FirebaseCrashlytics、FirebaseMessaging)だけをターゲットに紐づけます。ここで欲張って全部入れないことが、後のビルド時間に効いてきます。GoogleService-Info.plist はそのまま使えるので差し替え不要です。

ここまでで、Claude Code に渡したのは「移行前後の Podfile の差分」と「project.pbxproj の変更箇所」でした。人間の目だと見落としがちな、CocoaPods 時代に残った参照(Pods-*.xcconfig への Base Configuration 参照など)を機械的に洗い出してもらうのが、いちばん助かった使い方です。

いちばんつまずいた Crashlytics の dSYM

順調に見えた移行で、最後に足を取られたのが Crashlytics の dSYM アップロードでした。CocoaPods 時代の Run Script は、こうした ${PODS_ROOT} 前提のパスで動いていました。

# 壊れる例(CocoaPods 時代の名残)
"${PODS_ROOT}/FirebaseCrashlytics/run"

SPM には Pods ディレクトリが存在しないので、当然このパスは解決できず、ビルドは通るのにシンボル化されたクラッシュレポートが届かなくなります。気づきにくい類のエラーです。

正しくは、Build Phases に新しい Run Script を一つ追加し、SPM が配置したパッケージ内の run スクリプトを呼び出します。あわせて Input Files に dSYM と Info.plist のパスを明示します。

# SPM 移行後の Run Script(Build Phases に追加)
"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
# 同じ Run Script の Input Files に追加
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

このパスにたどり着くまで、私はビルドログをそのまま Claude Code に貼りました。「dSYM が見つからない」「run スクリプトの場所が違う」という二つの症状を切り分けてもらえたので、当てずっぽうのパス探しを避けられたのが大きかったです。エラーメッセージを丸ごと渡して原因の仮説を立てさせる、という使い方は、こうした環境依存のトラブルで特に相性が良いと感じます。

任せたこと、自分で決めたこと

今回いちばん腑に落ちたのは、Claude Code との「役割分担」でした。

機械的な作業、たとえば残った参照の洗い出し、ビルドログからの原因切り分け、Run Script の雛形作成は、任せたほうが速くて正確でした。一方で、「どのアプリから移すか」「どこまで一度に変えるか」「いま移すべきか先送りすべきか」という判断は、最後まで自分の仕事として残りました。

祖父はふたりとも宮大工でした。手を動かすことそのものが一種の信心だ、という感覚が私の根っこにあります。便利な道具が増えても、どこに手を入れるかを決める責任は自分が引き受ける——その線引きさえ崩さなければ、AI を相棒にした移行作業はとても心強いものになります。作業の速さと、判断の重さは、分けて考えるのが健全だと考えています。

次に取り組むこと

まず 1 本で型ができたので、残りのアプリにも順に同じ手順を展開していきます。次の検証テーマは、プライバシーマニフェストが SPM 経由でどこまで自動的に取り込まれるか、そして Package.resolved でのバージョン固定をリリース運用にどう組み込むか、の二点です。

同じように「動いているけれど、そろそろ移したい」と感じている方の参考になれば幸いです。最後までお付き合いいただき、ありがとうございました。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-06-04
Crashlytics の「Missing dSYM」をClaude Codeで潰した実装メモ
Firebase を SPM へ移行した直後、Crashlytics のクラッシュが記号化されず address のまま並びました。Missing dSYM 警告の原因をClaude Codeで切り分け、再発しないアップロード経路を組むまでの実作業メモです。
Claude Code2026-05-24
iOS Crashlytics の障害トリアージを Claude Code で自動化する — dSYM シンボリケーションから修正候補生成までの本番運用設計
Firebase Crashlytics に届く iOS クラッシュを Claude Code で受け取り、dSYM シンボリケーション、影響範囲推定、修正候補のドラフト PR までを一筆書きで流すパイプラインの本番運用設計を、累計5,000万DLのアプリ事業での実例と数値とともにまとめます。
Claude Code2026-05-17
CocoaPods 廃止まで残り半年 — Beautiful HD Wallpapers の Firebase SPM 移行を Claude Code でやり切った記録
2026年10月に Firebase Apple SDK の CocoaPods 配信が停止されます。4本のiOSアプリを個人で運営している廣川政樹が Beautiful HD Wallpapers を先行移行した経験と、Claude Code が詰まりをどう突破してくれたかを記録しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →