English

TL;DR#

  • LLMフレンドリーな​ドキュメント提供方法と​しては、​ローカルに​ダウンロードさせるのが​現時点では​最も​効率が​良い
  • library提供者は、​ドキュメントをnpm等の​packageと​して​publishする​ことを​検討する​べき​(例: @foo/docs
  • Vibe Codingが​盛んな​今日に​おいて、​libraryや​frameworkが​LLMフレンドリーである​ことは​とても​重要

Note: この​ブログでは​主に​JavaScriptエコシステムに​絞って​話を​するので、npm registryに​publishする​話を​書いています。​他の​エコシステムに​ついては​他の​エコシステムなりの​package配布手段が​あるので、​そこに​置き換えて​考えてみてください

2025年の​漢字は​「Coding Agent」と​「MCP」#

2025年は​Coding Agentの​年でした。​3月にClaude Codeが​発表され、​5月に​GAに​なってからは​その​勢いは​とどまる​ことなく、​その​後CodexOpenCodeなどの​Agent人気にも​火が​つきました。​ 世の​中を​見渡すと、​日頃​どのような​モデルが​Codingに​良いか、​どの​エージェントが​うまく​出力を​出すか、​どのような​ツールが​コード生成を​サポートするかと​いった​話題で​持ちきりです。​ これに​加えて、​MCPの​普及も​ありました。​特に​Coding Agentを​助ける​ものとしては​効果的であると​され、​毎日のように​新しい​MCP Serverが​公開され、​人々は​それに​ついて​話しています。

LLMから​望む​出力を​得るには#

ところで​世の​中には​いろいろな​開発ツールや​libraryが​あります。​LLMは​主に​有名な​ものを​学習対象に​しており、​かつknowledge cutoff後の​知識に​ついては​当然知り得ないため、​当然、​何もしないまま​ポン出しでは​望む​出力が​得られません。​ 有名な​話では​Svelte4と​5の​違い、​React Router V6と​V7の​違いなど、​breaking changesが​行われた​Web Frontend Frameworkなどでは​顕著に​表れていました。​さらに​CLIツールを​作る​ための​libraryなどは​得てして​マイナーな​もの、​学習対象が​少ない​ものが​多くなりがちで、​出力結果が​望ましい​ものでない​場合が​多いです。​ これらの​問題を​解決する​ためには、​いかに​して​LLMに​できる​限りの​情報を​与えられるかと​いう​環境整備の​話が​大事に​なってきます。​つまり、​LLMの​知識に​ない​ものを​できるだけ用意して​アクセスできる​状態に​する​ことで​望み通りの​情報を​得られるように​LLMを​導く、と​いう​ことです。​ この​約1年を​通して​様々な​場所で​色々な​議論が​行われてきました。​それぞれの​良い​こと、​悪い​こと、​その​時に​良いと​されてきた​もの、​振り返ってみると​微妙だったよねと​なっている​もの、​様々​あります。

けつろんぱ#

Vibe Codingが​盛んな​今日に​おいて、​libraryや​frameworkを​LLMフレンドリーに​する​ことはますます​重要に​なっています。​LLMと​相性が​悪い​libraryは、​それだけで​選択肢から​外される​可能性が​あります。​では、​library提供者は​どのように​して​LLMフレンドリーな​環境を​実現できるでしょうか?

結論から​言うと、​LLMフレンドリーな​ドキュメント提供方法と​しては、ローカルに​あるだけの​ものを​ダウンロードしそれを​Coding Agentが​自由に​読める​状態に​することが​現時点では​最も​効率が​良いです。​ libraryの​提供者は、​ドキュメントを​バージョン管理可能な​状態でnpm等の​registryに​上げるのが​現時点では​最も​効果的なのではないかと​筆者は​考えています。​ ブログでは​ドキュメントを​与える​方法が​どのように​変わっていったか、​そしてなぜ​その​方法が​一番​良いと​筆者が​結論づけているのかに​ついて​論じて​いきます。

ドキュメント提供方法の​変遷#

RAG#

RAG (Retrieval-Augmented Generation)は、​LLMに​外部知識を​与える​ための​方法と​して​広く​知られています。​ 2022年11月に​ChatGPTが​公開された​後、​人々の​間で、​「関連情報と​プロンプトを​一緒に​渡せば​知識に​基づいた​望ましい​出力が​得られる」と​いう​認識が​広まりました。​ これに​伴って​プロンプトから​いかに​関連した​情報を​取り出して​渡すかと​いう​議論が​盛んに​なりました。​ ここでは​RAGの​具体的な​手法には​触れませんが、​ドキュメントを​渡して​one-shotで​回答を​得ると​いう​ことの​大切さの​議論は、​ここから​盛んになった​ものと​考えられます。

2023年、​ChatGPTに​Web検索機能が​追加されました。​これに​より、​LLMは​インターネット上の​最新情報に​アクセスできるようになりました。​ ChatGPTが​能動的に​情報を​ネットから​探して、​それに​ついて​回答を​生成する​ことが​可能に​なりました。​ ただし、​HTMLと​いう​構造は​LLMフレンドリーではなく、​また​毎回検索を​するのは​コストが​高いため、​決して​効率の​いい方法とは​言えません。​ 現代の​Coding Agentは​ウェブ検索機能を​搭載するのが​当たり前に​なっている​一方、​この​問題は​今後も​ついて​回る​ことに​なるでしょう。​ こと​現在のContext Engineeringの​常識を​鑑みるに​Web Searchに​頼るのは​最終手段に​すべきでしょう。

llms.txt#

llms.txtは、​2024年9月に​提案された、​比較的新しい​ウェブ標準"案"です。​ llms.txtを​用いる​ことで、​Webサイトは​HTMLのような​人間に​とっての​構造を​廃し、​LLMに​とって​必要最低限の​情報を​マークダウンで​記述する​ことで、​トークン量を​減らしつつ正確な​情報を​提供する​ことができます。

Mintlifyなど、​Coding Agentから​アクセスすると、​HTMLではなく​自動的にllms.txtを​返してくれるような​ドキュメントサービスも​増えています。

MCP Server#

2024年後半から​2025年に​かけて、MCP (Model Context Protocol)が​普及しました。​ MCPは​2023年6月に​OpenAIから​発表された​ function calling ( tool calling )の​概念を​標準化する​形で​提案された​プロトコルです。​ 2025年に​なって、​Coding Agentに​情報を​与える​手段と​して、​Anthropic社から​大々的に​宣伝された​ことも​あり、​もの​すごい​勢いで​MCP Serverが​増えていきました。​ MCP Serverの​素晴らしい​ところは、​ひとたびMCPに​沿った​形で​ツールを​定義すると、​それがClaude CodeでもCodexでもOpenCodeでもamp codeでも​好きな​Coding Agentで​それが​使えると​いう​ことです。

これまでに​いろいろな​タイプの​MCP Serverが​作られてきました。​筆者もsitemcpと​いう​MCP Serverを​作成し、​ドキュメントを​MCP Server経由で​提供する​方法を​提案しました。

libraryや​frameworkの​提供者が​それを​使う​ための​ MCP Serverを​個別に​提供し始めています。

また​独自の​手法を​用いて​GitHubや​libraryの​情報を​いい​感じに​要約して​返してくれる​MCP Serverも​あります。​ Deepwiki MCPContext 7grep mcpなどは​その​最たる​例です。

既存の​方法の​問題点#

しかし、​MCP Serverには​大きな​問題点が​ありました。

また、llms.txtにも​共通する​問題点と​して

  • 毎回リモートに​ある​ドキュメントを​参照するのに​時間も​コストも​かかる
  • ドキュメントが​バージョンごとに​存在しているのは​稀で、​バージョンが​古い​libraryを​使っている​ときに​情報の​ミスマッチが​起きる
  • 実際に​Coding Agentが​使うのは​得られた​情報の​一部でしかないのにも​かかわらず、​取得した​すべての​情報を​context windowに​保持する​ことになり、​非常に​効率が​悪い

最後の​問題に​関しては、Claude Code は​ Subagents と​いう​仕組みを​導入する​ことで、​部分的に​解決しています。​ しかし​他の​問題は​残ります。

原点回帰: ローカルドキュメント#

MCPが​普及し始めた​2025年4月ごろから、MCPと​CLIは​どっちが​いいんだと​いう​議論が​度々​話題に​なっていました。​Coding Agentも​この​半年で​いくつか​世代を​経る​ごとに、​CLIツールの​呼び出し方に​ついては、​めきめきと​精度が​上がっていきました​(​これと​比較して、MCPなどの​ツール​呼び出しの​精度は​実は​あんまり​上がって​ないんですよね...)。

これを​踏まえると、​できる​限りドキュメントや​libraryの​ソースコードを​手元に​置いて​おくのが​いいのではないかなと​いう​アイデアを​筆者の​周りではより​頻繁に​聞くようになりました。​ 例えば​友人である​ natsukium は​ ghqを​使って​使用している​libraryを​ローカルに​クローンして​参照するようにCLAUDE.mdに​指示を​書いています。​また、btcaと​いう​CLIツールでは、​指定した​libraryを​実際に​GitHubから​クローンしてきて、​その​情報を​与える​ための​仕組みを​整備していたりします。

一度​手元に​ドキュメントを​おいて​仕舞えば、​あとは​Coding Agentがfd, rgなどを​使って​必要な​情報を​探し出し、​必要な​部分だけを​読み込んで​処理すればよいわけです。​ しかもわざわざリモートに​情報を​取りに​行く​必要も​ないわけですから、​非常に​効率的です。​ repositoryに​ドキュメントが​置いて​あったとしても、​それは​大抵Markdownでしょう。​2025年現在何か​ドキュメントを​書くとした​場合に、​それが​Markdownでない​確率の​方が​低いと​考えられます。

ドキュメントを​publishしよう#

ローカルに​ドキュメントや​コードを​置いて​おく​ことは​効果的である​ことは​明らかです。​ では​この​仕組みを​どうやったら​一般化できるでしょうか?​ libraryの​提供者は​どうやれば​最小手で​自分の​libraryや​frameworkを​LLMフレンドリーに​できるでしょうか?​ 上の​方法では​解決していない​バージョンに​よる​違いなどは​どのように​解決すれば​いいのでしょうか。

筆者は、​library提供者がドキュメントをnpm packageに​同梱する。​あるいは​ @foo/docs のような​形で​ドキュメント専用packageを​提供することを​提案します。​(JavaScriptエコシステムの​場合)

な​ぜnpm packageなのか#

npm packageと​して​ドキュメントを​提供する​ことには​いく​つかの​利点が​あります。

ローカルへの​自動配置#

npmの​大きな​特徴と​して、​インストールした​packageがnode_modulesディレクトリに​実体と​して​配置される​ことが​挙げられます。​ パスは​常に./node_modules/<package-name>と​予測可能で、​Coding Agentが​参照しやすい​構造に​なっています。​ ドキュメントをnpm packageと​して​publishすれば、npm installするだけで​自動的に​プロジェクト内に​ドキュメントが​配置されるのです。

ドキュメント参照容易性#

ドキュメントを​Coding Agentに​参照させるのは​非常に​簡単です。

If you need to implement feature X, use the `@your-library` package.
Please refer to the documentation located at `./node_modules/@your-library/docs/**/*.md` for more information about how to use the library.

これを​そのままCLAUDE.mdAGENTS.mdに​書く​こともできますし、​より​具体的にはAgent Skillsの​一つと​して​定義する​ことで、​必要に​応じて​参照させる​こともできるでしょう。

配布容易性#

あなたが​libraryの​作者である​場合、​ドキュメントと​library本体を​モノレポで​管理している​場合が​ほとんどでしょう。​その​場合、​ドキュメントを​管理している​repositoryを​同時に​バージョンを​付けて​publishする​ことができます。​ またすでに​repositoryに​ある​Markdownを​そのまま​コピーして​publishするだけで​完了するので​とても​簡単です。

バージョン管理容易性#

新しい​packageを​publishする​ごとに、​同時に​ドキュメントを​publishしていけば、​ユーザーは​libraryと​ドキュメントの​バージョンを​合わせて​ダウンロードする​ことができます。​ Coding Agentは、​使用している​libraryの​バージョンに​対応する​ドキュメントを確実に参照する​ことができます。

実際の​運用例#

実は​この​方法は​すでに​いく​つかの​libraryで​行われている​ものです。

bun-types#

Bunは​JavaScriptランタイムですが、​その​型定義を​提供する​ためにbun-typesと​いう​packageを​提供しています。​ この​packageには​Bunの​型定義だけでなく、Bunの​ドキュメントも​同梱されています

また​面白い​ことにbun init -yコマンドで​プロジェクトを​生成させると、bunCLAUDE.mdファイルを​自動生成します。​その​中にはBunの​ドキュメントを​参照する​指示が​含まれています。

gunshi#

gunshi by kazupon は​TypeScriptで​CLIツールを​作成する​ための​libraryです。​筆者が​今もっとも​愛用している​CLI libraryです。

My JS CLI Stack 2025 ​(日本語) | blog | ryoppippi.com
2025年の​JavaScript CLI開発で​使う​Bun、​tsdown/Rolldown、​依存ゼロの​バンドル、​gunshi、​Vitest、​npm、​OIDC、​bunxなどの​選定理由と​配布戦略を​紹介します。
ryoppippi.com

この​libraryはgunshi packageとは​別に@gunshi/docsと​いう​ドキュメント専用packageを​提供しています。​Coding Agentはbun-typesと​同様に​この​ドキュメントを​参照する​ことで、gunshiの​使い方を​学習する​ことができます。​ また、bunx @gunshi/docsコマンドを​叩くと、CLAUDE.mdCursor Ruleを​自動生成してくれる​仕組みも​提供しています​()。

実際に​ gunshi の​ドキュメントを​参照させた​場合と​Web検索を​使った​場合を​比較すると​:

  • コストは​1.37USD -> 0.44 USD
  • 実装は​3:31 -> 0:40
  • 手戻りも​0回に!

などの​効果が​ありました。

GitHub - ryoppippi/gunshi-docs-skills-benchmark
Contribute to ryoppippi/gunshi-docs-skills-benchmark development by creating an account on GitHub.
GitHub

@gunshi/docsを​使った​場合

Web検索のみ​使用した​場合

byethrow#

また​同じく​筆者が​愛用している​新しい​Result型libraryであるbyethrow by Karibash も​同様に​ @praha/byethrow-docs と​いう​ドキュメント専用packageを​提供しています。​ byethrowは​以前からmcpを​提供していましたが、​docs packageの​方が​高速に​実装を​する​ことができます。

注意点#

この​方法を​採用する​際には​いく​つか​考慮すべき点が​あります。

packageサイズの​増加#

ドキュメントを​同梱する​ことで、​当然packageの​サイズは​増加します。​ただし、​Markdownファイルは​テキストベースであり、​画像などを​含めなければ​サイズの​増加は​限定的です。​また、@foo/docsのように​別packageと​して​提供する​場合は、​本体の​サイズには​影響しません。

メンテナンスコスト#

ドキュメントを​packageに​含める​場合、​リリースの​たびに​ドキュメントも​一緒に​更新・publishする​必要が​あります。​CIパイプラインを​整備する​ことで、​この​コストは​最小化できます。​ また​モノレポで​管理している​場合、​ドキュメントと​コードの​バージョンを​同期させるのが​容易です。

おわりに#

この​1年間、Context Engineeringと​いう​名前のもとで、​どのように​ドキュメントを​整備して、​LLMひいては​Coding Agentに​渡すかと​いう​ことが​広く​議論されてきました。​ 筆者の​中での​現在の​最適な​方法は、​ローカルに​ドキュメントを​落とし、​Coding Agentを​信頼して、​自由に​情報を​探索させる​ことだと​結論​づけています。

npm registryへの​ドキュメントpublishは、​それを​推し進める​ための​良い​解決策なのではないでしょうか。

P.S.#

僕は​gunshiと​いう​typescript製の​cliを​構築する​ための​ライブラリが​好きです(ccusageでも​sitemcpでも​使ってる)。
しかし、​この​ライブラリ、​めちゃくちゃ新しいので​LLMが​gunshiに​ついての​知識は​持っていません。​なので​vibe codingと​相性が​めっちゃ悪い。

そこで​ @kazupon
ryoppippi@ryoppippi
So actually, if I took a benchmark of how effective our Claude code skills for Gunshi are, the result is amazing:

With Skills
• 0.44 USD
• 40s for implementation
• 1:05 for implementation + debugging

Without Skills
• 1.37 USD
• 3:31 for implementation
• 3:52 for

Read 1 reply

面白い。​DaaP(Documents as a Package)と​言うのかな?​これ普及すれば​Context7の​MCPが​不要に​なるかもしれませんね。​デフォルトは​これに​なって​欲しいですし、​Context7ではなく​DeepWikiみたいな​もので​MCPを​消費したいですね。
ryoppippi@ryoppippi
新しい​記事!
ドキュメントを​npm packageと​して​publishしよう​ | blog | ryoppippi

ryoppippi.com/blog/2025-12-1…

Read more on X