Clojureを書くにあたって、Leiningenを調べて、触って、みようと思いまして。
- DeepL先生に和訳をお願いしたところ、ライニンゲンと出てきました。どういう意味なんだろう?読み方は合っているのか?
- (Leiningenはちと長いんで、leinと呼ぼうと思います)
- ちなみに、環境はこんな感じです。
vagrant@ubuntu2204:~$ lein --version Leiningen 2.9.10 on Java 17.0.5 OpenJDK 64-Bit Server VM
- 公式サイトを読みながらどんなものなのか知っていきたいですね。チュートリアルを読むといいぞ、とあるので、そちらを参照してみます。
- https://codeberg.org/leiningen/leiningen/src/branch/stable/doc/TUTORIAL.md -(codebergって始めて見たな)
- leinが提供する機能はこんなかんじ。
- https://codeberg.org/leiningen/leiningen/src/branch/stable/doc/TUTORIAL.md#tutorial
もしあなたがJavaの世界から来たのなら、Leiningenは「MavenとAntを苦もなく結びつけたもの」だと考えることができるでしょう。RubyやPythonの人たちにとっては、LeiningenはRubyGems/Bundler/Rakeとpip/Fabricを1つのツールにまとめたものです。 https://codeberg.org/leiningen/leiningen/src/branch/stable/doc/TUTORIAL.md
- ざっと見、JavaでいうMaven、Gradleあたりの立ち位置なのがわかりますね。REPLはClojure独自の機能といったところ。maven形式のpomも生成できるのか。
- lein関係ないですが、MavenCentralにあたるものがClojarsという場所らしいですね。
- https://clojars.org/
- leinが依存関係を解決する場合、ここを見に行くんでしょうきっと。
メタデータはプロジェクトのルート・ディレクトリにある
project.clj
というファイルに保存され、Leiningen に以下のようなことを伝えることができます。 https://codeberg.org/leiningen/leiningen/src/branch/stable/doc/TUTORIAL.md
- Mavenのpom.xmlに該当するものが、project.cljのようですね。
lein new
コマンドでプロジェクトを新規生成できるようです。引数は色々とありますが、テンプレートと名前はよく使いそうです。テンプレートはどのようなプロジェクトを作成するかを指定するもので、デフォルトはライブラリに適したものになるらしいです。- 呼び方はこんな感じ。
lein new $TEMPLATE_NAME $PROJECT_NAME
- 作ってみます。引数が一つの場合には、テンプレート名ではなく、プロジェクト名とみなされるようです。
vagrant@ubuntu2204:~/source$ lein new temp Generating a project called temp based on the 'default' template. The default template is intended for library projects, not applications. To see other templates (app, plugin, etc), try `lein help new`. vagrant@ubuntu2204:~/source$ tree -F -a --dirsfirst temp temp/ ├── doc/ │ └── intro.md ├── resources/ ├── src/ │ └── temp/ │ └── core.clj ├── test/ │ └── temp/ │ └── core_test.clj ├── CHANGELOG.md ├── .gitignore ├── .hgignore ├── LICENSE ├── project.clj └── README.md
- デフォルトのproject.cljです。
(defproject temp "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0" :url "https://www.eclipse.org/legal/epl-2.0/"} :dependencies [[org.clojure/clojure "1.11.1"]] :repl-options {:init-ns temp.core})