Clojure/ClojureScript入門者の方の学習の参考に(もしくは布教のために)、開発環境からコミュニティまでの基本的な情報をまとめてみました。
「参考」として挙げているのは個人的にオススメのブログ記事/スライドなどです。
随時更新していますが、コメントや編集リクエスト、Twitterなどで良さそうな情報源を教えていただければ反映していきます。
Clojure公式
-
Clojure
- 日本語版: clojure-site-ja
- GitHub
- 参考
- Rich Already Answered That!: Clojureの設計判断についてのRich Hickeyの発言まとめ
- matthiasn/talk-transcripts: Transcripts of Clojure-related talks: Clojure関連の有名な発表のトランスクリプト
- "Simple Made Easy" Made Easy
- Clojureと「Simple Made Easy」 - 紙箱
- シンプルさの必要性 | eed3si9n: "Simple Made Easy"と同様の趣旨の発表"Simplicity Matters"の日本語訳
- Clojureの世界観 - 紙箱
- キメるClojure高速開発 - Qiita
- Clojureの世界と実際のWeb開発
- 『データ指向プログラミング』: Clojure言語/コミュニティでの基本的な考え方を「データ指向プログラミング」(data-oriented programming)としてClojure言語を用いずJavaScriptコードとともに解説している書籍
- cf. ClojureCLR
- ClojureScript
開発環境
ビルドツール
-
Leiningen (
lein
コマンド): 定番のビルドツール(デファクトスタンダード) -
Boot (
boot
コマンド): 後発のビルドツール(特にClojureScript開発で使われることがある) -
Clojure CLI (
clj
&clojure
コマンド): 公式提供のCLIツール(関連ライブラリを組み合わせることでビルドツールとしても利用可能) - cf. rebel-readline: Leiningen, Boot, Clojure CLIから利用可能なREPL機能強化ツール
- ClojureScriptビルド/ホットリロードライブラリ
- shadow-cljs
- Figwheel
- Figwheel Main: Figwheelの後継ツール
- セルフホスト/スタンドアローンClojureScript REPL
- Clojureのサブセットに対するスクリプト実行環境(起動が極めて高速)
エディタプラグイン
Clojure開発全般
-
clojure-lsp: LSPに対応している任意のエディタで利用可能なClojureのlanguage server
-
Emacs/Spacemacs
- CIDER
- clojure-mode
- clj-refactor.el
- 参考
- Spacemacs: 便利にカスタマイズされたEmacs。デフォルトでEvilによるVimキーバインドサポートも手厚く、各種言語向けの設定一式を"layer"として追加することで素早く開発を始められる
-
IntelliJ IDEA
-
Visual Studio Code
-
Vim
Lisp編集支援
Common Lisp, Scheme, Clojure, Emacs LispなどLisp共通で利用可能なLisp (S式)編集支援ツール。
Emacsを使う大多数のLisperは以下のどれかのプラグインを利用していると思われる。
ParEdit
括弧とインデントを半自動で調整する、最も有名なプラグイン。
キーバインドを覚えるまで操作が難しいため初期の学習コストは高めだが、慣れると非常に効率良くS式を編集できる。
Emacs以外の主要なエディタでもプラグインが提供されていることがある。
- 参考
- Lispってどう書くの? - Qiita: ParEditによるLispの書き方紹介
- ParEdit チュートリアル: 最低限覚えておきたい操作のチュートリアル
- The Animated Guide to Paredit: アニメーション付きの操作ガイド
- Paredit Cheatsheet: チートシート
- Practical REPL-driven Development with Clojure (pp.44-60): ParEditの操作イメージ(Spacemacsの例)
Parinfer
インデント編集時(Indent mode)には括弧を、括弧編集時(Paren mode)にはインデントを自動調整する、比較的新しいプラグイン。
インデントがズレると対応する括弧の数も変わってしまうため独特の操作感に慣れる必要はあるが、操作自体は非常にシンプルなので学習コストは低い。
Emacs以外の主要なエディタでもプラグインが提供されていることが多い。
- 参考
- Practical REPL-driven Development with Clojure (pp.27-43): Parinferの操作イメージ(Atomの例)
Smartparens
ParEditに代わる新しい括弧編集支援プラグイン。
ParEdit互換のキーバインドに設定することもできる。
その他のプラグイン
rainbow-delimiters
ネストした括弧を対応するもの同士同じ色で順に色を変えて虹のように表示してくれるプラグイン。
稀に括弧の対応関係を目視する必要がある場合(※普段は上述のLisp編集支援プラグインに任せておけばそれほど困らない)に視覚的なヒントになるため便利。
Emacs以外の主要なエディタでも同種のプラグインが提供されていることがある。
aggressive-indent-mode
Emacsで利用可能な、インデントの自動調整機能を強化するプラグイン。
REPL駆動開発
Clojure/Lispの力を最大限に引き出すために、Clojurian/LisperはエディタとREPLをシームレスに連携させて高速にフィードバックを得ながら開発を進める「REPL駆動開発」(REPL-driven development)という開発スタイルを実践している。
- 参考
学習案内
書籍
入門者向け
- Living Clojure: 少ないページ数で簡潔にまとまった入門書
- Programming Clojure, Third Edition: Clojure 1.9の内容をカバーした最新の定番入門書
- *Programming Clojure (2nd edition): Clojure 1.3の内容をカバーした定番入門書(最近までに追加された機能transducers, clojure.specなどについては別途補う必要があるが内容は古くなっていない)
- Getting Clojure: Clojureの基本を背景となる設計思想や実際の利用例とともに丁寧に学べる、新しい入門書
- Clojure for the Brave and True: コミカルなイラストとくだけた文体を楽しみつつじっくり学べる、評価の高い入門書(Learn You a Haskell for Great Good! /『すごいHaskellたのしく学ぼう!』に近い趣?)
-
Functional Design: Principles, Patterns, and Practices, 1st edition: 関数型言語としてのClojureとオブジェクト指向言語としてのJavaを対比しながら関数型の設計について解説している
- 日本語版: 『関数型デザイン 原則、パターン、実践』
- Functional Programming Patterns in Scala and Clojure: ScalaとClojureによる関数型プログラミングの典型的なパターンがまとまった本
-
Seven Languages in Seven Weeks: Clojureのほかパラダイムや設計思想の異なる7種類の言語の世界に触れることができる良書
- 日本語版: 『7つの言語 7つの世界』
- 『3つのLisp 3つの世界』: 『7つの言語 7つの世界』にインスパイアされたLisp入門者向け同人誌(Clojure編ではClojureの基本から本格的なREST API開発まで簡単に学べる)
- 『Clojureに入門したら知っておきたい5つのこと』: Clojure入門後に早めに知っておきたい言語本体と標準ライブラリについての基礎知識をまとめた同人誌
- ClojureScript Unraveled: ClojureScriptのよくまとまった貴重な入門書
中級者向け
- Clojure Applied: Clojureの各種機能の実践的な活用方法が学べる良書
- The Joy of Clojure, Second Edition: Clojure言語について詳しく解説された良書
- Clojure: The Essential Reference: Clojure標準ライブラリの解説書
- Professional Clojure: Webアプリ開発を中心にClojure/ClojureScriptの実用について
- Microservices with Clojure: Pedestalを活用したマイクロサービス開発についての本
- Clojure High Performance Programming, Second Edition: ClojureやJVMのパフォーマンス周りについて
- Seven Concurrency Models in Seven Weeks: 様々な並行/並列プログラミングモデルに触れることができる良書(Clojureでの関数型プログラミングと並行プログラミングについても簡単に学べる)
- Clojure Reactive Programming: RxJava/RxJSやcore.asyncなどClojure/ClojureScriptでの並行/非同期プログラミングについて
-
DSLs in Action: DSL (domain-specific language)の設計/実装について(ClojureでのDSL構築手法についても簡単に学べる)
- 日本語版: 『実践プログラミングDSL』
- Mastering Clojure Macros: Clojureのマクロについて
チュートリアル
-
Clojure - Learn Clojure: Clojure公式ドキュメントのチュートリアル
- 日本語版: Clojure - Clojureを学ぼう
-
Clojure - Programming at the REPL: Clojure公式ドキュメントのREPLガイド
- 日本語版: Clojure - REPLでのプログラミング
- Clojure記事まとめ - Toyokumo Tech Blog: トヨクモ社によるClojure関連記事
- Practicalli: Clojure入門者向けの学習リソースが集まったサイト
- Clojure Koans: 禅の公案問答になぞらえて穴埋め問題に取り組む易しいチュートリアル
- 4clojure 4ever: 提示された振る舞いをするような関数を実装する問題集
- Clojure の日本語ガイド: ClojureのWeb開発チュートリアルなど入門者向けガイド
- ミニマリストのためのClojure REST API開発入門 - Qiita: 最小構成で実用的なREST APIをClojureで開発するためのチュートリアル
- ClojureのDuctとClojureScriptのre-frameによるREST API + SPA開発入門 - Qiita
- ScalaプログラマのためのClojure入門 - lagénorhynque: ドワンゴ社のScala研修テキストでScalaに入門済みのプログラマ向け(?)のチュートリアル
- Clojureに入門したら知っておきたいN個のこと - lagénorhynque: Clojure入門者が早めに知っておくと良いかもしれない+αの知識についてのまとめ
スタイルガイド
ライブラリ
検索
- cljdoc - documentation for Clojure/Script libraries
- The Clojure Toolbox
- ClojureWerkz
- razum2um/awesome-clojure: A curated list of awesome Clojure libraries and resources. Inspired by awesome-... stuff
- hantuzun/awesome-clojurescript: A community driven list of ClojureScript frameworks, libraries and wrappers.
リポジトリ
標準ライブラリ
- ClojureDocs
- Clojure API documentation
- Clojure - Cheatsheet
- Clojure Java API
- CLJS API
- ClojureScript Cheatsheet
- Closure Generated API Docs (Google Closure Library)
- deftype, defrecord and reify cf. 日本語版
- transducers cf. 日本語版
-
clojure.spec cf. 日本語版
- Clojure - clojure.spec - Rationale and Overview cf. 日本語版
- spec.alpha
- core.specs.alpha
- 関連サードパーティライブラリ
- 参考
準標準ライブラリ
Clojure本体には組み込まれていない標準ライブラリ(Clojure contrib)。
- Clojure - Contrib Libraries
-
Clojure - Contrib History: かつて
clojure.contrib.*
という名前空間にまとまっていたモノリシックなライブラリ群の分割後のリポジトリ案内 - core.async: Go言語のgoroutineとchannelに近い機構を提供する並行/非同期プログラミングライブラリ
- core.match: パターンマッチライブラリ
- test.check: HaskellのQuickCheckの影響を受けたプロパティベーステストライブラリ
- tools.namespace: 名前空間の依存関係に基づいたリロードなどを可能にするライブラリ
状態/ライフサイクル管理ライブラリ
状態を持つ(stateful)もののライフサイクルを管理し、リロード可能なREPL開発環境("reloaded workflow"; cf. Clojure Workflow Reloaded)を実現するためのライブラリ(一種のDI機構ともいえる)。
静的解析ツール
- cljstyle: フォーマッター
- cljfmt: フォーマッター
- clj-kondo: リンター
- Joker: リンター
- eastwood: リンター
- lein-bikeshed: リンター(Leiningenプラグイン)
- kibit: イディオムのチェック(Leiningenプラグイン)
- antq: ライブラリ更新のチェック
- lein-ancient: ライブラリ更新のチェック(Leiningenプラグイン)
- carve: デッドコード解析
- Yagni: デッドコード解析(Leiningenプラグイン)
- nvd-clojure: ライブラリの脆弱性チェック
- cloverage: テストカバレッジの計測
- 参考
(マイクロ)フレームワーク
正確にはフレームワークというよりもライブラリ(Clojureのエコシステムにおいてフルスタックフレームワークのようなものはほとんど存在しない)。
Webサーバサイド (Clojure)
-
Ring: HTTPサーバ抽象と関連ユーティリティ
-
ring-clojure/ring Wiki
- Concepts: Ringの基本概念について
- ring/SPEC.md: Ringの仕様について
-
ring-clojure/ring Wiki
-
Duct: Integrantを基礎としたマイクロフレームワーク
- duct-framework/duct Wiki
- duct-framework/docs: Documentation for Duct
- 構成要素: コア + 標準モジュール
- duct-framework/core: The core library of the Duct framework
- duct-framework/module.web: Duct module for running web applications
- duct-framework/module.ataraxy: Duct module and router for the Ataraxy routing library
- duct-framework/module.sql: Duct module for working with a SQL database
- duct-framework/module.cljs: Duct module for developing and compiling ClojureScript
- duct-framework/module.logging: Logging module for Duct
- サードパーティモジュール
- Modules · duct-framework/duct Wiki
- duct.module.pedestal: Pedestalを組み込むDuctモジュール
- duct.module.cambium: Cambiumを組み込むDuctモジュール
- Boolean Knot - Advancing Duct
- Boolean Knot - Building Web Services with Duct
- 参考
-
Pedestal: Ringの"middleware"とは異なるアーキテクチャ"interceptor"を採用したAPI/サービス開発ライブラリ
- GitHub
- com.cognitect/pedestal.vase: Pedestal + Datomicによるマイクロサービス開発ライブラリ
- pedestal-api: prismatic/schemaによる仕様記述でPedestalのAPIエンドポイントのSwagger仕様を生成可能にするライブラリ
- 参考
- Lacinia: ClojureによるGraphQL実装のひとつ
-
Protojure: Protocol BuffersとgRPCをサポートするライブラリ
- ドキュメント
- protojure/protoc-plugin: protocのClojureプラグイン
- protojure/google.protobuf: Protocol Buffersの型の実装
- protojure/lein-template: Leiningenテンプレート
- 参考
- Luminus: 定番ライブラリを便利に組み合わせて提供してくれるプロジェクトテンプレート(標準で組み込まれているmountは好みが分かれるところ)
- Arachne
Webフロントエンド (ClojureScript)
-
Reagent: シンプルで人気のReactラッパーライブラリ
- 参考
-
re-frame: Reactに対するReduxに相当するReagentの状態管理ライブラリ
- re-frame-template: Leiningenテンプレート
- re-frame-test: re-frameアプリのテスト支援ライブラリ
- re-frame-10x: re-frameアプリのデバッグ支援ライブラリ
- 参考
- Rum: 新興のReactラッパーライブラリ
- Om: 最初期に登場したReactラッパーライブラリ(後継の"Om Next"が開発中)
React Native (ClojureScript)
Node.js (ClojureScript)
コミュニティ
#clojure
, #clojurescript
などを付けてtweetすると、仕事や趣味でClojure/ClojureScriptを利用しているClojurianたちが素早く疑問や質問にも答えてくれる(はず)。
勉強会
- Shibuya.lisp - connpass: lispmeetup, lispteatime
- コワーキングスペースHaLake - connpass (Laketown.clj): Clojureもくもく会
- clj-ebisu - connpass
- clj-nakano - connpass
- Clojure Tokyo | Meetup
Qiita Advent Calendar
- Clojure Advent Calendar 2023
- Clojure Advent Calendar 2022
- Clojure Advent Calendar 2021
- Clojure Advent Calendar 2020
- Clojure Advent Calendar 2019
- Clojure Advent Calendar 2018
- Clojure Advent Calendar 2017
- Clojure Advent Calendar 2016
- Clojure Advent Calendar 2015
- Clojure Advent Calendar 2014
- Clojure Advent Calendar 2013
カンファレンス/イベント
Slack
- clojurians: 国内コミュニティでは最近ほとんど利用されていなさそう(英語で質問するならこちらかも?)
- shibuya-lisp: 国内最大のLisp系言語コミュニティShibuya.lispの公式Slack
メーリングリスト
ポッドキャスト
- Cognicast
- defn
- (dosync radio): 日本のClojuriansによるもの