あらまし
- Claude Codeだけで155ファイル・25,000行超のiOSアプリを開発した
- 自分でコードは1行も書いていない
- 開発期間は約11日間(2026/2/15〜2/26)
- コミット数136、すべてClaude Codeが生成したコード
- SwiftUI + SwiftData + FoundationModels (Apple On-Device LLM) + AVFoundation を駆使した本格的なアプリ
アナリティクス:(リリースから7日)
500 ダウンロード
はじめに
「Vibe Coding」という言葉を聞いたことがあるだろうか。AIに自然言語で指示を出し、コードを書かせるスタイルの開発手法だ。Andrej Karpathy氏が提唱したこの概念を、今回は極限まで突き詰めてみた。
自分でコードを1行も書かず、Claude Codeだけでフル機能のiOSアプリを完成させる。
結果から言うと、できた。しかも思った以上にちゃんとしたアプリが。
作ったアプリ:かぷりとーく
LINEやカカオトークのトーク履歴を読み込んで、恋人・友達・家族などの関係性をAIで多角的に分析するiOSアプリだ。
主な機能
| 機能 | 概要 |
|---|---|
| トーク分析 | メッセージ頻度・返信速度・reciprocity(相互性)など多次元メトリクス |
| AI診断 | Apple FoundationModels (On-Device LLM) によるセンチメント分析・要約・アドバイス |
| 相性診断 | 6種類の関係性モード(恋人・友達・家族など)に応じたスコアリング |
| リハーサルチャット | 相手の会話スタイルを学習したAIと模擬会話ができる |
| 動画生成 | 分析結果をアニメーション付き動画(1080x1920)として書き出し |
| 弾幕ビデオ | ニコ生風の弾幕コメントが流れる動画を生成 |
| 通知 | AIが相手っぽいメッセージを生成して通知として送信 |
技術スタック
UI: SwiftUI
永続化: SwiftData
AI/LLM: FoundationModels (iOS 26+ On-Device LLM)
動画: AVFoundation + CoreGraphics
分析: カスタムスコアリングエンジン × 6モード
ベクトル検索: 自作VectorStore(リハーサル用)
広告: Google Mobile Ads
開発の流れ
Claude Codeとの対話スタイル
基本的に自分がやったことは以下だけ:
- 日本語で機能を説明する(「LINEのトーク履歴をパースして分析する機能を作って」)
- 実機で動かしてフィードバックする(「ここの色が見づらい」「動画書き出しでフリーズする」)
- 方向性を決める(「恋人モードと友達モードでスコア基準を変えたい」)
コードは一切触っていない。Xcodeも基本的にはビルド&実行ボタンを押すだけ。
開発タイムライン(全136コミット・11日間)
Phase 1: 基盤構築(Day 1〜3)
- トーク履歴パーサー(LINE対応)
- メトリクスエンジン(返信速度・相互性・エンゲージメント)
- SwiftDataモデル設計
- FoundationModelsとの連携(LLMService)
Phase 2: AI分析パイプライン(Day 3〜5)
- MapReduce方式のチャンク分析(大量のトークをLLMのトークン制限内に収める)
- セッション単位ストリーミング分析
- ヒューリスティック+LLMハイブリッド分類
Phase 3: 機能拡張(Day 5〜8)
- 6モード対応スコアリング(恋人/片思い/友達/家族/知人/仕事)
- リハーサルチャット(ベクトル類似度検索 + インテント分類)
- 弾幕ビデオ・VibesVideo動画生成
- カカオトーク対応
- ローカル通知システム
Phase 4: 品質向上(Day 8〜11)
- 動画書き出しのデッドロック修正(4回のイテレーション)
- App Store Preview対応
- UIテーマ刷新(ピンク×水色のかわいいデザイン)
- サーマルスロットリング対応
Claude Codeが優秀だったポイント
1. アーキテクチャ設計が的確
155ファイルに及ぶプロジェクトだが、責務分離がきちんとしている。
Models/Domain/ → ドメインモデル
Models/LLM/ → LLM応答の型定義(@Generable)
Models/Persistence/ → SwiftDataエンティティ
Services/Parser/ → プラットフォーム別パーサー
Services/Analysis/ → 各種アナライザー
Services/Scoring/ → モード別スコアラー
Services/LLM/ → LLM連携サービス
ViewModels/ → 画面ごとのViewModel
Views/ → SwiftUI View
この構造は最初から完璧だったわけではなく、機能追加のたびにClaude Codeが自然とリファクタリングしていった結果だ。
2. 難しい問題を反復的に解決できる
動画書き出し機能では、AVFoundationの映像+音声同時書き込みでデッドロックが発生した。git logを見ると:
4ae4ddf 動画書き出しハング修正:映像完了後に音声書込みする順序に変更
a26c0fd 動画書き出しハング修正:映像と音声をインターリーブ書込みに変更
87ac261 書き出しデッドロック修正:音声を映像より先に書きライターの詰まりを解消
3d7ca9c 音声トラック方式を全面変更:映像レンダリング後にAVMutableCompositionで無音合成
4回のイテレーションで、最終的に「映像を先にレンダリングしてからAVMutableCompositionで無音トラックを合成する」というアプローチに辿り着いた。「動画書き出しでフリーズする」とだけ伝えて、あとはClaude Codeが試行錯誤して解決した。
3. iOS最新APIへの対応
iOS 26で導入されたFoundationModelsフレームワークを活用し、@Generableプロトコルによる構造化出力を実装。オンデバイスLLMならではの高速レスポンスとプライバシー保護を両立している。
// Claude Codeが生成したコードの例
@Generable
struct SentimentResult {
@Guide(description: "Overall sentiment: positive, negative, or neutral")
var sentiment: String
@Guide(description: "Brief explanation of the sentiment")
var explanation: String
}
苦労したポイント・限界
なし
実機でしかわからない問題
Claude Codeはシミュレータやビルドを実行できないので、UIの見た目や動画再生の挙動は自分で確認する必要がある。「この画面のこの部分がこうなってる」というのはスクショを貼ればおけ。
SafetyFilterとの戦い
Apple FoundationModelsにはSafety Filterがあり、恋愛関連のプロンプトが拒否されることがあった。これもClaude Codeがプロンプトの言い回しを調整して回避してくれたが、何度かイテレーションが必要だった。
数字で見る開発
| 項目 | 数値 |
|---|---|
| 開発期間 | 11日間 |
| 総コミット数 | 136 |
| Swiftファイル数 | 155 |
| 総コード行数 | 25,372行 |
| 手書きコード | 0行 |
| 使用ツール | Claude Code (CLI) |
Vibe Codingのコツ
実際にやってみてわかった、うまくいくためのポイントをいくつか。
1. 小さく始めて段階的に拡張する
「全機能を最初から説明」ではなく、「まずパーサーを作って」→「次に分析エンジンを」→「UIをつけて」と段階的に指示した方が品質が高い。
2. バグ報告は具体的に
「動かない」ではなく「動画書き出しボタンを押すと画面がフリーズして、30秒後にメモリ警告が出る」のように具体的に伝える。Claude Codeは原因推測が得意なので、症状を正確に伝えるだけで大体解決してくれる。
3. アーキテクチャの方向性は人間が決める
「恋人と友達でスコア基準を変えたい」「動画にLINE風チャットシーンを入れたい」といった方向性の判断は人間がする。Claude Codeは実装のプロだが、プロダクトのビジョンは自分で持つ必要がある。
4. gitを活用する
Claude Codeはgitを理解しているので、コミットを細かく切っておくと「さっきの変更を元に戻して別のアプローチで」という指示が通る。
まとめ
11日間・136コミット・25,000行超。コードを1行も書かずにここまでのアプリが作れたのは正直驚いた。
Vibe Codingは「プログラミングができなくてもアプリが作れる」という話ではない。むしろプログラミングの知識がある人が、実装の手間をゼロにして、プロダクト設計と品質管理に集中できる開発手法だと感じた。
バグが出たときに「多分ここが原因だと思う」と推測できること、「この設計だとスケールしないから変えよう」と判断できること。そういった知識があってこそ、AIとの協業が最大限に活きる。
Claude Codeは「もう一人の優秀なエンジニア」だ。ただし、プロダクトの方向性を決めるのは、まだ人間の仕事だ。
この記事自体もClaude Codeに書かせました。


