project.cljは、Clojureプロジェクトの依存関係や設定を管理するためのプロジェクトファイルです。Maven(pom.xml)に相当するものです。
基本的な構造は以下のようになります:
(defproject プロジェクト名 "バージョン" :description "プロジェクトの説明" :dependencies [[org.clojure/clojure "バージョン"]] :main メイン名前空間)
例:
(defproject xxx "0.1.0-SNAPSHOT" :description "説明" :dependencies [[org.clojure/clojure "1.11.1"]] :main xxx.xxx)
lein new app fileserver
README.mdファイルや、.gitignoreファイルやtestディレクトリなどを作ってくれる
上記のことを知らずに、作ってしまった記事が以下である。学習順序を間違えたか。。。
clojureの実行するための書き方が決まっている感じがするが、なぜかAIで生成する際にいつも、同じことでつまづいているの(何度かトライアンドエラーして自己解決はしてくれるが、またか!ってなる)で、コード生成させる。テキストコードを生成できればいいので、なんでもいいがbashのスクリプトとかで作ってみることにする。
#!/bin/bash # 使用方法を表示する関数 function show_usage() { echo "使用方法: new_clj <名前空間> <ファイル名> <プロジェクトの説明>" echo "" echo "引数:" echo " 名前空間 - Clojureの名前空間" echo " ファイル名 - 作成するClojureファイルの名前" echo " プロジェクトの説明 - プロジェクトの説明文" echo "" echo "例:" echo " new_clj myapp core \"My First Clojure App\"" } # Clojureプロジェクトを新規作成する関数 # 引数: # $1: 名前空間 # $2: clojureのコードを書くファイル名 # $3: プロジェクトの説明 function new_clj() { # 引数の数をチェック if [ $# -ne 3 ]; then echo "エラー: 引数の数が不正です。3つの引数が必要です。" echo "" show_usage return 1 fi # 引数の取得 namespace=$1 filename=$2 summary=$3 # 引数の妥当性チェック if [ -z "$namespace" ] || [ -z "$filename" ] || [ -z "$summary" ]; then echo "エラー: 空の引数は指定できません。" echo "" show_usage return 1 fi # ファイル・ディレクトリ設定 ext="clj" src_dir="$namespace/src/$namespace" pathname="$src_dir/$filename.$ext" filepath=${filename//-/_} # ハイフンをアンダースコアに置換 projectFile="$namespace/project.clj" # ディレクトリ構造の作成 if ! mkdir -p "$src_dir"; then echo "エラー: ディレクトリの作成に失敗しました。" return 1 fi # project.clj の生成 if [ ! -f "$projectFile" ]; then cat << EOF > "$projectFile" (defproject $namespace "0.1.0-SNAPSHOT" :description "$summary" :dependencies [[org.clojure/clojure "1.11.1"]] :main $namespace.$filepath) EOF else echo "警告: project.clj は既に存在します。スキップします。" fi # Clojureソースファイルの生成 if [ ! -f "$pathname" ]; then cat << EOF > "$pathname" (ns $namespace.$filepath (:gen-class)) (defn sample-command1 "サンプルコマンド1の実装" [args] (println "sample-command1が実行されました") (println "引数:" args)) (defn sample-command2 "サンプルコマンド2の実装" [args] (println "sample-command2が実行されました") (println "引数:" args)) (defn usage "使用方法を表示" [] (println "使用方法: lein run <command> [args...]") (println "") (println "利用可能なコマンド:") (println " sample-command1 - サンプルコマンド1の説明") (println " sample-command2 - サンプルコマンド2の説明")) (defn -main "アプリケーションのエントリーポイント" [& args] (if (empty? args) (usage) (let [command (first args) command-args (rest args)] (case command "sample-command1" (sample-command1 command-args) "sample-command2" (sample-command2 command-args) (do (println "エラー: 不明なコマンドです:" command) (println "") (usage)))))) EOF echo "Clojureソースファイルを生成しました: $pathname" else echo "警告: Clojureソースファイル ($pathname) は既に存在します。スキップします。" fi # セットアップ手順の表示 cat << EOF プロジェクトの作成が完了しました! # セットアップ手順 0. Git Bashで日本語を使用する場合 powershell -command "chcp 65001" 1. Javaのセットアップ set JAVA_HOME=C:\\Program Files\\Java\\jdk-17 2. プロジェクトディレクトリへ移動 cd $namespace 3. 依存関係の解決(初回のみ) lein.bat deps 4. プロジェクトの実行 lein.bat run EOF return 0 }
スクリプトを実行する前にLeiningenがインストールされている必要があります
lein.batがあるディレクトリを環境変数のPATHに加える必要があります。
windows11で動作確認したやり方です。macの場合は .batという書き方市内と思います。
clojureでwindowsのgit bashを使う場合。UTF-8を使う場合は以下を1度実行する必要があった。ネットで紹介されている方法やAIに提案された方法を6,7個ほどいろいろためしたが、これ以外は文字化けが直らなかった。
git bashで、文字化けの修正がうまくいったコマンド。git bash上から、いったんpowershellを呼ぶという方法です。
powershell -command "chcp 65001"