🔨ClojureScriptサーバサイド開発

🔖nodejsをつかった🔖ClojureScriptサーバサイド開発の話題.

コンパイラ

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

イベントループ実装

フロントエンドだと📝re-frameのようなフレームワークを活用するのがいい. バックエンドで簡易のイベントループを実装する.

.env ファイルを読む

dotenv をつかう.

$ npm i dotenv
(def dotenv (js/require "dotenv"))
(defn load-env [] (.config dotenv))

🔨ClojureScript Webフロントエンド開発

ClojureScriptはたいていWeb Frontendで利用されるがいちおう言語そのものとWeb開発のメモはわけておく.

テンプレートエンジン

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

Howto

ClojureScriptで静的サイトジェネレーター(SGG/JamStack)は可能か?

いいかえると GatsbyJs やNext.jsはつかえるか?

SGGのフレームワークは独自の最適化をしているためにshadow-cljsで完全に置き換えることが難しい. そのためコンポーネント単位でshadow-cljsで作成したものを部分的につかうというアプローチをしている人はいた(動かしたらウゴカなかった.. )

いちおうClojure製のSGGフレームワークはあるものの人気やメンテ状況がいまいち.