ブログコンテンツ用のパーサ・レンダラを作ろうと思って開発環境を整えていたが、その間いろいろ思うことがあって簡単なCMSもどきを作ってみようと思い立った。 が何かこう画期的なアイデアが浮かんでいるわけでもない。単純にCMS的な何かを作ってみたくなったのだ。
今まではHTMLを直書きするか、[markdown]ベースで文書を書いて静的ブログジェネレータを使ってHTMLに変換していた。機能的におおむね問題はない。がなんとなく今まで行ってきたコンテンツを統合的に管理するサーバー上で動く仕組みを作りたくなった。
このようなものを作るのは私にとってはかなりハードルが高い。認証部分などは正直わからないところがたくさんあるし、そのセキュリティ・リスクの大きさから今まで避けてきたところである。が、ある程度セキュリティ対策に関してはネット上でまとまった情報があるし、それに従えば個人でもある程度セキュアなものが作れそうな気がしてきたのである。
もう一つ避けてきたものにUI作りがある。これも「MarkdownベースもしくはHTMLのエディットはVS Codeでやる」というポリシーで逃げてきたが、ここに関しても既存のライブラリを使えばそこそこ使えるものが自分でも作れるのではないかという気もしてきたのだ。
というわけで
- ログイン画面で認証
- ダッシュボードの表示
- コンテンツの編集
デプロイ
までできるものを作ろうと思った。
でこれを実現する方法を考えるために、いろいろなライブラリを動かして試してみたりしていた。結果「なんでもあり」のような巨大なライブラリは避けようと思った。今回のCMSはできるかぎりライブラリ依存をなくし小さくまとめ、堅牢性の高いものに仕上げることにしあえて選択しないことにしたのだ。
しかし巨大なライブラリは採用しそのセオリーに従うだけでセキュリティ・パフォーマンス・スケーラビリティ・高速なリリースがある程度担保されるものである。それに乗っからないのは相応のリスクを伴う。優秀なコントリビューターの知見を捨て、自分の知識と実装に頼る部分が増えるということだからね。
ということで[Gatsby.js]や[Next.js]のような壮大なものは使わないでおく。
そういうわけで今のところ
- アプリケーションのベースは[koa.js]
- アプリケーションのページおよびUIは[riot.js]
- データストアは[node-sqlcipher]
でやろうと思っている。koa.js自体そこそこおおきなライブラリだと思うが(笑)
今これのビルド・テスト・デプロイ環境を作っているところである。