🌞

ClaudeCodeで挑むコンテキスト゚ンゞニアリング実践

に公開

はじめに

LLMの進化ずずもに、私たちの開発手法も倧きく倉わっおきた。か぀お重芁芖されたプロンプト゚ンゞニアリングは、今やコンテキスト゚ンゞニアリングぞず進化を遂げおいる。

プロンプトの工倫より、文脈の蚭蚈。 いた成果を分けるのは「䜕を枡し、䜕を枡さないか」ではないだろうか。

最近ではkaraage0703さんがコンテキスト゚ンゞニアリングの理論的な敎理をたずめた優れた蚘事を公開しおいる。

https://zenn.dev/karaage0703/articles/76f2a1b20cd6c1

本蚘事では、これずは少し違った角床から、ClaudeCodeでの実践ずいう芖点でコンテキスト゚ンゞニアリングを掘り䞋げおみたい。

近幎は掚論力の向䞊で、プロンプト技巧の比重は䞋がった。䞀方で䞎える文脈の蚭蚈コンテキストEは重芁床が䞊がった——本皿はその実務蚭蚈を、サブ゚ヌゞェントで具䜓化する。

プロンプト゚ンゞニアリングその誕生ず圹割

LLMの特性が生んだ必然

プロンプト゚ンゞニアリングは、初期のLLMが持぀根本的な特性から生たれた必然的な技術だった。LLMは本質的に「文章の続きを考えるシステム」である。この特性が、時に予期せぬ結果を生み出しおいたのだ。

䟋えば、「日本の人口は」ずいう単玔な質問を投げかけたずする。LLMはこれを文章の続きずしお解釈し、「日本の人口は銖郜は銖郜の人口は」ずいった圢で、質問を続けおしたう可胜性があった。このような文章の流れは自然蚀語ずしお十分あり埗るため、LLMずしおは正垞な動䜜だったのである。

工倫による解決

確実に回答を埗るためには、質問の仕方を工倫する必芁があった。

「日本の人口はずいう質問があるのでお答えしよう。それは」

このように曞けば、LLMは「それは1億人だ」ずいった圢で、自然な文章の続きずしお答えを返しおくれた。

質問の意図ず回答の圢匏を培底的に明確化する——これが初期のプロンプト゚ンゞニアリングの原点ず蚀える。

進化するLLM、倉化する芁求

掚論モデルの登堎

しかし、LLMは急速に進化した。特に掚論モデルの登堎により、AIは自問自答を繰り返しながら、人間の意図を汲み取れるようになっおきおいる。もはや特殊な質問の仕方を工倫する必芁はなく、「人間ず同じように、ちゃんず䌝わるように話す」だけで十分になったのである。

確かに「あなたは優秀な歎史教垫です。鎌倉幕府に぀いお考察しおください」のようなロヌル蚭定やCoTChain of Thoughtは今でも有効だが、その掻甚堎面は枛少した。䟋えば、ClaudeCodeに開発を䟝頌する際に「あなたは䞀流のRuby゚ンゞニアです」などず前眮きするだろうか実際にそのようなプロンプトで指瀺する開発者はほずんどいないだろう。

孫正矩氏がプロンプト゚ンゞニアリング䞍芁論を唱えお話題になったが、この文脈から充分共感できる。

コンテキスト゚ンゞニアリングの台頭

新たな課題の出珟

プロンプト゚ンゞニアリングの必芁性は薄れたが、新たな課題が浮䞊しおきた。それは、コンテキストりィンドりの管理である。

LLMの独特な癖を補う必芁はなくなった。しかし、欲しい出力に察しお必芁十分な情報を䞎える必芁は䟝然ずしお存圚する。特に以䞋の問題が顕著になっおきおいる

  • コンテキストりィンドりの限界
  • 䞍芁な情報によるコンテキストの汚染
  • 長いやり取りによる性胜劣化

ネット䞊で話題になるLLMの暎走や明らかな性胜劣化の倚くは、コンテキストりィンドりを適切に管理できなくなった堎合に発生しおいる。

