ローカルLLMで個人開発をはじめて2日でぶつかった壁と、その答え

Contents

M4 Air 24GBで Aider と Qwen2.5-Coder-14B を使ってわかったこと


「ローカルLLMでオフラインでも開発できる環境がほしい」

そう思って LM Studio と Aider をインストールしたのが2日前。Qwen2.5-Coder-14B(MLX版)を動かして、自分の電車サービス(tenssho-portal)の開発を始めました。

結論から言うと、Phase 1〜3 まですべて完成しました。

ただし、その過程は決して順調ではありませんでした。

そして気づいたのは、ローカルLLMには 「向いている使い方」と「向いていない使い方」がはっきりある ということ。

この記事では、個人開発初学者の自分が2日間ハマったことと、その答えを正直に共有します。

同じように M4 Air 24GB クラスの環境でローカルLLMを始めようとしている方の、参考になれば嬉しいです。


ぶつかった壁、すべて

壁①:Aider が違うフォルダで動いていた

最初の事件は、ファイルを作っても画面に反映されないことから始まりました。

調べてみると、Aider が ~/Documents/tenssho-portal/ ではなく、ホームディレクトリの ~/src/ にファイルを作っていた のです。

原因は単純で、Aider を起動した時のターミナルのカレントディレクトリがホームディレクトリだったから。

教訓:Aider は必ずプロジェクトフォルダで起動する。

cd ~/Documents/tenssho-portal  # 必須
aider --openai-api-base http://localhost:1234/v1 \
      --openai-api-key lm-studio \
      --model openai/qwen2.5-coder-14b-instruct

壁②:古い書き方でコードを生成された

「Next.jsでビル詳細画面を作って」と指示したら、出てきたコードに import { useRouter } from 'next/router' が含まれていました。

これは Pages Router 時代の書き方 で、Next.js 13以降の App Router では next/navigation を使うのが正解です。

14B モデルの学習データに古い情報が混ざっていて、最新のベストプラクティスを正確に把握していなかったわけです。

何度修正を指示しても、別のところで似たようなミスを繰り返しました。

教訓:モデルの知識を信用しすぎない。プロジェクト固有のルールは事前に渡す。


壁③:メモリ(Swap)が指示のたびに増えていく

Aider は会話履歴を毎回モデルに全部送るため、指示を重ねるほどコンテキストが膨らみます。

24GB の M4 Air で 14B モデルを動かしている状態だと、これがどんどん Swap に書き出されてシステムが重くなっていきました。

教訓:1ファイル作ったら /exit で再起動する。それかタスクの区切りで /clear


壁④:何度指示してもループする

createClientsupabase に書き換えてほしいだけの簡単な修正で、Aider が同じコードを何度も再生成し続けるループに入りました。

これは Aider が違うフォルダで動いていて、編集対象のファイルが見えていなかったのが原因でした。

教訓:ループしたら一度立ち止まる。ツールの問題か、自分の指示の問題か、環境の問題かを切り分ける。


答え:使い分けが全て

2日間でわかったのは、今の環境(M4 Air 24GB + 14Bモデル)でローカルLLMは「全部を任せる相棒」にはまだなれない ということです。

ただし、「向いている仕事」を渡せば確実に役に立つ こともわかりました。

向いている仕事

  • 同じパターンの繰り返し作業
  • 既存ファイルを参考にして似たファイルを作る
  • 軽い修正、リファクタリング
  • ボイラープレートの生成

向いていない仕事

  • 最新フレームワークの新規実装(古い知識で書く)
  • 複雑なアーキテクチャ判断
  • 複数ファイルにまたがる大きな変更
  • 微妙なロジックの設計

そして気づいたのは、「Claude(クラウド)に直接書いてもらって、ターミナルから cat で貼り付ける」方が速い場面が想像以上に多い こと。

ローカルLLMがクラウドに完全に置き換わるのはまだ先の話で、現時点では 両者の役割分担を決めることが、開発効率の鍵 でした。


今日からできる5つの工夫

このまま 7月のMac mini M4 Pro 48GB 到着を待つだけではもったいないので、現環境でローカルLLMをもっと活かす工夫をまとめました。

① CLAUDE.md にプロジェクト前提を書き込む

これだけで今回のミスの7割は防げます。

# プロジェクト前提

## 技術スタック
- Next.js 16系(App Router を使用、Pages Routerではない)
- TypeScript
- Tailwind CSS v4
- Supabase

## 必ず守るルール
- 'use client' は必要な箇所のみ最小限に使う
- useRouter は next/navigation から import する
- supabaseクライアントは @/lib/supabase から `supabase` を import する
- params は Promise<{ id: string }> 型で受け取る

モデルサイズを上げるより、こちらの方が費用対効果は高いです。

② 1指示 = 1ファイル を徹底する

複数ファイルを同時に作らせない。終わったら /exit で再起動。

③ 既存ファイルを /add で先に読ませる

/add src/app/page.tsx
/add src/lib/supabase.ts

プロジェクトの書き方を「学習」させてから新規ファイルを書かせると、命中率が上がります。

④ /ask で設計 → /code で実装の二段階

/ask この要件を実装するためのファイル構成を提案して
(モデルが提案)

/code 提案通りに src/app/buildings/[id]/page.tsx を作って

設計と実装を分けるだけで、的外れな実装が激減します。

⑤ プロンプトに正しい例を含める

src/app/page.tsx と同じ書き方で、buildings/[id]/page.tsx を作って

「同じ書き方で」は魔法のフレーズでした。


開発サイクルの結論

2日間の試行錯誤で辿り着いた、自分なりの開発サイクルです。

オフライン(ローカルLLMで実装)
    ↓
オンライン(Claude でレビュー・複雑な部分を依頼)
    ↓
オフライン(フィードバックを反映・次の実装)
  • ローカル:集中したいとき、コストゼロで動かしたいとき、繰り返し作業
  • クラウド:複雑な設計、最新フレームワークの新規実装、エラーの深掘り

特に大事なのは、「無理にローカルだけで完結させようとしない」 こと。

これが現時点の自分にとっての最適解でした。


7月以降の展望

Mac mini M4 Pro 48GB が到着すれば、Qwen2.5-Coder-32B(MLX版)が快適に動くようになります。

32B モデルは 14B とは別次元のコード品質を持っているので、今回ハマったような「古いimport」「謎のループ」は大きく減るはずです。

それまでに CLAUDE.md を完成度の高いものに育てておく のが、今やるべき準備です。


まとめ

ローカルLLM個人開発、2日目の気づき:

1. ツールの問題か、環境の問題か、知識の問題かを切り分ける
2. 今の14Bモデルは「相棒」ではなく「アシスタント」
3. CLAUDE.md がモデルサイズより重要
4. クラウドLLMと使い分ける勇気
5. 7月の機材到着までに準備できることは山ほどある

ローカルLLMは、いきなり「全部できる相棒」を期待すると裏切られます。

でも、自分の開発サイクルに合わせて「適切な仕事を渡せる相棒」として育てれば、確実に開発が変わっていく —— それが今日の正直な感想です。

完成した tenssho-portal は、社員と入居者がビルの状態を共有し、AI が次の事象を予測してくれるWebアプリになりました。Phase 1 から Phase 3 まで、すべて動くものができています。

2日前に「ローカルLLMで何ができるんだろう」と思っていた自分に、これを見せたい。


2026年5月17日 更新 環境:MacBook Air M4 24GB / LM Studio / Aider / Qwen2.5-Coder-14B(MLX)