「Cursor+ローカルLLM」を使いこなせ!APIコストゼロで生産性を最大化するPjM流・実践テクニック集

こんばんは!IT業界で働くアライグマです!

「CursorとOllamaで、夢のローカルLLM環境を構築できたぞ!」

以前の記事「ChatGPTやClaudeのAPIはもう不要?ローカルLLMのメリットと、自宅PCでAIを動かすための具体的な手順」を読んで、あなたもAPIコストやセキュリティの心配から解放された、快適なAIコーディング環境を手に入れたかもしれません。

しかし、多くのエンジニアが次に直面するのは、こんな壁ではないでしょうか。

「ローカルLLM、確かに速いけど、GPT-5ほど賢くないかも…?」 「結局、どんな時にローカルLLMを使い、どんな時にクラウドAIに切り替えるべきなんだろう?」 「もっとローカルLLMの性能を引き出す、うまい使いこなし方はないのか?」

そう、ローカルLLM環境は「構築して終わり」ではありません。それは、あなただけのAIアシスタントを「育て、使いこなす」という、新たな冒険の始まりなのです。

この記事は、ローカルLLMのセットアップを終えた、すべてのエンジニアに贈る「応用編」です。PjMとして日々AIと格闘する私が実践している、クラウドAIとローカルLLMを戦略的に使い分ける「ハイブリッドAIコーディング術」から、性能を限界まで引き出すプロンプト術、チームでの運用方法、そしてよくあるトラブルシューティングまで、一歩踏み込んだテクニックを余すところなく解説します。

ローカルLLM vs クラウドAI:PjM流・タスク別使い分け完全ガイド

まず理解すべきは、ローカルLLM(Llama 3, Mistralなど)と、最先端のクラウドAI(GPT-5, Claude 4 Opusなど)は、どちらが優れているという話ではなく、それぞれに得意・不得意があるということです。F1マシンと、悪路も走れるラリーカーのように、適した戦場が違うのです。

PjMとして私がプロジェクトで実践している、具体的なタスクごとの使い分け基準をご紹介します。

シナリオ1:新規プロジェクトのアーキテクチャ設計

→ 迷わず「クラウドAI (GPT-4o / Claude 3 Opus)」を使うべき

0から1を生み出す、発散的な思考が求められるこのフェーズでは、現時点で最も知識量が豊富で、複雑な要求を理解できるクラウドAIに軍配が上がります。「マイクロサービスアーキテクチャで、認証と決済のサービスを分離したECサイトの基本設計を提案して」といった、抽象的で高度な壁打ち相手としては、クラウドAIが最適です。ローカルLLMに同じ質問をすると、やや一般的で深みのない回答になりがちです。クラウドAIは、最新の設計トレンドや、複数の選択肢のメリット・デメリットを比較検討するような、戦略的な議論において真価を発揮します。

ただし、AIが提案するアーキテクチャが本当に優れているかを判断するには、私たち自身に確固たる設計思想の軸がなければなりません。そのための普遍的な原則を学ぶ上で、この一冊は全てのエンジニアの必読書と言えるでしょう。

Clean Architecture 達人に学ぶソフトウェアの構造と設計

シナリオ2:既存コードの定型的なリファクタリング

→ 「ローカルLLM (Llama 3 / CodeGemma)」で十分、かつ高速

「この関数のネストが深いので、早期リターンを使って書き直して」「このクラスの命名規則をキャメルケースに統一して」といった、明確なルールに基づいたリファクタリングは、ローカルLLMの得意分野です。ネットワーク遅延がないため、小さな修正を何度も繰り返す作業が、驚くほどサクサク進みます。APIコストもかからないので、心ゆくまでコードの整形に没頭できます。特に、静的解析ツールで検出された機械的な修正作業などは、ローカルLLMに任せるのに最適なタスクです。

シナリオ3:複雑なビジネスロジックの実装

→ 「クラウドAI」で骨子を作り、「ローカルLLM」で肉付けするハイブリッド戦略

例えば、「日本の消費税(軽減税率対応)と、期間限定のクーポン割引を両方考慮した上で、最終的な請求金額を計算するロジックを実装して」といった複雑なタスク。

