1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeを使っていて、「AI開発フレームワーク」を作り始めた話

1
Posted at

はじめに

最近、会社でも「AIバンバン使っていこうぜ!」という空気になり、Claude Codeを相棒にコーディングする時間がめちゃくちゃ増えました。

最初は「おー、勝手にコード書いてくれる!すげー!」と単純に感動していたんですが、実プロジェクトで使い倒していくうちにある悩みが……。

そう、「 AI、毎回記憶リセットされすぎ問題 」です。

AIは賢い。でも毎回「初めまして」になる

新しい機能(Feature)を作ってもらうとき、だいたいこんなやり取りになります。

「要件はこれで」
「プロジェクト構成はこうなってて」
「命名規則はこうで」
「ここはService層に書いてね」
「レビューはgit diffベースで」
「あ、spec.mdとreview.mdも更新してね」
「最後にテストもよろしく!」

……これ、毎回言ってるんです。

AIは超優秀なんですが、悲しいかな、新しいタスクのたびに毎回が「初めまして」状態。「それ前も言ったじゃん!」と(心の中で)ツッコミを入れること数知れず。

だったら、僕の開発スタイルやプロジェクトのオキテを「最初からインストールしておけばいいのでは?」と思い立ちました。

CLAUDE.mdを書けば解決する?

最初は「じゃあルートディレクトリに CLAUDE.md を置いて、そこに全部書けば解決っしょ!」と思ってました。

でも、甘かった。実際に運用してみると CLAUDE.md だけでは厳しい現実に直面します。プロジェクトが育つにつれて、

  • アーキテクチャの思想
  • ドメイン知識
  • 過去の設計の試行錯誤(ADR)
  • 暗黙のルール

これらを全部一つのファイルにぶち込むとどうなるか?

「誰も(AIすら)読みたくない、超巨大なCLAUDE.md」が爆誕します。
結果、トークンを無駄に消費するだけで精度も落ちてしまいました。

CLAUDE.mdは「ルーター」にすればいい

そこで発想を転換しました。CLAUDE.md は知識を詰め込む辞書じゃなくて、 「受付の案内係(ルーター)」 でいいじゃん、と。

中身は極力シンプルに、これだけ。

Read relevant files under .ai/.

Project-specific rules override global standards.

Follow the project's workflow.

あとは必要に応じて、AIに勝手に .ai/ ディレクトリの中を漁ってもらうスタイルです。

AIに読ませる知識は分離する

最終的に、こんな感じのディレクトリ構成に落ち着きました。

.ai/

context/
    architecture.md
    domain.md
    glossary.md
    constraints.md
    project-memory.md

workflows/
    development.md
    testing.md
    review.md

templates/
    spec.md
    plan.md
    review.md

decisions/

ここでの気付きは、 「人間向けのREADMEを書くのではなく、AIにプロジェクトの教科書を渡す感覚」 が大事だということです。

一番のブレイクスルーは「plan.md」だった

いろいろ試行錯誤して、一番効果がデカかったのは仕様書(spec)でもレビュー基準でもなく、plan.md でした。

作業を始めるときに、AIに以下のようなTODOリストを作らせます。

- [ ] API追加
- [ ] Service実装
- [ ] Test追加
- [ ] Documentation更新

そして、AIには作業が終わるたびに [x] と更新してもらいます。最初はただのTODOリストのつもりだったんですが、違いました。

これ、 「AIのステート(状態)管理」 としてめちゃくちゃ優秀なんです。

もし途中でトークン制限がきたりコンテキストがぶっ飛んだりしても、新しいセッションで「plan.md を読んで続きからよろしく!」と言えば完全復活します。RPGのセーブポイントみたいで超便利です。

Git diffを真実(Source of Truth)にする

もう一つ運用ルールとして決めたのが、 「ドキュメント更新のソースは Git diff にする」 ということ。

AIって、チャットの履歴をベースにドキュメントを書かせると、たまに幻覚(ハルシネーション)を見たり、大事な修正を忘れたりします。でも、実際に変更されたコード(Git diff)は嘘をつきません。

「チャット履歴じゃなくて、diffを見て spec.mdCHANGELOG.md を更新してね」と教え込むことで、更新の精度と信頼性が爆上がりしました。

AIにもオンボーディングが必要

開発チームに新しい人が入ってきたら、まずはオンボーディングしてドメイン知識を共有しますよね。AIも全く同じだなと思うようになりました。

だから context/ には、ドメイン知識やアーキテクチャの制約を置きます。さらに project-memory.md には、開発中に起きた「やらかし」や「学び」を蓄積していく運用にしています。

例えば、

Lesson:
ORCAへは直接アクセスしないこと。
必ず PersonalDataMatchingService を経由して処理すること。

みたいな泥臭いナレッジです。こういうのが溜まっていくと、半年後の自分(とAI)がめちゃくちゃ助かるはず。

グローバルな知識とプロジェクト知識を分ける

さらに欲を出して、設定を2つのレイヤーに分けました。

プロジェクトに依存しない「自分の開発スタイル(ワークフロー、テスト手法、レビュー基準)」は ~/.claude/ のようなグローバルな場所へ。
プロジェクト固有のドメイン知識はリポジトリ内の .ai/ へ。

この分離のおかげで、バックエンドだろうがフロントエンドだろうが、どんなフレームワークでも「いつもの俺の開発フロー」をAIに一発で再現させることができるようになりました。

最初から完成させない(ここ一番大事)

いろいろ書きましたが、一番強調したいのは 「最初から完璧なフレームワークを作ろうとしない」 ということです。

最初は気合を入れて全ファイルを用意しようとしてたんですが、途中でやめました。

まずは workflow.md だけ作って実戦投入する。困ったら testing.md を足す。また壁にぶつかったら review.md を足す……というアプローチに切り替えました。

「完成させてから使う」のではなく、「AIと一緒に開発しながら、必要になったものを育てていく」。これが一番自然だし、挫折しないコツだと思います。

最終的に目指したいもの

最終的な野望は、特定のAIに依存しない 「AI Development Framework」 を作ることです。

ai-dev-framework/

global/
project/
scripts/

こんな構成をGitで管理して、新しいプロジェクトを立ち上げるときに ./init-project.sh を叩くだけで準備完了。

Claudeでも、Cursorでも、GPTでも、他のローカルLLMでも、すぐに「いつもの相棒」として同じ開発フローで動ける土台。そんなのが作れたら最高に面白いなと企んでいます。

おわりに

まだ構想を練って走り出したばかりですが、単に「AIを便利ツールとして使う」フェーズから、「AIというチームメイトが働きやすい環境(OS)を構築する」フェーズに入ってきているのを肌で感じています。

しばらくはこのスタイルで実運用を回して、面白い知見(やらかし含む)が溜まったら、またQiitaに投下しようと思います!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?