「続けて」しか打たない開発|コストをかけずローカルLLMでサクッと作る、CLAUDE.md と doc/ の運用(RTX 5070 Ti 12GB)

「続けて」しか打たない開発|コストをかけずローカルLLMでサクッと作る、CLAUDE.md と doc/ の運用(RTX 5070 Ti 12GB)

コストをかけずに、ローカルLLMでサクッと何かを作りたい。使うのは RTX 5070 Ti Laptop(VRAM 12GB)を積んだノートのような、わりと普及している PC。人間は楽をして、「続けて」と打つだけで開発が進む。この記事は、それを成立させた構成の記録です。

やりたいことは1つです。ollama launch claude を設計者と製作者の2つ起動し、設計者に要件を伝えたら、あとは私が仲介役をやるだけでアプリができること。条件は、設計依頼・実装結果・テスト結果・レビューが全部ログとして残ること。何往復かして要件が満たされたら私が動かして OK か NG を判断し、NG の内容や追加の対応を設計者に依頼して、そのまま開発が続くこと。この4つが崩れなければ、モデルも手法も何でも構いません。

前の記事で、Ollama のローカルLLMに Claude Code をつなぎ、VSCode のターミナル2枚で設計と実装を分けるところまで書きました。今回はそれを 12GB のノートに載せ替え、人間の仕事を「続けて」の一言まで減らしています。

要点は、モデルを賢くするのではなく、CLAUDE.md と起動時の権限で「やっていいこと」を狭めることです。 小さいモデルでも、やることが狭ければ回ります。

この記事でできるようになること

  • 設計者と製作者の2つの Claude Code を、doc/ フォルダの Markdown だけでやり取りさせる
  • 設計依頼・実装結果・テスト結果・レビューの4つを、doc/ の1ファイルに時系列で残す
  • 人間の指示を「続けて」の一言に固定し、各自が doc/ の状態から次の仕事を判断するようにする
  • 設計者が doc/ 以外に書き込めないよう、起動オプションで権限を切る
  • 人間の受け入れテストで出た NG と追加要件を、同じ doc/ の流れに戻す
  • VRAM 12GB のノートPCで、この構成を動かすモデルを選ぶ

CLAUDE.md は全文を載せます。自分のプロジェクトに合わせて末尾の技術仕様だけ書き換えれば、そのまま使えます。