まず、クラウドAIに「考慮すべき全パターンを網羅した、詳細な擬似コードを生成して」と依頼し、ロジックの骨子を作らせます。クラウドAIは、人間が見落としがちなエッジケース(例えば、クーポン適用後の金額が軽減税率の対象になるかなど)を洗い出す能力に長けています。

次に、その擬似コードをCursorに貼り付け、ローカルLLMに「この擬似コードを、プロジェクトのコーディング規約に沿ってPHPのクラスとして実装し、バリデーションルールも追加してください」と指示し、具体的なコードに落とし込ませる。このハイブリッドアプローチが、品質と速度を両立させる鍵です。

シナリオ4:テストコードの生成

→ 「ローカルLLM」が圧倒的に得意

テストコードの作成は、パターン化された作業が多く、ローカルLLMが最も輝く場面の一つです。「このクラスのcalculatePriceメソッドに対する、正常系と異常系のテストコードをPHPUnitで生成して」と指示するだけで、網羅的なテストケースを瞬時に書き出してくれます。APIコストを気にせず、カバレッジ100%を目指す作業が捗ります。特に、既存のコードに対するリグレッションテストを大量に生成させたい場合、ローカルLLMのコストメリットは絶大です。

クラウドAIとローカルLLMの使い分け

ローカルLLMの性能を限界まで引き出す、高度なプロンプト術

ローカルLLMは、クラウドAIに比べて「行間を読む」能力が少しだけ劣る場合があります。そのため、より明確で、質の高いコンテキストを与えるプロンプト術が、アウトプットの質を劇的に改善します。

@コマンドの重ねがけで、AIの視野を広げる

Cursorの強力な@コマンドですが、これを複数組み合わせることで、AIにより多角的なコンテキストを与えることができます。

実践例:

@DbSchema.sql @OrderController.php @Order.php

上記のデータベーススキーマと既存のコントローラ、モデルクラスを参考に、新しく「注文のキャンセル機能」をOrderControllerに追加してください。キャンセルのロジックはOrderモデル内にcancel()メソッドとして実装し、在庫数を元に戻す処理も含めてください。

このように、関連するファイルをすべてコンテキストとして与えることで、ローカルLLMでも、まるでプロジェクト全体を理解しているかのような、精度の高いコードを生成させることが可能です。

モデルの「個性」に合わせた指示を出す

Ollamaで使うモデルにも、それぞれ個性があります。その特性を理解し、指示の出し方を変えることで、より良い結果を引き出せます。

  • Llama 3: 非常に汎用的で対話能力が高い優等生。少し曖昧な指示でも意図を汲み取ってくれます。まずはこの子に相談するのが基本です。
  • CodeGemma: コード生成に特化した職人。具体的なアルゴリズムや、定型的なコードを書かせるのに向いています。「フィボナッチ数列を計算する関数を、再帰を使わずに実装して」のような、数学的な指示に強いです。
  • Mistral: レスポンスが速い俊足ランナー。ちょっとしたコードの整形や、コマンドの確認など、テンポ良く作業したい時に最適です。

これらのモデルの個性を理解し、まるでチームのメンバーに仕事を割り振るかのように使い分けるのが、PjM流のローカルLLM活用術です。

AIを使いこなす技術は、もはや一部の専門家のものではありません。すべてのエンジニアが身につけるべき、基本的なリテラシーとなりつつあります。

大規模言語モデルを使いこなすためのプロンプトエンジニアリングの教科書

この書籍のような専門書で体系的に学ぶことで、AIとの対話の質を一段階上のレベルに引き上げることができます。

高度なプロンプトエンジニアリングのイメージ

チーム開発におけるハイブリッドAI戦略

個人の生産性向上だけでなく、チーム全体でハイブリッドAI戦略を導入することで、開発プロセスはさらに加速します。

プロンプトの共有とテンプレート化

優れたプロンプトは、チームの知的資産です。特定のタスク(例:APIドキュメントの自動生成、E2Eテストのシナリオ作成など)で高い効果を発揮したプロンプトは、チーム内のドキュメント(NotionやConfluenceなど)で共有し、誰でも再利用できるようにテンプレート化しましょう。これにより、チーム全体のAI活用スキルが底上げされ、アウトプットの品質も安定します。

セキュリティポリシーの策定

