はじめに
七尾百合子さん、お誕生日 95日目 おめでとうございます! nikkieです。
Claude Codeでvibe codingしたログ(あるいは感想戦?)を残します。
#aimeetup もう一品Vibe Codingして参戦準備万端。でもごめんなさい、遅刻です
— nikkie(にっきー) / にっP (@ftnext) 2025年6月20日
% uvx --with llm-claude-code llm -m claude-code こんにちは
こんにちは!How can I help you with your code today?https://t.co/6gSG6CRa2g
目次
- はじめに
- 目次
- 題材:simonw/llmプラグインでClaude Codeを呼ぶ
- CLAUDE.md作成
- 徐々に見出したClaude Code tips
- 雑感:最後の1ピースは人間の知識で補助
- 終わりに
題材:simonw/llmプラグインでClaude Codeを呼ぶ
Claude CodeはSDK(Python・TypeScript)から呼び出せます!
そこで、simonw/llmプラグインとしてllm -m claude-codeのように呼び出すのを思い付きました。
なお、これはclaude --print相当なので、新たな価値は何も生まれていないと思います(1 == 1)
ClaudeのProプラン(APIキーも登録済み)で、Claude 4 Sonnetを使っています。
CLAUDE.md作成
はてなブックマークで見かけていた記事より、CLAUDE.mdを作ります。
新規でプロジェクトを立ち上げるとき、いきなりコーディングを依頼するのではなく、まずは要件を整理するのが有効です。
ブラウザ上でClaude 4 Opusに指示しました。
simonw/llm のプラグインとして Claude Code SDK を使ってClaude Codeにpromptを送ってみたいです。 実装方法について調査し、仕様の不明点は私に質問して、CLAUDE.mdをまず作ってください
Opusの検索 + 私への質問を経て、以下のCLAUDE.mdが作成されました。
https://github.com/ftnext/llm-claude-code/blob/af97952851c03fd6a0d55cc1ea17ef87fc7113c8/CLAUDE.md
これをClaude Codeにぶち込みます!
なお、Claude Codeの作業の区切りでCLAUDE.mdを更新するように依頼しています(このファイルは編集許可を求める必要はないと緩めました)
徐々に見出したClaude Code tips
今回はSonnetにコードを書かせ、私の手出しは最小限を心がけました(Enterで許可するだけのマシーン)
以下の記事に残したようにAnthropicによる動画から得た知識を、実際に体得して(=手で覚えて)いきました
!でコマンド実行
Claude Codeには > のプロンプトの後に日本語で指示を入力していたのですが、「実装した結果を動かしてみよう」と ! の存在を思い出します。
Sonnetのコード生成が止まる -> !でコマンド実行(uv run llm -m claude-code こんにちは) -> エラーを伝えて対応依頼 のループを回しました。
ふりかえると、私がコマンド実行することで、作業が完了したかを確認していたわけですね。
Ctrl + R の出力展開、便利
!でコマンドを実行すると、エラーがあったときに畳まれて出力されます。
これの展開をCtrl + Rでできることに気づきました。
Ctrl + Rはトグルになっていて、連打で出力をカパカパできます
Ctrl + Rで私がエラーメッセージを確認して指示を出すこともありました
雑感:最後の1ピースは人間の知識で補助
simonw/llmのプラグインは数個作った状態、Claude CodeのSDKは初めての状態で取り組みました。
OpusによるCLAUDE.mdの作成では、Claude Code SDKまわりの仕様は一時的にスコープアウトしています。
「将来の拡張」として書いてくれました
プラグイン作成の知識が活きたのはprompt変数の型ですね。
Sonnetはpromptが文字列と思い込んでいましたが、prompt.promptが文字列と伝えたことが完成の最後の1ピースでした。
simonw/llmの知識が十分にはなさそうだったので、CLAUDE.mdのそれぞれのリンク先も読むように指示が出せていないんだろうなと思います。
なお、CLAUDE.mdにはccというエイリアスの記載があるのですが、これは無視されたので(上で紹介した ! + Ctrl + R で)「漏れてるから実装するよう」伝えました。
袋小路にハマっていたので、aliases引数を案内する必要がありました:
https://llm.datasette.io/en/stable/plugins/advanced-model-plugins.html#async-models
Sonnetはclaude-code-sdkというモジュール名を思い込みで間違えてましたね。
作業完了コマンドでエラーが送出されるので、「依存するモジュールが違う」ことも指摘しています。
OpusにCLAUDE.mdをセルフダメ出し+修正してもいいのかもしれません
終わりに
Claude Codeで、Sonnetを運転席に座らせてllm-claude-code v0.0.1を実装しました。
今回は私がつきっきりで、変更やコマンドを承認したり、様子を見ながら助け舟を出したりしました。
ペアプロっぽいと思います。
ただ実装内容は全く理解していなくて、完全に雰囲気です(例えば、テストコードは何をテストしてるんだろう?)
まあ聞けば分かるし、いっか!
今回使った範囲では完全自律とは言い難いのですが、それでもスキマ時間を捻出して1時間程度で完了しました。
私一人では絶対にできなかった速さだと思います。
これが運転席にはAIが座る時代...!