世界を動かす技術を、日本語で。

200行のコードで「Claude Code」をコーディングする方法

2026年1月9日原文(mihaileric.com)

概要

  • AIコーディングアシスタントの本質は約200行のシンプルなPythonコード
  • LLMとツールボックスの連携による会話ベースの実行フロー
  • 必要なツールは「ファイル読み込み」「ファイル一覧取得」「ファイル編集」の3つ
  • 実装の流れと各ツールの詳細な説明
  • 実践例や本格的なツールとの違い、拡張のヒント

AIコーディングエージェントの仕組みと実装

  • AIコーディングアシスタント の本質は「魔法」ではなく、 LLMとツールの連携 による会話型エージェント
  • ユーザーが要件を入力し、 LLMが必要なツール呼び出しを指示
  • プログラムがツールを実行し、結果をLLMへ返却
  • LLM自身はファイルシステムへ直接アクセスしない 設計
  • このループがエージェントの全体構造

必須ツール3種

  • ファイル読み込み LLMがプロジェクトコードを確認するための機能

  • ファイル一覧取得 ディレクトリ内ファイルを一覧表示し、プロジェクトをナビゲート

  • ファイル編集 コードの生成・修正・新規作成を指示

    • Claude Code等の本格的なエージェントではgrepやbash、websearch等の追加機能も搭載

基本的なセットアップ

  • 必要な インポート (inspect, json, os, anthropic, dotenv, pathlib, typing)
  • APIクライアント の初期化(例:AnthropicのClaude利用)
  • ターミナル出力の色分け による可読性向上
  • ファイルパス解決ユーティリティ で絶対パスを取得

ツールの実装

  • 各ツール関数には 詳細なdocstring を付与し、LLMが自律的にツール選択できるよう設計

    • read_file_tool ファイル名を受け取り、中身を返却する辞書を生成
    • list_files_tool ディレクトリ内のファイルと種類(ファイル/ディレクトリ)を返却
    • edit_file_tool old_strが空なら新規作成、それ以外はold_strをnew_strに置換
      • old_str未検出時の挙動も明確化

ツールレジストリとLLMへの知識伝達

  • TOOL_REGISTRY で関数名と実体を紐付け
  • get_tool_str_representation でdocstringとシグネチャを抽出し、LLMにツール一覧を提示
  • SYSTEM_PROMPT でツールの使い方・呼び出しフォーマットを指示
  • LLMは「tool: TOOL_NAME({JSON_ARGS})」形式でツール呼び出しを返却

ツール呼び出しのパース

  • extract_tool_invocations でLLMの出力からツール呼び出しを抽出
  • 「tool: name({...})」行をパースし、関数名と引数辞書のリストを生成

LLM呼び出しラッパー

  • execute_llm_call で会話履歴とシステムプロンプトを渡し、LLMの応答を取得

エージェントループ全体像

  • 外側ループ :ユーザー入力を取得し、会話履歴に追加
  • 内側ループ :LLM応答を解析し、ツール呼び出しがあれば実行
    • ツール呼び出しがなければ応答を表示し、内側ループ終了
    • ツール実行結果を会話履歴に追加し、再度LLMへ
  • 複数ツールの連続呼び出し にも対応する構造

実行例

  • 新規ファイル作成指示:「hello.pyにHello Worldを実装して」
    • edit_fileツールで新規作成、LLMが完了報告
  • 複数ステップ:「hello.pyに掛け算関数を追加して」
    • read_fileで内容確認→edit_fileで関数追加

本格的なツールとの違い

  • 本実装は 約200行 のシンプル構成
  • Claude Code等の製品では
    • 例外処理やフォールバック
    • ストリーミング応答
    • 長大ファイルの要約等の文脈管理
    • 追加ツールや破壊的操作の承認フロー
  • しかし 基本構造は同じ で、LLMが判断し、コードが実行、結果を返却

拡張と学習のヒント

  • LLMプロバイダの差し替え やプロンプトの調整、ツール追加も容易
  • シンプルなパターンながら高い拡張性
  • AIソフトウェア開発の先端技術 を学ぶ教材やコースも紹介

このパターンを理解し、拡張することで自作のAIエージェント開発が可能

Hackerたちの意見

この記事は1年前にはかなり真実に近かったけど、今はハーネスがシンプルなエージェントループを超えてるから、これがクロードコードの動きの正確なメンタルモデルとは言えないと思う。

興味あるな、それについて詳しく教えてくれない?

最近のバージョンでもすごく変わったみたいだね。前は頻繁に中断して指示しなきゃいけなかったことを、今はどうやってやってるのかもっと知りたいな。

この記事は2025年1月に公開されたんだね。(タイトルに2025年って入れるべきだった?時間が経つの早いな。)

