[{"data":1,"prerenderedAt":795},["ShallowReactive",2],{"content-/writing-tools-for-agents":3,"all-pages-for-dir":776,"related-/writing-tools-for-agents":777,"og-image-/writing-tools-for-agents":794},{"id":4,"title":5,"body":6,"category":758,"concepts":758,"description":759,"extension":760,"meta":761,"navigation":762,"ogImage":758,"path":763,"project_name":758,"published":764,"publishedAt":765,"seo":766,"source":758,"stem":767,"tags":768,"todo":758,"unpublished":764,"updatedAt":758,"__hash__":775},"pages/2025-12/2025-12-30/writing-tools-for-agents.md","エージェント向けの効果的なツールを書く ― エージェントとともに",{"type":7,"value":8,"toc":738},"minimark",[9,13,147,150,164,166,170,173,176,180,183,212,215,267,270,273,278,284,289,299,302,311,314,325,328,331,334,339,408,413,424,427,430,435,443,448,454,457,460,463,468,485,490,507,510,513,524,529,594,599,612,615,636,639,642,696,699,702,704,707,709,712,734],[10,11,5],"h1",{"id":12},"エージェント向けの効果的なツールを書く-エージェントとともに",[14,15,17,22,26,141],"callout",{"type":16},"info",[18,19,21],"h2",{"id":20},"claude-code-ユーザーへの適用可能性評価","Claude Code ユーザーへの適用可能性評価",[23,24,25],"p",{},"この記事で紹介されている内容が Claude Code CLI でどの程度活用できるかを評価しました。",[27,28,29,45],"table",{},[30,31,32],"thead",{},[33,34,35,39,42],"tr",{},[36,37,38],"th",{},"項目",[36,40,41],{},"Claude Code での適用",[36,43,44],{},"備考",[46,47,48,67,80,93,105,117,129],"tbody",{},[33,49,50,54,60],{},[51,52,53],"td",{},"MCP サーバーの追加",[51,55,56],{},[57,58,59],"strong",{},"可能",[51,61,62,66],{},[63,64,65],"code",{},"claude mcp add \u003Cname> \u003Ccommand>"," で追加可能",[33,68,69,72,77],{},[51,70,71],{},"ツール設計原則",[51,73,74],{},[57,75,76],{},"適用可能",[51,78,79],{},"カスタム MCP サーバー開発時に活用",[33,81,82,85,90],{},[51,83,84],{},"評価ループの実行",[51,86,87],{},[57,88,89],{},"部分的に可能",[51,91,92],{},"Claude Code 自体で評価スクリプトを実行可能",[33,94,95,98,102],{},[51,96,97],{},"ツールの名前空間設計",[51,99,100],{},[57,101,76],{},[51,103,104],{},"MCP サーバー開発時のベストプラクティスとして活用",[33,106,107,110,114],{},[51,108,109],{},"レスポンス最適化",[51,111,112],{},[57,113,76],{},[51,115,116],{},"カスタムツール開発時に参考になる",[33,118,119,122,126],{},[51,120,121],{},"プロトタイプ開発",[51,123,124],{},[57,125,59],{},[51,127,128],{},"Claude Code で MCP サーバーを開発・テスト可能",[33,130,131,134,138],{},[51,132,133],{},"トランスクリプト分析",[51,135,136],{},[57,137,59],{},[51,139,140],{},"Claude Code の会話履歴を分析に活用可能",[23,142,143,146],{},[57,144,145],{},"結論",": この記事の内容は Claude Code ユーザーにとって非常に有用です。特に独自の MCP サーバーを開発する場合や、既存のツールを最適化する場合に直接適用できます。",[148,149],"hr",{},[23,151,152],{},[153,154,155,156,163],"em",{},"この記事は Anthropic Engineering Blog の ",[157,158,162],"a",{"href":159,"rel":160},"https://www.anthropic.com/engineering/writing-tools-for-agents",[161],"nofollow","Writing effective tools for agents — with agents","（2025年9月11日公開）を日本語に翻訳したものです。",[148,165],{},[18,167,169],{"id":168},"ツールとは何か","ツールとは何か？",[23,171,172],{},"ツールは決定論的なシステムと非決定論的なエージェントを橋渡しする新しいソフトウェアパラダイムを表しています。同じ入力に対して常に同じ出力を生成する従来の API とは異なり、エージェント向けのツールは予測不可能な LLM の振る舞いを考慮する必要があります。エージェントは幻覚を見たり、指示を誤解したり、代替戦略を追求したりする可能性があるのです。",[18,174,175],{"id":175},"ツールの書き方",[177,178,179],"h3",{"id":179},"プロトタイプの構築",[23,181,182],{},"効果的なツール開発は、素早いプロトタイピングから始まります：",[184,185,186,192,202,207],"ol",{},[187,188,189],"li",{},[57,190,191],{},"Claude Code を使用して素早くプロトタイプを作成する",[187,193,194,197,198,201],{},[57,195,196],{},"LLM フレンドリーなドキュメントを提供する","（公式サイトで ",[63,199,200],{},"llms.txt"," ファイルを確認）",[187,203,204],{},[57,205,206],{},"ローカル MCP サーバーまたは Desktop 拡張機能でツールをラップしてテストする",[187,208,209],{},[57,210,211],{},"手動でテストし、ユーザーフィードバックを収集する",[23,213,214],{},"MCP サーバーを追加するコマンド：",[216,217,222],"pre",{"className":218,"code":219,"language":220,"meta":221,"style":221},"language-bash shiki shiki-themes vitesse-light vitesse-light","claude mcp add \u003Cname> \u003Ccommand> [args...]\n","bash","",[63,223,224],{"__ignoreMap":221},[225,226,229,233,237,240,244,247,251,254,256,259,262,264],"span",{"class":227,"line":228},"line",1,[225,230,232],{"class":231},"senZ8","claude",[225,234,236],{"class":235},"sdGka"," mcp",[225,238,239],{"class":235}," add",[225,241,243],{"class":242},"stQ0i"," \u003C",[225,245,246],{"class":235},"nam",[225,248,250],{"class":249},"sG7-3","e",[225,252,253],{"class":242},">",[225,255,243],{"class":242},[225,257,258],{"class":235},"comman",[225,260,261],{"class":249},"d",[225,263,253],{"class":242},[225,265,266],{"class":249}," [args...]\n",[177,268,269],{"id":269},"評価の実行",[23,271,272],{},"現実的な評価タスクを生成し、複数のツール呼び出しを必要とするものを用意します。",[23,274,275],{},[57,276,277],{},"良い例：",[279,280,281],"blockquote",{},[23,282,283],{},"「Jane と Acme Corp プロジェクトについて話し合うミーティングをスケジュールし、企画ノートを添付し、会議室を予約してください」",[23,285,286],{},[57,287,288],{},"悪い例：",[279,290,291],{},[23,292,293,294,298],{},"「来週 ",[157,295,297],{"href":296},"mailto:jane@acme.corp","jane@acme.corp"," とミーティングをスケジュールして」",[23,300,301],{},"評価には以下を含めます：",[303,304,305,308],"ul",{},[187,306,307],{},"プロンプトと対になる検証可能な結果",[187,309,310],{},"シンプルなエージェントループを使用したプログラム的な評価実行",[177,312,313],{"id":313},"結果の分析",[303,315,316,319,322],{},[187,317,318],{},"エージェントの推論とトランスクリプトをレビューして混乱ポイントを特定",[187,320,321],{},"ツール呼び出しメトリクスで非効率性を検査",[187,323,324],{},"トランスクリプト分析に基づいてツールをリファクタリングするため、エージェント（Claude Code 経由）と協力",[18,326,327],{"id":327},"効果的なツールを書くための原則",[177,329,330],{"id":330},"適切なツールの選択",[23,332,333],{},"すべての API エンドポイントをツールとしてラップすることは避けてください。エージェントのコンテキスト制限を考慮してツールを設計します。",[23,335,336],{},[57,337,338],{},"設計例：",[27,340,341,351],{},[30,342,343],{},[33,344,345,348],{},[36,346,347],{},"避けるべきアプローチ",[36,349,350],{},"推奨アプローチ",[46,352,353,365,385,397],{},[33,354,355,360],{},[51,356,357],{},[63,358,359],{},"list_contacts",[51,361,362],{},[63,363,364],{},"search_contacts",[33,366,367,379],{},[51,368,369,372,373,372,376],{},[63,370,371],{},"list_users"," + ",[63,374,375],{},"list_events",[63,377,378],{},"create_event",[51,380,381,382],{},"単一の ",[63,383,384],{},"schedule_event",[33,386,387,392],{},[51,388,389],{},[63,390,391],{},"read_logs",[51,393,394],{},[63,395,396],{},"search_logs",[33,398,399,402],{},[51,400,401],{},"顧客データ、取引、メモの個別ツール",[51,403,404,407],{},[63,405,406],{},"get_customer_context","（統合ツール）",[23,409,410],{},[57,411,412],{},"重要な原則：",[303,414,415,418,421],{},[187,416,417],{},"ツールは複数ステップの操作を統合すべき",[187,419,420],{},"少数の適切に設計されたツールは、多数の重複するツールより優れている",[187,422,423],{},"「エージェントにとって最も使いやすいツールは、人間にとっても驚くほど直感的に理解しやすいものになる」",[177,425,426],{"id":426},"名前空間",[23,428,429],{},"関連するツールを共通のプレフィックスでグループ化します：",[23,431,432],{},[57,433,434],{},"サービスレベルの編成：",[216,436,441],{"className":437,"code":439,"language":440},[438],"language-text","asana_search\njira_search\n","text",[63,442,439],{"__ignoreMap":221},[23,444,445],{},[57,446,447],{},"リソースレベルの編成：",[216,449,452],{"className":450,"code":451,"language":440},[438],"asana_projects_search\nasana_users_search\n",[63,453,451],{"__ignoreMap":221},[23,455,456],{},"プレフィックスとサフィックスの命名はどちらもパフォーマンスに影響します。評価でテストしてください。",[177,458,459],{"id":459},"意味のあるコンテキストを返す",[23,461,462],{},"完全性よりも高シグナルな情報を優先します。",[23,464,465],{},[57,466,467],{},"避けるべきフィールド：",[303,469,470,475,480],{},[187,471,472],{},[63,473,474],{},"uuid",[187,476,477],{},[63,478,479],{},"256px_image_url",[187,481,482],{},[63,483,484],{},"mime_type",[23,486,487],{},[57,488,489],{},"推奨フィールド：",[303,491,492,497,502],{},[187,493,494],{},[63,495,496],{},"name",[187,498,499],{},[63,500,501],{},"image_url",[187,503,504],{},[63,505,506],{},"file_type",[23,508,509],{},"暗号的な UUID を意味的な識別子に置き換えてください。",[177,511,512],{"id":512},"トークン効率の最適化",[303,514,515,518,521],{},[187,516,517],{},"ページネーション、フィルタリング、トランケーションを妥当なデフォルトで実装",[187,519,520],{},"Claude Code はデフォルトでレスポンスを 25,000 トークンに制限",[187,522,523],{},"不透明なコードではなく、アクション可能なガイダンスを含む有用なエラーメッセージを提供",[23,525,526],{},[57,527,528],{},"ResponseFormat 列挙型を使用した柔軟なレスポンス：",[216,530,534],{"className":531,"code":532,"language":533,"meta":221,"style":221},"language-typescript shiki shiki-themes vitesse-light vitesse-light","enum ResponseFormat {\n   DETAILED = \"detailed\",\n   CONCISE = \"concise\"\n}\n","typescript",[63,535,536,549,572,588],{"__ignoreMap":221},[225,537,538,541,545],{"class":227,"line":228},[225,539,540],{"class":242},"enum",[225,542,544],{"class":543},"sSkh3"," ResponseFormat",[225,546,548],{"class":547},"shFtX"," {\n",[225,550,552,556,559,563,566,569],{"class":227,"line":551},2,[225,553,555],{"class":554},"s4oTP","   DETAILED",[225,557,558],{"class":547}," =",[225,560,562],{"class":561},"sMJiu"," \"",[225,564,565],{"class":235},"detailed",[225,567,568],{"class":561},"\"",[225,570,571],{"class":547},",\n",[225,573,575,578,580,582,585],{"class":227,"line":574},3,[225,576,577],{"class":554},"   CONCISE",[225,579,558],{"class":547},[225,581,562],{"class":561},[225,583,584],{"class":235},"concise",[225,586,587],{"class":561},"\"\n",[225,589,591],{"class":227,"line":590},4,[225,592,593],{"class":547},"}\n",[23,595,596],{},[57,597,598],{},"トークン効率の具体例：",[303,600,601,604,607],{},[187,602,603],{},"詳細なレスポンス例：206 トークン",[187,605,606],{},"簡潔なフォーマット：72 トークン",[187,608,609],{},[57,610,611],{},"約3分の1のコンテキスト消費に削減",[177,613,614],{"id":614},"ツール説明のプロンプトエンジニアリング",[303,616,617,620,623,633],{},[187,618,619],{},"新しいチームメンバーに説明するように記述を書く",[187,621,622],{},"暗黙のコンテキストを明示的にする",[187,624,625,626,629,630],{},"曖昧でないパラメータ名を使用：",[63,627,628],{},"user"," ではなく ",[63,631,632],{},"user_id",[187,634,635],{},"評価を通じて説明の改良をテスト ― 小さな変更が大きな改善をもたらす",[18,637,638],{"id":638},"推奨される評価メトリクス",[23,640,641],{},"効果的なツール評価には以下のメトリクスを追跡します：",[27,643,644,654],{},[30,645,646],{},[33,647,648,651],{},[36,649,650],{},"メトリクス",[36,652,653],{},"説明",[46,655,656,664,672,680,688],{},[33,657,658,661],{},[51,659,660],{},"ツール呼び出しごとの合計実行時間",[51,662,663],{},"各ツール呼び出しのパフォーマンス",[33,665,666,669],{},[51,667,668],{},"タスクごとの合計実行時間",[51,670,671],{},"エンドツーエンドのタスク完了時間",[33,673,674,677],{},[51,675,676],{},"ツール呼び出しの総数",[51,678,679],{},"エージェントの効率性の指標",[33,681,682,685],{},[51,683,684],{},"トークン消費量",[51,686,687],{},"コスト効率とコンテキスト使用量",[33,689,690,693],{},[51,691,692],{},"ツールエラー頻度",[51,694,695],{},"ツールの信頼性",[18,697,698],{"id":698},"主要な結果",[23,700,701],{},"内部テストでは、Claude に最適化されたツールは、Slack と Asana の両方の MCP 実装において、ホールドアウトテストセットで人間が書いたバージョンを大幅に上回る性能を示しました。",[18,703,145],{"id":145},[23,705,706],{},"効果的なエージェントツールにはソフトウェア設計の再考が必要です。決定論的なパターンから、体系的な評価と反復的な改良を通じて非決定論的なエージェントの振る舞いに対応する設計へとシフトする必要があります。",[148,708],{},[18,710,711],{"id":711},"参考リンク",[303,713,714,721,728],{},[187,715,716],{},[157,717,720],{"href":718,"rel":719},"https://modelcontextprotocol.io/",[161],"Model Context Protocol (MCP) 公式ドキュメント",[187,722,723],{},[157,724,727],{"href":725,"rel":726},"https://docs.anthropic.com/claude/docs/claude-code",[161],"Claude Code ドキュメント",[187,729,730],{},[157,731,733],{"href":159,"rel":732},[161],"元記事（英語）",[735,736,737],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sSkh3, html code.shiki .sSkh3{--shiki-default:#2E8F82;--shiki-dark:#2E8F82}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}",{"title":221,"searchDepth":551,"depth":551,"links":739},[740,741,742,747,754,755,756,757],{"id":20,"depth":551,"text":21},{"id":168,"depth":551,"text":169},{"id":175,"depth":551,"text":175,"children":743},[744,745,746],{"id":179,"depth":574,"text":179},{"id":269,"depth":574,"text":269},{"id":313,"depth":574,"text":313},{"id":327,"depth":551,"text":327,"children":748},[749,750,751,752,753],{"id":330,"depth":574,"text":330},{"id":426,"depth":574,"text":426},{"id":459,"depth":574,"text":459},{"id":512,"depth":574,"text":512},{"id":614,"depth":574,"text":614},{"id":638,"depth":551,"text":638},{"id":698,"depth":551,"text":698},{"id":145,"depth":551,"text":145},{"id":711,"depth":551,"text":711},null,"AIエージェント向けの高品質なツールを設計するための実践的なガイド。Model Context Protocol (MCP)を活用したツール開発のベストプラクティスを解説。","md",{},true,"/writing-tools-for-agents",false,"2025-12-30T00:00:00.000Z",{"title":5,"description":759},"2025-12/2025-12-30/writing-tools-for-agents",[769,770,771,772,773,774],"AI","Agent","MCP","Tool Design","Claude","Best Practices","SBHYWTttPpAnqS8DIIhSoAfFOuh3xs59MZ0_SD821Yk",[],[778,781,784,787,790],{"title":779,"path":780,"publishedAt":765},"Agent Skillsで実世界に対応するAIエージェントを構築する","/agent-skills",{"title":782,"path":783,"publishedAt":765},"Claude Agent SDKでエージェントを構築する","/claude-agent-sdk",{"title":785,"path":786,"publishedAt":765},"MCPでのコード実行：より効率的なエージェントの構築","/code-execution-with-mcp",{"title":788,"path":789,"publishedAt":765},"長時間稼働エージェントのための効果的なハーネス設計","/effective-harnesses-for-long-running-agents",{"title":791,"path":792,"publishedAt":793},"AI格差は、まず体験格差として現れる","/ai-experience-gap-frontier-models","2026-06-29T00:00:00.000Z","https://log.eurekapu.com/og/blog/writing-tools-for-agents.png?v=2025-12-30T00%3A00%3A00.000Z&title=%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E5%90%91%E3%81%91%E3%81%AE%E5%8A%B9%E6%9E%9C%E7%9A%84%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E6%9B%B8%E3%81%8F%20%E2%80%95%20%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%81%A8%E3%82%82%E3%81%AB&author=Kei%20Komatsu&sig=4601604a67ddbf66",1785654701208]