MRが楽しい

MRやVRについて学習したことを書き残す

AWESOME-COPILOTのドキュメントを読む その55(Clojure Development Instructions)

本日は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は次の開発スタイルを推奨します。

  1. 小さく試す
  2. 結果を確認
  3. 徐々に組み立てる

つまり一度に大きなコードを書かないというスタイルです。

データ指向設計

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は以下の対話的開発を提案します。

  1. 小さな式を書く
  2. REPLで実行
  3. 結果確認
  4. 次のステップ