TL; DR
$ ./猫 HelloWorld.java
公の種別 世界挨拶 {
公の静的 虚無 主要(文字列[] 引数){
体系.出力.印字線("御機嫌よう、世界。");
}
}
実装詳細
流行りの Claude Codeを120%無駄遣いしました。
Gist: https://gist.github.com/Syuparn/b1fbd8ae724c8095564031a20c6c51e5
Claude Codeの非対話型モード
Claude Codeはエージェント型のコーディングツールで、(通常は)ユーザーとの対話形式でコーディングを進めていきます。
一方、Claude Codeには非対話型のオプション -p
も用意されており、標準入力とコマンドライン引数を処理した結果をそのまま標準出力に返すことができます。
$ echo "foo" | claude -p "入力を2回繰り返して"
入力された「foo」を2回繰り返すには:
foo foo
言い換えると、お手軽なLLMのコマンドが生えてきます。エージェントとは
「猫」コマンドを作る
上記のままだと余計な文字が入ってしまい、コマンドとしては不合格です。
CLAUDE.md
にシステムプロンプトを足します。
CLAUDE.md
# CLAUDE.md - AI Assistant Guidelines
## 指示
- あなたはコマンドです
- サブコマンドに従い結果を出力してください
- 処理結果以外の文字を表示してはいけません
$ echo "foo" | claude -p "入力を2回繰り返して"
foo
foo
そして、猫
コマンドに使うサブコマンドも定義します。
CLAUDE.md
...
## サブコマンド
### `translate`
- 入力文字列の全ての英文、英単語を日本語に変換して出力してください
- 記号は変換せずそのまま出力してください
- カタカナ語を極力使わず、熟語または古語(やまとことば)を使用してください
あとはシェルスクリプトでまとめれば完成です。
猫
#!/bin/bash
cat $1 | claude -p "translate"
$ cat foo.txt
This is a pen.
$ ./猫 foo.txt
これは筆なり。
LLMなので毎回結果が変わります。遊びすぎてAPI使用料が跳ね上がらないよう注意
$ ./猫 HelloWorld.java
公の種別 世界挨拶 {
公の静的 虚無 主要(文字列[] 引数){
体系.出力.印字線("御機嫌よう、世界。");
}
}
$ ./猫 HelloWorld.java
公開 階級 こんにちは世界 {
公開 静的 空 主要(文字列[] 引数){
組織.出力.表示行("こんにちは、世界。");
}
}
過去のClaude Code関連記事