はじめに
先月、「3週間Claude先生と一緒に本気で鉄道路線塗りつぶしアプリを作ってみました」というタイトルの記事を投稿しました。最近では、Claude Codeが生成するソフトウェア(by Opus4.8)に相当の信頼をしています。
前回の記事で、以下の様に豪語をしてしまいました。
アイデアさえあればClaude先生の助けをもって、何でも実現することができる自信がつきました。少なくともコンピューティングリソースでできることは、自分の理解が及ぶ範囲のアイデアであれば何でも作れる気がします。
本当に何でも作れるのだろうか?
ということで、趣味であるギター向けカラオケの開発にチャレンジしてみました。
本記事ではそのアプリのプロトタイプ紹介とその開発経験より、仕様駆動開発のその先として何が重要となってくるのかという学びを書いてみたいと思います。
ギター向けカラオケ
簡単に言うと、ギター向けのカラオケマシーンになります。ジャズのアドリブ演奏後にその演奏を採点し、改善点をアドバイスしてくれるアプリになります。
- 曲を選びます(プロトタイプなのでまだ一曲)
- ノリを選びます(身につけたいノリを選びます)
- ジャズのスタイルを選びます(身につけたいジャスのスタイルを選びます)
- アプリをインストールしたiPhoneにオーディオインタフェースとギターをつなげ、開始ボタンを押し、ギターの演奏をします
- 録音が開始されます
- コードネームが曲の流れと共に表示されます
- アドバイステキストが表示されます
- 演奏結果が採点されます
- 詳細分析がタイミングとハーモニーという観点で実施されます
プロトタイプではありますが、作りたかったイメージが実現しました!
学び
仕様検討の壁打ちが全て!
”仕様検討の壁打ちが全て!” 本当にこれに尽きると思います。すなわち、Claude先生と仕様について意見交換をします。
以下は最初のアイデアの種です。このテキストをベースにClaude先生と壁打ちを開始しました。
以下の内容のブレインストーミングに付き合ってください
# Jazzの練習用のツール、"ポケットJazz School"
## iPhoneのネイティブアプリ
## iPhoneの音声入力、音声出力機能を利用する。
## 使い方イメージ
### 曲を選択する。(Jazz Standardのコード進行)
### 開始ボタンを押下する
### マイナスワンの伴奏が流れると同時に演奏楽器の音の録音を開始する。
### ユーザーによるJazzアドリブが開始され、このツールによるフーリエ解析による音符への変換と記録を行う。
### 停止ボタンを押下する。
### ユーザーにより選択された音符とコード構成音およびタイミングを分析し、音が外れているか、タイミングが前のめりか遅れ気味かの分析を行う。
### 詳細分析結果は発音タイミングの図示およびコード構成音に対してどの音が選ばれたかの分析
### 総合分析結果は、上記の詳細分析結果に基づいてテキストによる表示、そして100点満点で点数を出す
### Jazzの音楽スタイルによってランキングを出したい。例えば、ビバップ、コンテンポラリー、Jazzファンクなど
##想定ユーザー
### Jazzアドリブを練習したい人で楽器は問わず。
### プライマリーユーザーはギタリスト
##システム構成イメージ
### iPhoneネイティブアプリ + クラウド(サーバー側)
## UX
### 非常にシンプルなオペレーションとしたい。(カラオケとほぼ同様)
#### 曲選択
#### 開始
#### 停止
#### AI判定
#### ランキング表示
##懸念事項
## コードネームを入れるだけでマイナスワンを作ってくれるようなライブラリソフトウェアは存在する?
## 入力した音声をリアルタイムで分析して結果として出すようなコンピューティングパワーをiPhoneは持っているのか?
Claude先生との作業は途切れ途切れではありますが、のべ3日間は議論したと思います。そして、以下の様なプロダクト仕様が固まりました。
# プロダクト仕様(詳細)
> `concept.md` の1枚コンセプトを実装可能なレベルに詳細化したもの。MVP前提。
## 1. セッション/演奏モデル
- 曲: **Stella By Starlight**(MVPは1曲)。キーB♭、32小節フォーム。基準コード進行は **Real Book版を正典**とする(中〜上級が実際に使う標準=採点が彼らの認識と一致して納得感が高い。コード進行自体は著作権対象外で使用可。※メロディ/譜面の引き写しはしない)。Real Bookで和声が粗い箇所のみ役割マップのオーバーライドで補う。版差があるため固定する1エディションを確定(iReal ProのStellaがほぼ同一で機械可読ソースとして便利)。
- テンポ: **デフォルト♩=120/任意可変**。タイミング基準はテンポ補間関数で吸収(有効レンジ外は精度低下を明示)。
- 演奏尺: **3コーラス**。カウントイン**1小節**後に開始、3周終了で**自動停止**(手動停止も可)。
- 頭メロ(テーマ): **無し**。カウントインからいきなりアドリブ。
- 伴奏: ウォーキングベース+ドラム(4ビート/ライド)+ピアノのコンピング。SoundFontで自前生成。
- **MVP実装方針**: 事前作成の固定MIDIファイルをAVAudioSequencerで再生。テンポ変更はSequencerのテンポ制御で対応。
- **SoundFont**: GeneralUser GS(商用利用可・無償)を採用。
- **テンポ変更対応**: AVAudioSequencerのテンポをリアルタイムに変更するだけでMIDIが追従する。
- 入力: **DI直結+伴奏はヘッドホン返し**(録音への混入防止・採点の再現性確保)。
- フロー: `曲選択 → テンポ設定 → 開始 → カウントイン → 3コーラスのアドリブ → 自動停止 → 採点 → 結果`
## 2. 採点(要約 / 詳細は scoring-engine メモ)
- 総合 = **ベース100(ハーモニー50+タイミング50)+ 統合フレーズボーナス最大+10**。
- **タイミング点 = 選択中リファレンス型との一致度**(型に近づくほど高得点)。
(以下省略)
今回は、趣味領域の開発をすることで、業務領域の開発と比較して、より新しい気づきが多くありました。
IT知識よりドメイン知識(ジャズ理論)の方が重要
ところどころ、IT的なセンスが必要な部分は出てきますが、この仕様設計の壁打ちにおいて最も重要なパートはドメイン知識、すなわちジャズ理論でした。このプロダクト自体は採点機能がコアとなってくるため、どの様な基準で採点するかという具体的なロジックをClaude先生と決めなくてはいけません。例えばIMaj7コード(和音)におけるテンションノートは9th,#11th,13th、アヴォイドノートは11thなどのような知識です。こういった知識をロジックとしてソフトウェア仕様書上に具体化するには、作り手である自分もそのジャズ理論を理解しなくてはなりません。
Claude先生のドメイン知識(ジャズ理論)は自分より少し上
これは誤解を招く表現になると思いますが、Claude先生と壁打ちをしている相手が自分であるため、Claude先生のジャズ理論の知識が自分より少し上に見えるだけです。もし、一流のジャズプレイヤーがClaude先生と開発すれば、Claude先生はものすごいレベルのジャズ理論の知識を持っているのかもしれません。
Claude先生とドメイン知識談義(ジャズ談義)をすると楽しい
これは一種の”類は友を呼ぶ”の感覚ですが、同じレベルのジャズへの理解があり、知識が少し上なので、それだけ学びが多いです。世間で、ChatGPTと友達になる人の気持ちがよくわかります。この楽しさを利用してポジティブループフィードバックを回せればより良いプロダクトを作ることができるのだろうという予感を感じます。
MVP(Minimum Vaible Product)フェーズが最も重要
最後はIT関連の学びですが、基礎をしっかり作れば機能追加も安定します。これは当たり前のことなのですが、機能追加をする際、生成AIの特性上よりもっともらしいものを追加していくので、良い基礎ができていればその後も良い機能追加がされていくようです。すなわち、MVPが最も重要なフェーズであることは間違い無いです。

このハーモニータイムラインについては、仕様検討時にはここまでの機能まで考えていなかったのですが、アーキテクチャがしっかりしていたため、難なく実装ができた模様です。
おわりに
今回の記事では自分の趣味領域で自分が欲しいものを作ってみました。果たしてこのプロダクトが一般受けするかどうかは分かりませんが、自分が欲しかったもののプロトタイプは作れたと思います。一方で大きな学びとしてはドメイン知識の重要性です。自分にドメイン知識がなければ、いくらClaude先生などの優秀なAIエージェントを使っても、良いプロダクト、あるいは(自分にとっても他人にとっても)意味のあるアウトプットを作り出すことが出来ないと思います。まだまだ個人的に実現したいアイデアがいくつかありますので、引き続き何かを作っていきたいと思います。ここまで読んでいただいてありがとうございました。


