Google Cloud with Clojure開発まとめ

🔖GCP🔖Clojure🔖ClojureScriptからつかうノウハウまとめ.

GCP with Clojure

💡Firebase/Google Cloud w/ Clojure

🔖Firebase

ref: https://github.com/tsu-nera/meigen-bot-firebase-clj

💡Google Cloud Run w/ Clojure

🔖Jib を利用してコンテナビルドする.

実際に検証した感触ではCloud Functionsよりも圧倒的に楽.

refs:

最近, jibbit というclojureからjibを扱いやすしたツールも登場(2022/01).

tag: 🔖GCR

💡Google Cloud Functions with Clojure

tags: 🔖GCF

基本方針としては, Google Cluud FunctionsのJava11ランタイムのページをみながら, functions-framework-java を利用する.

2022.01時点での注意点としては,

💡Google Cloud Firestore with Clojure

せっかくのClojureなのでClojure onlyで頑張らずにJavaやnode.jsの資産を活用する方向がいいかな…Java資産活用しないとリッチーヒッキーの開発モチベに反する🤔

ref: 📝Firebase Firestore

client libraries

firestore-cljがよくできている. これをベースに他のリポジトリを参考にカスタマイズするとよい.

💡Firestoreのスキーマレスのメリットとclojure.specの思想が反する

FirestoreはスキーマレスDBということを留意する.

すなわちこの特性によりスキーマ設計が不要というメリットを活かすならば動的言語であるClojureとの 相性がよくJSON Schema(Shcema/Malli/clojure.spce)は不要かもしれない.

ref. 📝Clojure spec

💡FirestoreのドキュメントデータベースパラダイムとClojureプロトコルの思想が反する

またFirestoreは ドキュメントデータベースということも注意.

ドキュメントのモデルを作成してプロトコルを定義する必要はあるのか?

なぜならばドキュメントはコレクションに格納されてその範囲内でのみシーケンス処理される.

プロトコルとは操作抽象であり異なるデータ型を同一IFでシーケンシャルに処理することが目的であるがそもそもドキュメントデータベースのパラダイムにおいては異なるドキュメントを同一コレクションに入れるのかという問題がある.

ref: defprotocol

タイムスタンプの扱い

調査中だがわかったところまで,

  • java.time.x でFirestoreにデータを送るとobjectとして格納される.
  • java.instantでFirestoreにデータを送るとobjectとして格納される.
  • java.data.utilでFirestoreにデータを送るとTimestampとして格納される.

なのでタイムスタンプ型として時刻を格納するときはjava.util.Dateで投げる.

GCP with ClojureScript

Cloud Functions with ClojureScript