🔨ClojureScriptサーバサイド開発
🔖nodejsをつかった🔖ClojureScriptサーバサイド開発の話題.
コンパイラ
- 🔧nbb: scriptingに特化
- 🔧shadow-cljs: fullstackからの派生.
with JSON
parse JSON
(def json "{\"foo\": 1, \"bar\": 2, \"baz\": [1,2,3]}")
(def a (.parse js/JSON json))
;;=> #js {:foo 1, :bar 2, :baz #js [1 2 3]}
string to keyword
(clojure.walk/keywordize-keys a)
https://cljs.github.io/api/clojure.walk/keywordize-keys
HTTP Client
- https://github.com/r0man/cljs-http
- https://github.com/lambdaisland/fetch
- https://github.com/babashka/nbb/blob/main/examples/node-fetch/example.cljs
- https://github.com/babashka/nbb/blob/main/examples/axios/example.cljs
イベントループ実装
フロントエンドだと📝re-frameのようなフレームワークを活用するのがいい. バックエンドで簡易のイベントループを実装する.
.env ファイルを読む
dotenv
をつかう.
$ npm i dotenv
(def dotenv (js/require "dotenv"))
(defn load-env [] (.config dotenv))
🔨ClojureScript Webフロントエンド開発
ClojureScriptはたいていWeb Frontendで利用されるがいちおう言語そのものとWeb開発のメモはわけておく.
- ClojureScritpそのものはこっち: 📁ClojureScript
- Web UIライブラリの reagentはこっち: 📝reagent
- Webフレームワークのre-frameはこっち: 📝re-frame
テンプレートエンジン
ref. Part4: テンプレートエンジンを使う — Clojure の日本語ガイド
ClojureScript with React
2022現在もいろんな選択肢がある. JS界隈は移り変わりが激しいので情報はすぐ古くなる.
- reagent
- Mimimalistic React Wrapper for ClojureScript
- ReactをベースにしたWeb開発用フレームワーク.
- Reactに対するReduxも提供.
- Om
- by CircleCI.
- React Interfaceだったけど2022現在開発止まってる(後継: fulcro)
- cf. reagentはシンプル, Omは多機能.
- Rum
- こちらもReact WrapperのWeb開発フレームワーク.
- rumを触ってみる - Qiita
- READMEの日本語要約.
Howto
ClojureScriptで静的サイトジェネレーター(SGG/JamStack)は可能か?
いいかえると GatsbyJs やNext.jsはつかえるか?
SGGのフレームワークは独自の最適化をしているためにshadow-cljsで完全に置き換えることが難しい. そのためコンポーネント単位でshadow-cljsで作成したものを部分的につかうというアプローチをしている人はいた(動かしたらウゴカなかった.. )
- Creating websites with shadow-cljs + gatsby or next.js - shadow-cljs - ClojureVerse
- sample repositries
いちおうClojure製のSGGフレームワークはあるものの人気やメンテ状況がいまいち.