前提条件・環境

  • ハード:RTX 5070 Ti Laptop GPU(VRAM 12GB)搭載の Windows ノート
  • 推論:Ollama(ローカル)。Claude Code は ollama launch claude で接続する
  • エディタ:VSCode の統合ターミナルを左右2枚に分割(Ctrl + Shift + 5
  • コンテキスト長は 64k 以上に設定済み(既定の 32k のままだと途中で前の内容を忘れます)

Ollama へのつなぎ方、コンテキスト長の上げ方、モデルの保管先の変更は前の記事に書いたので、ここでは繰り返しません。

12GBのノートで選べるモデル

前の記事に載せた4本は、すべて 12GB に収まりません。

前の記事のモデルサイズ12GB での結果
north-mini-code-1.0:q4_K_M19GBCPU/GPU分割
qwen3.8:27b18GBCPU/GPU分割
qwen3-coder:30b19GBCPU/GPU分割
devstral:24b14GBCPU/GPU分割

前の記事で自分に課した基準「ollama ps100% GPU でなければ落とす」を 12GB に当てると、この4本は全部脱落します。

代わりに候補になるのは次の3つです。

  • qwen3.6:35b(MoE・Ollama 版で 23GB・256K コンテキスト)… 品質はこの中で最上位。ただし 12GB には載らず、重みの半分以上が CPU 側に乗る
  • gemma4:12b(Q4 で約 8GB)… 64k のコンテキストを載せても 12GB に収まる。ツール呼び出しの出力が安定している
  • qwen3.5:9b(約 6GB)… 軽量の保険

私は qwen3.6:35b を選び、設計側と実装側の両方に同じモデルを使っています。

「載らないモデルを選ぶのか」と思われるはずです。dense(全パラメータが毎トークン動く)モデルが CPU にあふれると速度は桁で落ちますが、qwen3.6:35b は MoE で、1トークンあたり実際に動くのは 3B 前後です。あふれても速度の低下は数倍にとどまり、実用の範囲に入ります。

判断の分かれ目はシステムRAMです。RAM が 32GB 未満なら qwen3.6:35b は候補から外し、gemma4:12b にしてください。 2本目のモデルを入れても 12GB では入れ替えが起きるだけなので、設計側と実装側は同じモデルにして、役割は権限で分けます。同じモデルなら VRAM に載っている1本を両ペインで共有するので、ペインを行き来しても入れ替えが起きません。

Ollama の環境変数を3つ設定する

Windows の PowerShell で、ユーザー環境変数を3つ入れます。

[System.Environment]::SetEnvironmentVariable("OLLAMA_CONTEXT_LENGTH", "65536", "User")
[System.Environment]::SetEnvironmentVariable("OLLAMA_KV_CACHE_TYPE", "q4_0", "User")
[System.Environment]::SetEnvironmentVariable("OLLAMA_NUM_PARALLEL", "1", "User")

1行目はコンテキスト長 64k。2行目は KV キャッシュ(会話の途中経過を保持する領域)を 4bit に圧縮する設定で、長いコンテキストを載せたときの VRAM 消費を抑えます。3行目は同時に処理する要求を1本に絞る設定で、12GB では並列に動かす余裕がないため入れています。

PowerShell を再起動してから、モデルを取ります。

ollama pull qwen3.6:35b

設計者と製作者、2枚のターミナルの起動コマンド

前の記事では設計側を --permission-mode plan で起動していました。読めるが書けないモードです。

今回の構成では設計者が doc/ に指示書を書くので、plan モードでは足りません。代わりに --allowedTools で、確認なしに通す操作を列挙します。

左のペイン(設計者)です。

ollama launch claude --model qwen3.6:35b -- --permission-mode default --allowedTools "Read" "Glob" "Grep" "Write(doc/**)" "Edit(doc/**)"

右のペイン(製作者)です。

ollama launch claude --model qwen3.6:35b

設計者側の Edit(doc/**) は、doc/ 配下への書き込みだけを確認なしで通す指定です。それ以外の場所へ書こうとすると許可を求める画面が出ます。人間が「続けて」しか打たない運用では、許可の画面が出た時点で「設計者がソースを触ろうとした」と気づけます。 指示文で毎回「コードは書かないでください」と書く必要がなくなります。

なお Claude Code の公式ドキュメントによると、ファイルへの書き込みの判定に使われるのは Edit(パス) の規則だけで、Write(パス) は受け付けられても判定には使われません。Edit(doc/**) が Write を含む全部の編集ツールに効くので、上のコマンドの "Write(doc/**)" は無くても同じです。

-- の前が Ollama への引数、後ろが Claude Code への引数です。

CLAUDE.md の全文

Claude Code は起動時にプロジェクト直下の CLAUDE.md を読みます。役割・ファイルの形・報告の型は、全部ここで縛ります。

プロジェクトのフォルダで PowerShell を開き、次を1回で貼ります。

@'
# 開発ルール
このプロジェクトは、設計者と製作者の2つのターミナルで開発する。両者は doc/ フォルダの Markdown を通じてやり取りする。人間の指示は原則「続けて」の一言だけである。各自が doc/ の状態を見て、次にやるべきことを判断して実行する。
## doc/ のファイル
- ファイル名は `YYYY-MM-DD_NN_見出し.md`。NN は2桁の通し番号。doc/ 内の同日ファイルを確認し、最大の NN に 1 を足す。同日のファイルがなければ 01。
- 1ファイルに1指示。見出しは次の4段で構成する。
  - `## 指示`(設計者が書く)
  - `## テスト`(設計者が書く。合否の基準を具体的に箇条書きで)
  - `## 実装結果`(製作者が追記する)
  - `## レビュー`(設計者が追記する。冒頭に `結果: OK` または `結果: NG` を必ず書く)
## 設計者の役割
「続けて」と言われたら、doc/ の最新ファイルを読み、状態に応じて次のいずれか1つを行う。
- `## 実装結果` がない → 何もせず「製作者待ち」と1行で報告する。
- `## 実装結果` はあるが `## レビュー` がない → test/screenshot.png を読み、`## テスト` の各項目を判定し、`## レビュー` を追記する。人間から目視の報告があれば含める。NG なら、続けて次の番号のファイルを新規作成し、修正のための `## 指示` と `## テスト` を書く。
- `## レビュー` が `結果: OK` → 次の段階の `## 指示` と `## テスト` を次の番号のファイルに書く。
- ソースコードは書かない。指示は「どのファイルの、どこを、どう変えるか」が分かる粒度で書く。
- 全体のゴールと段階分けは doc/ の最初のファイル、または人間の最初の依頼に従う。
## 製作者の役割
「続けて」と言われたら、doc/ の最新ファイルを読み、状態に応じて次のいずれか1つを行う。
- `## 実装結果` がない → `## 指示` を実装し、`npm test` を実行し、NG なら直して OK になるまで繰り返し、`## 実装結果` を追記する。
- `## 実装結果` がすでにある → 何もせず「設計者待ち」と1行で報告する。
- 指示にない機能追加、ファイル作成、README の加筆は行わない。
- `## 実装結果` には、変更したファイル、変更の要点、`npm test` の結果、指示どおりにできなかった点を、合わせて6行以内で書く。
## 報告の型
設計者も製作者も、作業が終わったら画面への報告は次の3行だけにする。詳細は doc に書く。
- 状態: (何をしたか、または何待ちか)
- ファイル: (読み書きした doc のファイル名)
- 次: (人間が次にどちらのペインで「続けて」と打つべきか)
## テスト
- `npm test` は index.html をヘッドレスブラウザで開き、JSエラーの有無を確認し、test/screenshot.png を保存する。
- test/ 配下のテストは、設計者が `## テスト` で必要と判断したときに、製作者に追加を指示する。
'@ | Set-Content -Path CLAUDE.md -Encoding utf8

実際のファイルにはこの下に「## 技術仕様」として、使うライブラリとバージョン、外部アセットを使わないといった禁止事項を数行書いています。プロジェクトごとに変わる部分なので、ここでは省きました。

CLAUDE.md は起動時にしか読まれません。 書き換えたら、両方のペインで /exit してから起動し直します。

製作者の役割にある「指示にない機能追加、ファイル作成、README の加筆は行わない」の1行は、前の記事で実装側が実際にやったことを、そのまま禁止項目にしたものです。

doc/ に残る4つのログ

設計者と製作者は互いの画面を見ません。やり取りはすべて doc/ の Markdown 1ファイルの中で起きます。 1ファイルが1指示で、4つの見出しがそのまま4つのログになります。

  • ## 指示(設計者)… 設計依頼の内容。どのファイルの、どこを、どう変えるか
  • ## テスト(設計者)… 合否の基準。箇条書き
  • ## 実装結果(製作者)… 変更したファイル、要点、npm test の結果、できなかった点。6行以内
  • ## レビュー(設計者)… 結果: OK結果: NG と、各テスト項目の判定

設計者が ## 指示## テスト を書き、製作者が ## 実装結果 を追記し、設計者が ## レビュー を追記して閉じます。NG なら設計者が次の番号のファイルを作って、修正の指示から同じ流れをやり直します。

ファイル名は日付と2桁の通し番号なので、doc/ を上から読めば、何を頼み、何ができ、何が通らず、どう直したかが時系列で追えます。チャットの画面を保存しなくても、開発の経緯が全部ファイルに残ります。

「続けて」だけで回る理由

人間の指示は「続けて」だけなので、誰が次に何をするかは doc/ の状態で決まります。

doc の状態「続けて」で設計者がすること「続けて」で製作者がすること
指示あり・実装結果なし「製作者待ち」と1行報告実装 → npm test → 実装結果を追記
実装結果あり・レビューなし画像を読んでレビューを追記。NG なら次の doc に修正指示を書く「設計者待ち」と1行報告
レビュー OK次の段階の doc を書く「設計者待ち」と1行報告

間違ったペインに「続けて」と打っても、「製作者待ち」「設計者待ち」の1行が返るだけで何も壊れません。順番を人間が覚えておく必要がないのが、この表のいちばんの効果です。

設計者のレビューは、製作者が npm test で保存したスクリーンショットを読んで行います。画面を見ないと判定できない項目(レイアウトの崩れ、色)は、人間が目視した結果を「続けて」に添えて渡します。

報告を3行に固定するのは CLAUDE.md で

ローカルモデルは、作業のあとに長い説明を返しがちです。画面を追う人間の負担がここで増えます。

Claude Code には出力スタイル(Output style)という設定があり、/config から Concise を選べば短くなります。ただし出力スタイルは「画面にどう見せるか」の設定で、doc の書き方や判断の手順は変わりません。

手順そのものを縛るのは CLAUDE.md の仕事です。だから報告の型も CLAUDE.md に入れました。

- 状態: (何をしたか、または何待ちか)
- ファイル: (読み書きした doc のファイル名)
- 次: (人間が次にどちらのペインで「続けて」と打つべきか)

3行目の「次:」が、人間への次の一手の指示です。人間はこれを読んで、言われたペインに「続けて」と打つだけになります。 詳細は doc に残っているので、画面の報告を読み飛ばしても後から追えます。

人間がやること:要件を伝える、受け入れテストをする

人間の仕事は、最初と節目の2か所にあります。

最初に、設計者に要件を伝えます。 何を作るか、どこまでを最初の段階にするかを、設計者に普通の文章で話します。設計者はそれを doc/ の最初のファイルに ## 指示## テスト として書きます。CLAUDE.md に「全体のゴールと段階分けは doc/ の最初のファイル、または人間の最初の依頼に従う」と書いてあるので、以後の段階分けは設計者が自分で判断します。

節目で、自分の手で動かして OK か NG かを判断します。 設計者のレビューはスクリーンショットと npm test の範囲なので、実際に触った感触は人間しか判定できません。何往復かして要件が満たされたら、アプリを起動して確認します。

NG だったとき、追加でやりたいことが出たときは、その内容を設計者のペインに書いて「続けて」と打ちます。設計者はそれを次の番号のファイルに ## 指示## テスト として書き、製作者に渡ります。人間の NG も追加要件も、同じ doc/ の流れに戻るので、ログから漏れません。 人間が製作者に直接指示することはありません。製作者への指示は必ず設計者の doc を通ります。

12GB で期待してよいこと、してはいけないこと

前の記事の「YOLO のセットアップ程度は難なくこなす」は、32GB で 19GB クラスのモデルを回した結果です。12GB では実装側のモデルが1段小さくなります。頼んでいないファイルを作る、README を盛る、といった脱線は起きやすくなる前提で見てください。

だからこそ、モデルの賢さに頼らず、CLAUDE.md の禁止項目と起動時の権限で縛ります。この構成は「小さいモデルでも回るように運用を設計する」という話です。

それでも複雑な多ファイル改修は破綻しやすいです。用途は、単機能の生成・小規模改修・オフラインでの検証に絞るのが現実的です。設計はローカル、実装は本物の Claude、という混在構成も選択肢に入れておいてください。 設計側は doc/ を書くだけなので、ローカルモデルで十分に務まります。

次に足す予定のもの(未検証)

ここから下は、まだ自分の環境で試していません。Claude Code の公式ドキュメントを読んで、次に足すと決めているものです。試していない手順なので、コマンドは載せません。

CLAUDE.md は「文脈」で、強制ではありません。 公式ドキュメントに、確実に止めたい操作は CLAUDE.md ではなく PreToolUse hook か permissions.deny を使え、と書かれています。小さいローカルモデルほど、この差が出ます。いまの CLAUDE.md で機械に任せられる行は、製作者の「npm test を実行し、NG なら直して OK になるまで繰り返す」です。ここは hook に移す候補です。

設計者の権限を「確認」から「拒否」に上げる。 --permission-mode dontAsk にすると、許可リストにない操作は確認画面を出さず自動で拒否されます。「続けて」しか打たない運用では、確認画面で止まるより、拒否されて「設計者待ち」で戻ってくるほうが手が止まりません。

doc が1つ閉じるごとに、両ペインで /clear する。 64k のコンテキストは、「続けて」を繰り返すうちに過去の doc とツールの結果で埋まります。状態は全部 doc/ にあり、プロジェクト直下の CLAUDE.md はセッション開始時に読み直されるので、/clear しても失うものがありません。

製作者に git commit を1行足す。 ## 実装結果 を書いたら doc のファイル名でコミットする、と製作者の役割に足せば、doc 1本とコミット1個が対応し、NG のときに戻す単位が揃います。

まとめ

  • 人間の仕事は「要件を伝える」「続けてと打つ」「節目で自分の手でテストする」の3つ。 誰が次に何をするかは doc/ の状態で決まり、順番を覚える必要がありません
  • 設計依頼・テスト基準・実装結果・レビューの4つが、doc/ の1ファイルに時系列で残る。 人間の NG と追加要件も、設計者の次の doc として同じ流れに戻ります
  • 設計者は --allowedTools で doc/ 配下だけ書ける。 ソースを触ろうとすると許可画面が出るので、その場で気づけます
  • 12GB のノートでは qwen3.6:35b(RAM 32GB 以上)か gemma4:12b。 前の記事の4本は全部 CPU にあふれます

CLAUDE.md をそのまま貼って、ollama launch claude を2枚起こせば、この構成は動きます。モデルが新しくなっても、変えるのは --model の1か所だけです。

「ローカルモデルの暴走を運用で止めたい」「手元の GPU でどこまで回せるか見立てがほしい」という方は、無料の30分オンライン診断で状況をお伺いします。

この記事の技術を、現場で実装したい方へ

AI×IoTの技術顧問として、月額契約で継続伴走しています。PoC設計・技術判断・組織設計・ベンダー管理・実装支援まで、現場で動くまで一緒に進めます。受託開発(請負)ではありません。

AI技術顧問サービスの詳細無料30分オンライン診断料金一覧

About The Author

Hideki
AI coordinator株式会社 代表取締役/東京海洋大学 産学官連携研究員。AIロボティクスのスタートアップで執行役員CTO 兼 VPoEとして収穫ロボットの開発組織を統括(2026年7月まで)。画像認識関連のAI特許3件取得・1件出願中。現在はAI・ロボティクス・IoTの現場実装を、月額の技術顧問契約で「現場で動くまで」伴走しています。
会社概要 → www.ai-coordinator.co.jp