いにしえのホームページを Clojure の最先端技術で作りたい
このブログを運用し始めて約1か月。
さっそくアクセスカウンターとか掲示板とか欲しくなってきた。 Twitter もやめてしまったのでどうせならマイクロポストの機能もほしい。
そんな感じの個人サイトを Clojure で作ろうかと思っている。
サーバーサイド開発について
サーバーサイドを今まで Duct
で作ってきたのだが、別に Duct 使わなくてもいいんじゃないかなと思えてきた。 Duct
は defmethod
を活用して関数を疎結合にしてシステムを構築するのだが、
- 別に毎回そこまで疎結合じゃなくてもいい
- むしろコードジャンプできなくて辛い
- edn ファイルでシステムを定義するのが面倒くさい
というあたりでやめようと思った。
ではどうするかというと、他の言語でよくやるのと同じようにオートリロードできれば十分だと思う。 調べたら ring にはそもそもオートリロードの機能がある ようなのでこれを使いたい。 ring-refresh というライブラリもあるし。 使い方
あとは reitit とかでルーティングを作れば十分だろう。 DB コネクションの各ファイルへの受け渡しだけなんとかする。 必要であればここだけ core.async の pipeline とかで疎結合にしておけばいい。
参考: Clojure + core.async による非同期&並列プロセスの世界
フロントエンド開発について
今まで shadow-cljs + helix 構成を試してきてこれはかなり快適だったのだが、新しい試みとして Squint を試したいと思っている。
Squint は ClojureScript を js に変換するコンパイラで、最大の特徴として Java に依存していない!!。 つまり TypeScript のコンパイラなどと同様に package.json に書いておけば、それだけで cljs を js に変換できる。 shadow-cljs がやりたかったことをもう一歩進めた感じだ。 Squint は js に寄っているが、もっと標準的な ClojureScript に寄せた Cherry というのもある。 Squint を使えば React や Vite などのフロントエンド開発で使われるツールを そのまま使うことができる。examples/vite-react
これらは babashka の作成者として有名な borkdude さんの作品で、彼は本当にこういうものを作るのが上手だしまめに作っていると思う。 尊敬しかない。
Squint はまだ本番環境で使うことを推奨していないようだけど、まぁ個人サイトのフロントエンドを作るくらいなら後で Squint の仕様が変わったとしてもあまり困らない気がする。 Clojure コミュニティの Slack 見ているとすでに結構出来上がっている雰囲気あるし。
Squint は CljureScript の歴史を変える可能性があるプロダクトだと思っているので
ぜひとも試してみたい。 今までの ClojureScript では面倒になる Promise
,
async/await
まわりも楽にかけそうだし、 jsx
との統合も魅力的だ。 一方で nREPL
や Macros も使える。
最高では~!
一覧に戻る