--- description: 'Clojureプロジェクトで作業する際にエージェントが忘れやすい、または間違いやすいこと。' applyTo: '**/*.clj*,**/*.bb' --- # Clojure メモリ ## 関数定義(`defn`)におけるdocstringの配置 docstringはシンボル/関数名の後、引数ベクターの前に配置します。 ### ❌ 間違い: ```clojure (defn my-function [arg1 arg2] "This function does something." ;; function body ) ``` ### ✅ 正しい: ```clojure (defn my-function "This function does something." [arg1 arg2] ;; function body ) ``` ## Clojureファイルの編集 ファイルを編集する前にreplでソリューションを開発することを忘れないでください。しかし、インタラクティブなプログラマーであっても、時々ファイルを編集します。その際は、`replace_top_level_form`や`insert_top_level_form`のような構造的編集ツールを使用します。**これらのツールを使用する前に必ず指示書を読んでください**。ファイルに追加する場合は、組み込み編集ツールを使用してください。 ### 使用する前に関数を定義する Clojureコンパイラーは、関数が使用される前に定義されている必要があります。`declare`を使用する(時には必要ですが、ほとんどの場合`declare`は単なる手抜きです)よりも、関数を正しい順序で配置することを優先してください。 ## Clojureファイルの作成 `create_file`ツールを使用して空のコンテンツ `""`でファイルを作成します。 #### Clojure名前空間とファイル名の規則: **重要**: Clojureでは、名前空間名はkebab-caseを使用し、ファイル名はsnake_caseを使用します。例えば: - 名前空間: `my.project.multi-word-namespace` - ファイル名: `my/project/multi_word_namespace.clj(s|c)` 名前空間名のダッシュは対応するファイル名では常にアンダースコアに変換してください。 ### 空のファイルを作成してからコンテンツを追加 ファイルを安全/予測可能に作成してコンテンツを追加するには、以下のプロセスに従ってください: 1. **常に最初に空のファイルを作成** - 空のコンテンツ `""`で`create_file`を使用 2. 作成されたファイルの内容を読む(デフォルトコンテンツが追加されている可能性があります) 3. **構造的編集ツールを使用**してファイルを編集 ## REPLでの名前空間リロード ファイル編集後にREPLで作業する場合、変更がREPLに反映されるように名前空間をリロードする必要があります。 ```clojure ;; 指定された名前空間のみをリロード (require 'my.namespace :reload) ``` ## ブラケットバランスが崩れている場合 例えば、問題ツールやClojureコンパイラーがブラケットが不足している、またはブラケットバランスが崩れていることを示すものについて文句を言っている状況では: * 修正を試みる代わりに、**人間の入力を要求するツールを使用してガイダンス/ヘルプを求めてください。** ## stdinからの読み取り stdinからの読み取り(例:`(read-line)`)はVS Codeの入力ボックスでユーザーにプロンプトを表示します。stdinから読み取る可能性のあるコードを評価する際はこのことを認識してください。 ### Babashkaでは、stdinからの読み取りがreplをブロックします Babashkaのnreplサーバーはまだstdinプロトコルをサポートしていません。Babashka replでstdinから読み取るコードの評価は避けてください。 **REPLがハングした場合**: ユーザーにREPLの再起動を求めてください。 ## 楽しいインタラクティブプログラミング 作業でREPLを優先することを忘れないでください。ユーザーはあなたが評価するものを見ていないことを心に留めてください。結果も同様です。評価するものと返ってくるものについて、チャットでユーザーとコミュニケーションを取ってください。