Claude Codeなんもわからんので、AI縛りでiOSアプリを開発してみた

Claude Codeなんもわからんので、AI縛りでiOSアプリを開発してみた

2025.07.10

これまでAIを完全に信用しきれず、補助的に使うことはあってもハンドルを渡すことに躊躇していた。しかし、世の中ではClaude Codeが流行っており、乗り遅れるわけにはいかないと思った。

私はドキュメントを読んですべて理解できるほど優秀ではないので、実際に体験してみることにした。そこで、Claude Codeを使って新規のiOSアプリを開発することにした。

当初の目標は完全なAI縛りでの開発だったが、実際にはXcodeのプロジェクトファイルの編集などAIには難しい部分があり、「AI主導+人間サポート」という形になった。それでも可能な限りClaude Codeにメインでコーディングを任せ、どこまでAIだけで開発できるかを検証した。

検証環境

  • macOS 15.5
  • Xcode 16.4
  • Claude Code Pro プラン

Claude Codeの導入

Claude Codeの導入はnpmを使って行う。インストール方法については、nokomoro3氏の書かれた「Claude Codeを徹底解説してみた(前編)」が参考になる。

この記事では、S3のバケット一覧を取得するスクリプトを生成しているが、導入部分は成果物に関係なく共通の手順なので、セットアップまで同様に進めれば問題ない。

どのようなアプリを作るか

お試しで新規アプリを作成するにも特にアイディアがなかったため、Claudeのチャットモードで壁打ちしながら、どのようなアプリを作成するのか検討した。自分が使いたいアプリを開発することで、リリースまでモチベーションを維持することができる。いわゆるドッグフーディングをしながら開発を進めていくのが好きだ。

自分の1日のライフスタイルをClaudeに伝えたところ、スクワット回数をカウントするアプリを提案された。MVPとしても小機能で成立すると考え、これを開発することにした。

Claudeのリサーチ機能を使い、アプリのコンセプト、必要な画面、アプリ名に至るまで考えてもらった。リサーチ機能は優秀で、スクワットカウンターアプリはアプリストアに溢れており、レッドオーシャンであることを教えてもらった。しかし今回は収益を出すのが目的ではなく、実際に作ってみることが目的なのでそのまま進めることにした。

アプリのコンセプトが決まったら、次はアプリ名だ。これまでAIにアプリ名を考えてもらうことは度々あったが、提案されたアプリ名はいまいちしっくりこず、また既に存在しているアプリの名称を提案してくることが多々あった。そのため、長らくAIにアプリ名を考えてもらうことはしていなかったのだが、リサーチ機能を使って重複しておらず、そこそこ良い名前を考えてもらうことに成功した。

前準備

アプリのコンセプトとアプリ名が決まったので、実際にアプリの開発を進めていく。Claude CodeはiOSアプリのプロジェクト構造の編集が苦手なようで、最初の部分は手動で行う必要がありそうだ。

まず、任意のディレクトリにXcodeのプロジェクトを作成する。Xcode 16以上であればフォルダー形式でソースコードを管理することができる。従来のグループ形式では、プロジェクトにソースコードを追加するのに.xcprojファイルを編集する必要があった。手動で開発しているのであればXcodeのGUI上で操作すればよいが、AIには.xcprojファイルの操作は難しい。

フォルダー形式ではソースコードを決められた場所に置くだけで、Xcodeが自動的に参照してビルド対象としてくれる。AI時代にマッチしたソースコードの管理方法だと思う。

最後にClaudeのチャットモードで、アプリのコンセプトや画面構成について整理してもらい、その内容をリポジトリのREADME.mdに記載しておいた。

アプリをポン出ししてみる

SNS上では1ワード入力しただけで、アプリを作成できたという人がいる。おそらく初回生成の段階で、かなり細かくアプリの要件・仕様を言語化できているのだと思う。

しかし、私は現時点でそこまで具体的なアプリ像があるわけではない。とりあえずClaude Codeへの最初の依頼は以下の通りにした。