ローカルLLMの導入はセキュリティを向上させますが、チームで運用する上では明確なルールが必要です。

  • クラウドAIに送信して良い情報、してはいけない情報の定義: 例えば、「顧客データや未公開APIの仕様はローカルLLMでのみ扱う」といったルールを策定し、周知徹底します。
  • モデルの管理: チームで使用するOllamaのモデルを統一し、バージョン管理を行うことで、開発者間の環境差異による問題を防ぎます。

PjMは、こうしたルール作りを主導し、チームが安全かつ効率的にAIを活用できる環境を整備する責任があります。

チームでの開発風景

実践ワークフロー:アイデアから実装までの全記録

理論だけではイメージが湧きにくいかもしれません。そこで、私が実際にこのハイブリッドAI戦略を使って、小さな機能を実装した際の思考プロセスと手順を、具体的に再現してみます。

お題:ブログ記事に「読了時間」を表示する機能を追加する

Step 1: 【クラウドAI】仕様の壁打ちと技術選定

まず、クラウドAI(GPT-4o)に相談し、仕様を固めます。

プロンプト: Laravelで構築したブログに「この記事の読了時間」を表示する機能を追加したい。実装方法のアイデアをいくつか提案して。考慮すべき点も教えて。

クラウドAIは、以下のような複数の選択肢と、それぞれのメリット・デメリットを提示してくれました。

  1. サーバーサイドで計算する方法: PHPで本文の文字数をカウントし、平均的な読書速度(例:500文字/分)で割る。シンプルだが、画像やコードブロックの扱いが課題。
  2. フロントエンドで計算する方法: JavaScriptで表示時にDOMからテキストを抽出し、計算する。サーバー負荷はないが、SEOへの影響は限定的。
  3. Eloquentのアクセサを使う方法: Postモデルにreading_timeアクセサを定義し、$post->reading_timeのようにスマートに呼び出す。Laravelらしい実装。

この提案を基に、私は「Eloquentのアクセサを使う方法」が最もクリーンで再利用性が高いと判断しました。

Step 2: 【クラウドAI】実装方針の具体化

次に、クラウドAIに実装の骨子となるコードを生成させます。

プロンプト: Eloquentのアクセサを使う方法で実装したい。Postモデルに追加するgetReadingTimeAttributeメソッドの具体的なコードを生成して。日本語の文字数カウントと、コードブロック内の文字は除外する仕様で。

この指示により、正規表現を使った具体的なコードの雛形が手に入りました。ここまでがクラウドAIの役割です。

Step 3: 【ローカルLLM】具体的な実装とテストコード生成

ここから先は、ローカルLLM(Llama 3)の出番です。Cursorでプロジェクトを開き、クラウドAIが生成したコードを貼り付け、仕上げを依頼します。

プロンプト: @Post.php このPostモデルに、以下のアクセサを追加して。プロジェクトのPSR-12コーディング規約に準拠するように整形もお願い。

(ここにクラウドAIが生成したコードを貼り付け)

ローカルLLMは、既存のPost.phpのスタイルに合わせて、完璧なフォーマットでコードを挿入してくれます。

続いて、テストコードも生成させます。

プロンプト: @Post.php 今追加したreading_timeアクセサに対するPHPUnitのテストコードを生成して。日本語の文章、コードブロック、画像のみの場合など、複数のパターンをテストして。

ローカルLLMは、APIコストを気にすることなく、網羅的なテストケースを瞬時に生成してくれます。

Step 4: 【ローカルLLM】ビューへの反映と最終調整

最後に、ビューファイルを変更します。

プロンプト: @/resources/views/posts/show.blade.php このビューファイルの、記事タイトルの下に、{{ $post->reading_time }}分で読了時間を表示するコードを追加して。アイコンも付けておしゃれにして。

ローカルLLMは、既存のCSSフレームワーク(Tailwind CSSなど)を解釈し、適切なクラスを付与した形でコードを提案してくれます。

このように、戦略的な議論や設計はクラウドAIと、具体的な実装や定型作業はローカルLLMと、役割分担することで、思考を止めることなく、スムーズにアイデアを形にすることができました。

そして、どのようなツールを使うにせよ、私たちの思考をコードへと変換する、最も重要な基盤となるのは、エンジニアとしての揺るぎない哲学です。

達人プログラマー ―熟達に向けたあなたの旅