でも、その余計な複雑さって実際にパフォーマンスを向上させるの? https://www.tbench.ai/leaderboard/terminal-bench/2.0 ではそうだと言ってるけど、思ったほどじゃないみたい。「ターミナス」って基本的にはtmuxセッションとLLMのループだよ。

もちろん現代のハーネスはより良い機能を持ってるけど、それがメンタルモデルを無効にするとは思わないな。基盤のモデルが同じなら、シンプルなエージェントもパフォーマンスではそんなに遅れを取ってないよ。基本的なツールを使ったミニマルなものも含めてね。「自分でリレーショナルDBを作る」みたいな記事が基本的なBツリーとマージ結合を紹介するのと似てる。実際のエンジンには洗練されたプランナーや複数の結合方法、ブルームフィルターとかがあるけど、基盤のメンタルモデルはまだ正確だよ。

あなたが思っているほど真実ではないよ。昨年の進展の多くは、エージェントのプロンプトやツールを洗練させて、モデルが自由に動けるようにすることに関係している。サブエージェントやMCP、スキルはどれもまあまあで、ツールの出力を永遠に持ち運ばないようにするためのコンテキストの最適化もあったけど、それは主に長時間動作するエージェントにとってのメリットで、短いタスクではあまり気づかないよ。

同意。codex-cliリポジトリを使って、エージェントにコア機能を分析してもらうと、より良いモデルが得られるよ。

もう少し詳しいことがあるよ!例えば、投稿のエージェントは「早期停止」を示すことがあって、タスクが本当に終わる前に終了しちゃうんだ。これを推論モデルで解決できると思うかもしれないけど、実際にはSOTAモデルではうまくいかない。早期停止を修正するには、エージェントハーネスに追加機能が必要なんだ。クロードコードはTODOを使って、残っているタスクをLLMに思い出させるために、すべてのプロンプトに注入してるよ。(もし興味があれば、HolmesGPTの公開リポジトリのどこかに、これを解決するために行った実験のベンチマークがあるよ。仮説追跡から他のエキゾチックなアプローチまで、でもTODOがいつも一番良い結果を出してた。)それでも、いい記事だね。エージェントは本当にループの中のツールに過ぎない。難しいことじゃないよ。

なんで早く止まるの?例を教えて。

いいポイントだね、みんな知っておくべきだと思う。コーディングエージェントの核心は本当にシンプルで、ツール呼び出しのループなんだ。そうは言っても、こんな記事を書いて「クロードコードを200行でコーディングする方法」とか名付けるなら、少なくとも2025年4月に出たThorsten Ballの素晴らしい記事「エージェントの作り方、または: 皇帝は裸だ」というのを参考にすべきだよ(https://ampcode.com/how-to-build-an-agent)!これは(私の知る限り)コーディングエージェントの核心が実際にはかなりシンプルだってことを指摘した最初の記事だったんだ(深い複雑さはLLMにある)。これを読んだときは目から鱗だったよ。ちなみに、ここにいる他のコメント者たちと同意見だけど、現代のエージェントをうまく機能させるにはかなりの追加の足場(TODOとかもっと色々)が必要だと思う。そしてクロードコード自体は設定やフック、プラグイン、UI機能がたくさんあるかなり複雑なソフトウェアだよ。ただ、ミニマルなコーディングエージェントループができれば、自分でコードをブートストラップしてそれらを追加できるようになるんだ!それは試してみると楽しいし、ちょっと変わったことだよ。(ところで、この記事の日付「2025年1月」は明らかに2026年のタイプミスだね。クロードコードは1年前には存在しなかったし、2025年5月のclaude-sonnet-4-20250514モデルを使ってるから。)編集: もしクロードコードが裏で何をしているのかもっと深く知りたいなら、「claude-trace」という良いツールがあるよ(https://github.com/badlogic/lemmy/tree/main/apps/claude-trac...)。これを使うと、ツール呼び出しとLLMの全体の流れを見られるよ。LLMへのすべての呼び出しとその応答、LLMのツール呼び出しの呼び出しと、ツールが実行されるときのエージェントからLLMへの応答などがね。クロードスキルが出たとき、これを使ってどうやって機能するのかの予想を確認したよ(ツールの説明に短いスキルの説明が詰め込まれたツール呼び出しなんだ)。基本プロンプトを読むのも面白いよ。(他にも、絵文字を使わないように明示的に指示してるんだけど、私が自分のエージェントを書いたときは確かに絵文字が多かったから、それが分かる。)

あなたの言葉によると、コーディングエージェントの>>コアは本当にシンプルだそうですが、見せてくれますか?それと、チェックできるURLも教えてもらえますか?

Hacker Newsで議論の続きを見る