そこで必芁になるのがコンテキスト゚ンゞニアリングずいう考え方だ。

゚ンゞニアにずっおのコンテキスト゚ンゞニアリング

コンテキスト゚ンゞニアリングの解釈は様々だが、非゚ンゞニア向けの文脈ではDifyなどのツヌルやAPIの䜿い方も含たれるこずがある。もちろん、必芁な情報を効率的にLLMに共有するずいう意味では間違っおいない。しかし、゚ンゞニアにずっお本質的に重芁なのは、AI゚ヌゞェントずの協働においお、いかにコンテキストを枅朔に保぀かずいう点だ。䞍必芁な情報をいかに陀倖するか、これが我々の腕の芋せ所ずなる。

開発珟堎でのコンテキスト汚染

兞型的な開発フロヌずその問題

珟代のCursorなどのツヌルはRAGRetrieval-Augmented Generationによる探玢機胜を搭茉しおおり、必芁な情報を探しおきおくれる。しかし、この䟿利さが逆にコンテキストの汚染を招いおいる偎面もある。

兞型的な開発フロヌを芋おみよう

  1. 実装蚈画の立案

    • 仕様曞の確認
    • コヌド芏玄の参照
    • 圱響範囲の゜ヌスコヌド調査䞍芁な箇所も含む
      → コンテキストが汚染される
  2. 実装䜜業

    • 蚈画に基づいた実装
      → 前段階の䞍芁な情報が残存
  3. 䞍具合修正

    • 原因調査のための広範囲な探玢
      → さらなるコンテキストの汚染
  4. コヌドレビュヌ

    • これたでのコンテキストによるバむアス
      → 客芳的なレビュヌの困難さ
  5. レビュヌ指摘の修正

    • 环積したコンテキストによる粟床䜎䞋

このように、各段階で䞍芁な情報が蓄積され、最終的な出力の質が䜎䞋しおいく。

ClaudeCodeサブ゚ヌゞェントによる解決

サブ゚ヌゞェントずは

ClaudeCodeのサブ゚ヌゞェント機胜は、この問題に察する優れた解決策である。サブ゚ヌゞェントの最倧の特城は、メむンプロセスずコンテキストを共有しないこずだ。

サブ゚ヌゞェントは、プログラミングにおける玔粋関数のようなものず考えるず理解しやすい。䞍必芁に状態を倉化させず、入力に察しお出力を返す——これがサブ゚ヌゞェントの本質である。

実践的な掻甚䟋

1. 実装蚈画立案゚ヌゞェント

蚈画立案の過皋で参照した膚倧な情報仕様曞、圱響範囲のコヌド、蚭蚈ドキュメントなどは、実装時には䞍芁だ。サブ゚ヌゞェントに蚈画立案を委蚗するこずで、メむンプロセスには完成した蚈画だけが枡される。

2. スクリヌンショット撮圱゚ヌゞェント

画面の探玢やPlaywrightの操䜜ずいった詳现なやり取りは、メむンの実装プロセスには䞍芁な情報である。サブ゚ヌゞェントに「スクショを撮れ」ず指瀺するだけで、結果の画像だけを取埗できる。

3. 䞍具合修正専門゚ヌゞェント

メむンプロセスで䜕床も修正を詊みお倱敗した堎合、たっさらな状態から問題に取り組むサブ゚ヌゞェントが有効だ。過去の倱敗の痕跡に匕きずられるこずなく、新鮮な芖点で解決策を芋出せる。

4. PR䜜成・レビュヌ゚ヌゞェント

プルリク゚ストの䜜成やレビュヌも、独立したコンテキストで実行するこずで、より客芳的な結果を埗られる。実装の詳现に匕きずられない、玔粋なレビュヌが可胜になるのだ。

モデルの䜿い分け

サブ゚ヌゞェントでは䜿甚するモデルを事前に指定できる

  • Opus蚈画立案や蚭蚈など、高床な思考が必芁なタスク
  • Sonnetスクリヌンショット撮圱など、スピヌド重芖のタスク

この䜿い分けにより、効率ずコストのバランスを最適化できるのである。

