概要
- Clojure を使って静的サイトジェネレーターを開発した経験談
- Common Lisp や Scheme と比較したClojureの利点を解説
- データ構造や標準ライブラリの 実用性 を評価
- Clojure の課題点や戸惑いについても言及
- 今後もClojureを使い続ける意向を表明
Clojureを使った静的サイトジェネレーター開発の所感
- Clojure でWebサイトを生成する静的サイトジェネレーターを自作
- 新しい言語習得時の恒例プロジェクトとして実施
- Common Lisp や Scheme と比較しながらClojureの特徴を分析
Clojureの気に入った点
- Common Lisp よりも統一感のある言語設計
- Common Lispは多数のLispの妥協の産物で、命名やパラダイムが一貫しない印象
- Clojureは Rich Hickey 個人のビジョンが反映され、言語全体がまとまっている
- seq抽象化 のおかげで、どのシーケンス型でも同じ関数(nthなど)が使える利便性
- マッピングやイコール判定も統一された関数で対応可能
- Scheme よりも“バッテリー同梱”の実用性
- Schemeは仕様が小さく、機能が最小限(エラー処理やファイル操作、ハッシュマップも非搭載)
- ClojureはJVM上で動作し、 標準ライブラリ やエコシステムが充実
- 趣味プログラマーとしても使いやすい環境
- データ構造 のエルゴノミクス
- Lisp系の「すべてはリスト」思想が好きだが、実用上はベクタやハッシュマップも重要
- Clojureはリスト・ベクタ・ハッシュマップ・セットを 第一級市民 として扱う
- どの型もコア言語で平等にサポートされ、実用的
Clojureでつまずいた点
- 構文(シンタックス)が多い
- Lispの魅力はシンプルな括弧構文にあるが、Clojureは ()、[]、{}、#{} と多様
- シンボル名の .や/ に特別な意味がある
- アンコート(~)や`と,のシンメトリーが崩れている点が初見では違和感
- ただし、慣れてくると使いやすさも実感
- Java知識の不足
- ClojureはJVM上で動作し、Javaとの連携(インタープ)が重要
- Java自体には詳しくないが、Clojureの範囲内では大きな問題はなし
- とはいえ、今後Javaエコシステムへの理解も深めたい気持ち
今後のClojure活用方針
- Clojure は楽しく、使いやすい言語
- babashka などのプロジェクトでスクリプト用途にも最適
- Javaエコシステムの知見も積極的に吸収したい
- 静的サイトジェネレーター以外にも、 Project Euler などでClojureの経験を拡張予定
- コード共有用フレンドコード: 2304741_7MlSvxoUOKyle32IQjYszcAAsJDCVji1
機能的パラダイムは最初はちょっと不安だけど、問題解決が…違った感じになるよね。個人的には、大規模システム設計にはOOPが一番直感的だと思ってるけど、それは私の意見ね。Clojureではほとんどのモデルが特に良いパフォーマンスを発揮しないけど、OpenAIのモデルは言語の力をフルに活用してる。主観的には、なんか性格に合ってる気がするな。