前回、Claude Codeのplanモードで仕様書を書かせました。
今回は、その仕様書をもとに、フェーズ1のバックエンド実装をそのまま進めてみた結果を書きます。
今回やったこと
前回の記事では、調査→設計→実装の順で進めることが大事だと整理しました。
すでにplanモードで仕様書は出ているので、今回はそのまま実装フェーズに進みます。
入力はかなりシンプルにして、
Phase 1から実装してください
とだけ伝えました。
仕様書まで出力させており、コンテキストに入力されているのでここまで指示が短くても問題ないです。
Claude Codeが最初にやったこと
この指示を出すと、Claude Codeはいきなりコードを書き始めるのではなく、まずTodoを整理し、既存コードを読み始めました。
出してきたTodoは以下のような内容でした。
- candle_aggregatorの実装とテスト
- symbol_infoの実装とテスト
- チャートAPIのルーター実装
- 銘柄情報APIのルーター実装
- serverへのルーター登録とCORS設定
- lintとtestの実行
その後、modelsやserver、yfinance_providerなどの既存ファイルを読み、ディレクトリ構造も確認してから実装に入っていました。
こちらは一言しか指示していませんが、内部では調査してから実装に進んでいる動きになっていました。
実際に実装された内容
実装されたのは、フェーズ1のバックエンドです。
日足データから週足と月足を作る集計ロジックが追加されました。週単位や月単位での始値 高値 安値 終値 出来高を正しくまとめる処理です。これにはユニットテストもセットで用意されていました。
次に、銘柄名を取得する処理が追加されました。yfinanceを使って銘柄名と市場情報を取得する形です。こちらもモックを使ったテストが書かれていました。
さらに、APIとしてチャート取得と銘柄情報取得のエンドポイントが追加されました。
銘柄コードを入力すると、内部で7203.Tのような形式に変換され、日足 週足 月足の切り替えもできるようになっていました。
最後にURLごとに処理の紐づけが登録されました。
前回の仕様書を見返すと、ほぼその通りに実装されている印象でした。
Claude Codeの出力
出力としては、
- Todoの整理
- 既存コードの読み込み
- ファイルの新規作成
- テストの作成
- lintやpytestの実行
という流れで進んでいました。
特に印象的だったのは、実装と同時にテストも書いている点です。仕様書に基づいて、必要な責務ごとにファイルを分けて実装している感じがありました。
実装の途中で感じたこと
見ていて思ったのは、思った以上に自走しているということです。
こちらはほぼ何も指示していませんが、
既存コードを読む
テストを書く
lintを通す
エラーに対処する
といった一連の流れを自分で回していました。
単純なコード生成というより、実装者として振る舞っている印象でした。
実装後の動作確認
実装が終わったあと、Claude Codeは結果を整理してくれました。
ruffは通過
pytestは47件通過
新規ファイルの型チェックも問題なし
見た目としては、かなりうまくいっていそうでした。
さらに、動作確認方法として以下が提示されていました。
サーバー起動
.venv/bin/uvicorn trading_api.server:app –reload
このコマンドを実行すると、APIサーバーが立ち上がります。
そのうえで、以下のような形でエンドポイントが使える環境になっていました。
チャートデータ取得
http://127.0.0.1:8000/api/v1/chart/7203
http://127.0.0.1:8000/api/v1/chart/7203?interval=weekly
http://127.0.0.1:8000/api/v1/chart/7203?interval=monthly
銘柄情報取得
http://127.0.0.1:8000/api/v1/symbol/7203/infoまた、
http://127.0.0.1:8000/docsにアクセスするとSwagger UIが表示され、ブラウザ上でAPI(結果)を試せる状態でした。
ここまで整っていたので、まずはそのまま動かしてみました。
実際に叩いた結果
サーバーを起動して、以下のAPIをブラウザから叩きました。
http://127.0.0.1:8000/api/v1/chart/7203?interval=daily結果は500エラーでした。
ログを見ると、データ変換の部分でエラーが出ていました。float変換のところにSeries型が入ってしまっているという内容でした。
つまり、
サーバーは起動している
ルーティングも問題ない
ただしデータ処理で落ちている
という状態でした。
一方で、
http://127.0.0.1:8000/docsのSwagger UIは正常に表示されており、エンドポイント自体は正しく登録されていることも確認できました。
構成としては正しいが、データ処理で問題が出ているという状況でした。
エラーをそのまま貼って修正させた
ここで私がやったことはシンプルです。
エラー内容をそのまま貼って、修正してください
と伝えました。
原因の分析はこちらではほとんどしていません。
するとClaude Codeは、yfinanceの仕様変更によってカラムがMultiIndexになっていることが原因だと判断し、データの取り扱いを修正しました。
その後、テストとlintも再度確認し、修正完了として返してきました。
最初から完璧ではないですが、エラーをそのまま渡せば修正ループを回せますし、1回の修正指示だけで修正が完了しているので、他のモデルと比べて精度がかなり良い印象です。
実際にAIコーディングして思ったこと
今回やってみて感じたのは、仕様書があると実装の指示がかなりシンプルになるということです。
実際、最初の指示は一行だけでした。それでも、仕様に沿った形でバックエンドが一通り組み上がっています。
一発で動くわけではありませんでしたが、エラーをそのまま渡して修正していけば前に進めることは確認できました。
今回の時点では、とりあえず動いていそうな状態にはなっています。
少なくとも、次のフェーズに進めるレベルにはなっていると感じました。
AIに完璧を期待するというより、
まずは形を作る
動かす
エラーを直す
このループを回していくのがいいですね。
まとめ
今回は、Claude Codeにフェーズ1のバックエンド実装を任せてみました。
やったことは、仕様書を前提にしてPhase 1から実装してくださいと伝えただけです。
最初はエラーが出ましたが、その内容をそのまま渡して修正させることで、とりあえず動いていそうな状態まで持っていけました。
仕様書の内容どおりに進んでいる感じもあったので、このまま次のフェーズに進みます。
次はフロントエンドの実装です。ここからようやく画面として見えるようになるので、その結果も記録していきます。

