本日はAWESOME-COPILOTの技術調査枠です。
AWESOME-COPILOTのドキュメントを読みながら実際に操作を試して記事に残します。
今回はカスタムインストラクションの一つClojure Development Instructionsについてです。
Clojure Development Instructions
Clojure Development InstructionsはClojure開発におけるClojure固有のコーディングパターン、インライン定義の使用、コードブロックテンプレート、名前空間の扱い方です。
ClojureはLisp系言語、関数型、データ指向という特徴を持つ言語です。
以下のページからClojure Development Instructionsのインストールボタンをクリックして取得します。
github.com
インストールボタンを押してClojure Development Instructionsをダウンロードします。
すると.github/instructions配下にインストラクションがインストールされます。

インストールしたインストラクションはCopilotの動作に自動的に適用されます。
このインストラクションを読み込むと、CopilotはClojureの関数型スタイル、REPL中心の開発、データ指向設計を前提にコード生成を行います。
具体的にはCopilotは以下のような行動をとります。
構造編集(Structural Editing)を前提にする
Clojureでは括弧構造が重要です。
そのためCopilotは例えば次のような構造編集ツールを使う前提で提案します。
- Insert Top Level Form
- Replace Top Level Form
- Append Code
- Create Clojure File
REPL主導開発(REPL-Driven Development)
Clojureの特徴はREPLでコードを試しながら開発することです。
Copilotは次の開発スタイルを推奨します。
- 小さく試す
- 結果を確認
- 徐々に組み立てる
つまり一度に大きなコードを書かないというスタイルです。
データ指向設計
Clojureではデータ構造を中心に設計することが重要です。
Copilotは次のようなコードを提案します。
{:user/id 1
:user/name "Alice"}
関数型プログラミング
Copilotは以下のClojureらしい関数型スタイルを提案します。
- pure functions
- immutable data
- side effects を減らす
例えば以下のようなコードです。
(defn add [a b] (+ a b))
destructuring を活用
Clojureでは以下を実現するためdestructuringが重要です。
- 可読性向上
- データアクセス簡潔
Copilotは次のようなコードを推奨します。
(defn greet [{:keys [name]}]
(str "Hello " name))
threading macrosの活用
Clojureでは以下のthreading macrosを使います。
-> ->>
Copilot は次のようなコードを提案します。
(-> user
:name
clojure.string/upper-case)これによりネストを減らし読みやすくすることができます。
データ構造はシンプルに
Clojureでは深いネストを避ける設計が推奨されます。
Copilotは以下を念頭に提案を行います。
- flat data structure
- simple map
- namespaced keywords
例えば以下のようなコードです。
{:user/name "Alice"
:user/email "a@example.com"}
逐次的に問題を解く
Copilotは問題を小さなステップに分解して解決します。
Copilotは以下の対話的開発を提案します。
- 小さな式を書く
- REPLで実行
- 結果確認
- 次のステップ