* プロジェクトは現時点ではスケルトンである。README.md を読み込みアプリの仕様を理解せよ
* プロジェクトをビルドして、ビルドが通ることを確認せよ。
* プロジェクトのテストを実行し、パスすることを確認せよ。
* CLAUDE.mdを日本語で作成せよ。

ここでの重要な点としては、ビルドをパスすること、テストをパスすることをまずAIに確認させることだ。次からの修正時にビルドとテストを実施してくれるようになった。

基本的な動作確認ができたところで、以下のプロンプトを順次入力して画面を生成してもらった。

* HomeScreenを実装せよ。
* 設定画面を実装せよ。
* スクワット画面を実装せよ。
* NavigationStack を利用して画面遷移してほしい。

ポン出しにも関わらず、想像以上にクオリティの高いUIが生成されて驚いた。

20250710153552

ただし、SwiftUIのViewの実装に問題があり、frame modifierが適切に指定されていないため、スタートボタンをタップした後にviewが細くなるといった不具合が発生していた。

20250710153538

Claude Codeの実行確認から自動化への移行

Claude Codeの最初のイメージは、実装内容を指示するとAIが勝手にソースコードを編集したり、コマンドを実行したりするものであった。これが冒頭で述べた不審感の正体だった。

実際にはコマンドの実行前に、ユーザーに対して実行しても良いか確認してくれる。1. Yesを選択してエンターキー押下を何度か繰り返しているうちに、このコマンドなら自動で実行されても良いだろうというのが見えてくる。

2. Yes, and don't ask again を選択すると、次回からはユーザーに確認せずに実行する。実行してね・実行しないでねの記録は、.claude/settings.local.jsonに追加されていく。

リポジトリで管理する場合には、.claude/settings.json に設定を移すのが良いだろう。

{
  "permissions": {
    "allow": [
      "Read(./**)",
      "Write(./**)",
      "Bash(ls:*)",
      "Bash(find:*)",
      "Bash(grep:*)",
      "Bash(mkdir:*)",
      "Bash(xcodebuild:*)",
      "Bash(swift:*)",
      "Bash(swift package init:*)",
      "Bash(swift test:*)",
      "Bash(swift build)",
      "Bash(swift -typecheck:*)",
      "Bash(xed:*)",
      "Bash(cat:*)",
      "WebFetch(domain:developer.apple.com)"
    ],
    "deny": [
      "Read(**/.env*)",
      "Read(**/GoogleService-Info.plist)",

      "Bash(rm -rf /)",
      "Bash(rm -rf ~)",
      "Bash(rm -rf /*)",
      "Bash(sudo rm:*)",
      "Bash(sudo dd:*)",
      "Bash(sudo mkfs:*)",
      "Bash(sudo fdisk:*)",
      "Bash(sudo mount:*)",
      "Bash(sudo umount:*)",
      "Bash(sudo:*)",
      "Bash(curl:*)",
      "Bash(wget:*)",
      "Bash(nc:*)",
      "Bash(netcat:*)",
      "Bash(ssh:*)",
      "Bash(scp:*)",
      "Bash(rsync:*)",
      "Bash(docker run:*)",
      "Bash(systemctl:*)",
      "Bash(service:*)",
      "Bash(killall:*)",
      "Bash(pkill:*)"
    ]
  }
}

その後も調整を続けた

UI上の不具合を修正した後も、機能追加と調整を続けた。追加した主な機能は以下の通りだ。

  • CoreDataを使った記録の永続化
  • 設定画面での設定をスクワット画面へ反映
  • スクワットごとのデバイス振動(触覚フィードバック)
  • ユーザーにスクワットすることを促すリマインダー機能
  • データのエクスポート機能
  • 多言語対応

これらの機能実装と不具合修正を経て、最終的に出来上がったアプリがこちら。

20250710154425

20250710154436

スクワット回数のカウント、実行中の経過時間表示、これまでの実績確認など、スクワットアプリとして必要な機能は一通り実装できた。UIもシンプルで分かりやすく、実用的なアプリに仕上がったと思う。Claude Codeの力を借りながらも、自分が日常的に使いたくなるレベルのアプリを作ることができた。