この書籍が説く、効率的で生産的なプログラマーになるためのプラグマティックなアプローチは、AIという新しい仲間と共に歩むこれからの時代において、さらにその重要性を増すでしょう。

ワークフローのイメージ

【応用編】ローカルLLMのファインチューニング入門

さらに一歩進んで、公開されているモデルを自分のデータで追加学習させる「ファインチューニング」に挑戦することで、あなただけの特化型AIアシスタントを作成できます。

なぜファインチューニングが必要か?

汎用モデルは幅広い知識を持っていますが、あなたの会社の専門用語や、プロジェクト固有のコーディング規約までは知りません。ファインチューニングを行うことで、以下のようなメリットが生まれます。

  • 専門用語への対応: 社内用語や業界用語を理解し、ドキュメント作成やコード内のコメント生成がスムーズになります。
  • コーディング規約の遵守: チームのコーディング規約を学習させ、規約に準拠したコードを自動生成させることができます。
  • 特定のタスクへの特化: 例えば、SQLクエリの生成に特化させたり、特定フレームワークのコード生成精度を高めたりできます。

簡単なファインチューニングの手順

Ollamaと連携できるollama-finetuneのようなライブラリを使えば、比較的簡単にファインチューニングを試すことができます。

  1. データセットの準備: {"prompt": "質問", "response": "期待する回答"} という形式のJSONLファイルを用意します。例えば、過去のコードレビューの指摘事項などをデータセットにすることができます。
  2. ファインチューニングの実行: コマンドラインから、ベースモデルとデータセットを指定して学習を実行します。
  3. カスタムモデルの利用: 学習が完了すると、my-custom-modelのような名前で新しいモデルが作成され、Ollamaから呼び出せるようになります。

このプロセスには高性能なGPUが必要ですが、成功すればチームの生産性を劇的に向上させる秘密兵器となり得ます。

ファインチューニングのイメージ

よくあるトラブルシューティング

ローカルLLMの導入と運用では、いくつかの典型的な問題に遭遇することがあります。

Q1: ローカルLLMの応答が遅い、PCが重い

A1: これは、モデルのサイズに対してPCのスペック(特にVRAM)が不足している場合に発生します。対策としては、より小さなパラメータ数のモデル(例: llama3:8b  llama3:7b-instruct-q4_K_M のような量子化モデル)を試すか、バックグラウンドで動作している他のアプリケーションを終了させてみてください。根本的な解決には、やはりGPUの増設が最も効果的です。

Q2: 期待したようなコードが生成されない

A2: まずはプロンプトを見直しましょう。より具体的に、より多くのコンテキストを与えることで、精度は大きく向上します。また、タスクによってはモデルの向き不向きがあります。コード生成ならCodeGemma、一般的な対話ならLlama 3のように、モデルを切り替えて試すことも有効です。

Q3: Ollamaのサーバーが起動しない

A3: 他のアプリケーションがOllamaのデフォルトポート(11434)を使用している可能性があります。ターミナルでポートを使用しているプロセスを確認し、停止させるか、Ollamaの設定で別のポートを使用するように変更してください。また、Docker環境でOllamaを動かしている場合は、コンテナが正しく起動しているかを確認しましょう。

トラブルシューティングのイメージ

まとめ

ローカルLLM環境の構築は、ゴールではなく、新たな開発スタイルのスタートラインです。その真価は、クラウドAIとの戦略的な使い分けによって、初めて最大限に発揮されます。

  • 戦略立案やゼロイチの設計は、知識豊富なクラウドAIと壁打ちする。
  • 定型的な実装やテストコード生成は、高速でコストフリーなローカルLLMに任せる。
  • 複雑なロジックは、両者を組み合わせたハイブリッドアプローチで攻略する。

そして、ローカルLLMの性能を引き出す鍵は、@コマンドの重ねがけや、モデルの個性に合わせた指示といった、より高度なプロンプト術にあります。チームで活用する際は、プロンプトの共有やセキュリティポリシーの策定が不可欠です。

APIコストとセキュリティの制約から解放され、2種類の強力なAIを自在に使い分ける。これこそが、次世代のエンジニアに求められる、新しい生産性の形です。

ぜひ、あなたのCursorにも複数のAIモデルを登録し、今日から「ハイブリッドAIコーディング」を試してみてください。あなたの開発体験が、もう一段階、進化することを保証します。