clj-discover について
clj-discoverは、未知のJava APIやマクロを調べるClojure開発者向けのスキルです。コードを書く前に、Javaリフレクションとマクロ展開で情報を集める手順を案内します。
主な機能
- 01Java連携の前にClojureラッパーを検索
- 02breplのリフレクションでJavaクラスを調査
- 03コンストラクター、メソッド、戻り値型を記録
- 04マクロを1段階または完全に展開
活用シーン
- 01Clojureから未知のJavaクラスを調査
- 02マクロが生成するコードを確認
- 03マクロ内の隠れた呼び出しや副作用を発見
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ humorless/ clj-native-agent --skill clj-discoverインストール後、Claude Code で/clj-discoverを入力して読み込まれたか確認します。
同梱ファイルCHANGELOG.mdevals/evals.json
詳細
Clojure コードの調査
使い慣れていない API を使って Clojure コードを書くときは、コードを書く前に情報を集めてください。このスキルでは、Java 相互運用とマクロに重点を置きます。
このスキルを使うタイミング
以下に該当する場合は、必ずこのスキルを自動的に使ってください。
- Clojure から使用する Java クラスがある
- 動作が不明なマクロがある(展開結果を確認する必要がある)
ワークフロー:Java 相互運用
1. まず Clojure ラッパーを検索する
Java クラスを直接調べる前に、次のように尋ねます。
「
java.time.LocalDateTimeを使うところですね。Clojure ラッパーライブラリを検索しましょうか?ラッパーを使うと、より簡潔で慣用的な API を利用できることがよくあります。」
- 「ラッパーを検索する」 → WebSearch を使って
clojure wrapper for <library-name>を検索します - 「Java を直接使う」 → 以下の Java の調査に進みます
2. Java クラスを調査する
Java を直接使う場合は、brepl を使ってクラスをリフレクションします。
brepl <<'EOF'
(require '[clojure.reflect :as r])
; Get all public methods
(->> (r/reflect java.time.LocalDateTime)
:members
(filter #(instance? clojure.reflect.Method %))
(map :name)
sort)
EOF
調査結果を記録します。
- 使用可能なコンストラクターまたはファクトリーメソッド(例:
now()、of()) - 主なメソッドとその戻り値の型
- コードベースでよく使われるパターン
ワークフロー:マクロの調査
マクロを使うときは、展開して生成されるコードを確認します。
brepl <<'EOF'
(macroexpand-1 '(your-macro args)) ; expand one level
(macroexpand '(your-macro args)) ; fully expand
EOF
マクロ展開により、以下を確認できます。
- マクロを使ったときに実際に実行されるコード
- 隠れた関数呼び出しや副作用
- マクロが想定どおりに動作するかどうか
コメント
Markdown 対応