アプリを開発してみての感想

良い点

ポン出しでもかなりクオリティの高いものができる。Claude Codeの能力は想像以上に高く、初回の生成だけでも実用的なアプリの基盤を作ることができた。特に0から1を生み出す生産力は、人間を遥かに上回っていると感じる。

課題点

Claude Codeほどの性能でも、.xcprojInfo.plistといったファイルの編集は難しいようだ。これらのファイルは複雑な構造で、AIが直接編集するには不向きなのかもしれない。

また、テキストが適切に改行できておらず省略されてしまっていたりと、人間が実装していれば気付くであろう細かな問題が平然と無視されてしまっていた。

ローカライズについて

翻訳作業自体はAIに任せても問題ないが、.xcstringsファイルを直接編集させるのは、APIの使用量が膨大になってしまうため避けた方が良いだろう。

.xcstringsはJSONベースのファイルだが、そのフォーマットが非常に複雑である。特にProプランの場合、Maxプランと比較すると利用上限が厳しいため、ローカライズというアプリ開発の本質的でない部分でAPIを大量消費するのは勿体ない。

私はGitHub Copilot Proも契約している。翻訳作業についてはCopilotのGPT-4oに任せても良いかもしれない。翻訳作業自体はAIに任せ、csvから.xcstringsファイルへの変換はスクリプトで自動化するなど、効率的に作業を分担させたいと思う。

個人開発では、Google Sheetsで文字列リソースを管理し、csvファイルを.stringsへパースするスクリプトを使っている(参考記事)。同じ要領で.xcstrings用のパーススクリプトを別途作成し、Google Sheetsで管理する方法が現実的かもしれない。

結論:「AI縛り」開発を試してみて

Claude Codeはかなり便利なツールであることが分かった。特に初期開発では大幅な時間短縮が期待できる。タイトルでは「AI縛り」と謳ったものの、実際の開発では以下の部分で手動での介入が必要だった。

手動対応が必要だった部分:

  • プロジェクト初期設定(Xcodeプロジェクトの作成)
  • 設定ファイル編集(Info.plist.xcprojファイルの調整)
  • ローカライズファイル(.xcstringsの直接編集)
  • 不具合修正(AIが生成したコードの論理的なバグ修正)

開発中に気づいた注意点:

  • 変更後は毎回ビルドとテストを徹底する必要がある。AIが生成したコードでも、区切りごとに必ず動作確認をおこなうこと
  • 手動で修正したコードをAIが元に戻すことがある。AIとの協調作業では、変更した意図を明確に伝えること
  • Xcodeの関連ファイルを直接編集してもらうのは難しい。プロジェクトファイルや設定ファイルは手動で作業する必要がある
  • 今回は小規模な新規アプリの開発だったが、大規模なコードベースを持つアプリの場合、Proプランでは対応しきれないかもしれない
  • Proプランでは、2〜4時間でリミットが来る
  • Claude Codeを使ったコーディングは、AIに依頼して、AIが出力したコードをレビューする、を繰り返す。長時間繰り返すと疲労するので注意すること

完全なAI縛りは現時点では難しいものの、コア機能の実装においてはClaude Codeの生産性は想像以上に高かった。

現実的なアプローチとしては、「AI縛り」というより「AI主導+人間サポート」が適切だろう。それでも、Claude Codeを使いこなせば、開発効率を大幅に向上させることができると思う。今後、Claude CodeがXcodeプロジェクトの構造理解を深めれば、より完全なAI縛り開発が可能になるかもしれない。

一方で、プログラミングの楽しさに魅力を感じてプログラマーをやっている身として、その楽しい部分がAIに取って代わられることに複雑な気持ちを抱いている。

参考資料

開発時に入力したプロンプト全文を公開している。
https://gist.github.com/CH3COOH/0eda6faa858d0ff64173d768f66f5812

2023年に作成したGoogle スプレッドシートから出力した csvファイルを .strings ファイルにパースする自作スクリプトの紹介記事。
https://blog.ch3cooh.jp/entry/ios/google_docs_to_strings_resources_2023

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.