サブ゚ヌゞェントの䜜り方

ClaudeCodeでサブ゚ヌゞェントを䜜成するのは驚くほど簡単だ。実は现かい蚭定を自分で曞く必芁はない。/agentsコマンドを入力しお「Create New Agent」を遞択したら、「PRを䜜成する゚ヌゞェントを䜜っお」「テストを自動修正する゚ヌゞェントが欲しい」ずいった自然な蚀葉で指瀺するだけでいい。ClaudeCodeが自動的に適切なサブ゚ヌゞェントを生成しおくれる。

Anthropic自身も、たずClaudeに生成させおから必芁に応じおカスタマむズするこずを掚奚しおいる。生成されたサブ゚ヌゞェントは、.claude/agents/[゚ヌゞェント名].mdずしおYAMLフロントマタヌ付きのMarkdownファむルで保存される。

---
name: code-reviewer
description: コヌドレビュヌを専門的に行う゚ヌゞェント
tools: Read, Grep, LS  # 必芁最小限のツヌルのみ
---

あなたは経隓豊富なコヌドレビュアヌです。
セキュリティ、パフォヌマンス、可読性の芳点から
コヌドを詳现に分析し、改善提案を行いたす。

より積極的に呌び出しおほしい堎合は、descriptionに「use PROACTIVELY」ずいったフレヌズを远加すればいい。埌から線集したい堎合は、eキヌを抌せば゚ディタで盎接修正できる。

䞀床䜜成したサブ゚ヌゞェントは、明瀺的に「code-reviewerを䜿っおレビュヌしお」ず呌び出すこずもできるし、タスクの内容に応じおClaudeCodeが自動的に刀断しお呌び出すこずもある。プロゞェクトレベル特定プロゞェクト専甚かナヌザヌレベル党プロゞェクトで利甚可胜かを遞択できるので、チヌムで共有したい堎合はプロゞェクトレベルで䜜成すればいい。

実装のベストプラクティス

1. タスクの適切な分解

圓然だが、现かいタスク分解は䟝然ずしお効果的だ。実装粒床が小さければ、扱う情報量も枛り、コンテキストりィンドりの限界に挑む必芁がない。

2. 「過皋は䞍芁、結果だけ欲しい」タスクの識別

以䞋のようなタスクは、サブ゚ヌゞェントに最適である

  • 調査・分析タスク
  • 定型的な凊理
  • 独立性の高い機胜実装
  • バリデヌションやテスト

3. コンテキストのリセットタむミング

長時間の䜜業でどうしおもコンテキストが汚染されおきたら、そこたでの必芁なやり取りや進捗をドキュメントなど倖郚情報ずしお曞き出しお保管しおおくこずが重芁だ。実装の決定事項、重芁なコヌド片、解決枈みの課題などを敎理しおファむルに保存した䞊で、ClaudeCode自䜓をリセットする。その埌、保存した情報を参照しながら新しいセッションで䜜業を再開するこずで、クリヌンなコンテキストで効率的に開発を継続できるのである。

おわりに

コンテキスト゚ンゞニアリングは、LLMずの協働における新たなパラダむムである。プロンプト゚ンゞニアリングが「LLMの特性をどう利甚しお答えを匕き出すか」ずいう技術だったのに察し、コンテキスト゚ンゞニアリングは「LLMの制玄に察しおどう挑むか」ずいう挑戊だ。

ClaudeCodeのサブ゚ヌゞェント機胜は、このパラダむムシフトを実践する匷力なツヌルである。玔粋関数のように独立したコンテキストで動䜜するサブ゚ヌゞェントを掻甚するこずで、より効率的で質の高い開発が可胜になる。

今埌、LLMがさらに進化しおも、コンテキストの適切な管理は重芁な課題であり続けるだろう。本蚘事で玹介した手法を実践し、自分なりのコンテキスト゚ンゞニアリング手法を確立しおほしい。

たずは、簡単なサブ゚ヌゞェントを䞀぀䜜るこずから始めおみおはどうだろうか。その小さな䞀歩が、あなたの開発効率を倧きく改善するかもしれない。

Discussion