このブログのバックエンド(ブログエンジンというんですかねこういうの?)をRustですべて書き換えました。
そもそもこのブログ自体が新しい勉強したい技術の実験用という意味合いが強いので、今の所毎年1回ぐらいのペースで書き換えていっています。

今までの技術スタック

古いものから順番にあげると

  1. Node.js(Express/MongoDB)
  2. Python(Flask/PostgreSQL)
  3. Dart(Aqueduct/PostgreSQL)
  4. OCaml(Opium/PostgreSQL)
  5. Rust(Rocket/Diesel/PostgreSQL) <--- NEW!

という感じです。
一番最初のNode.jsの頃から、APIや機能自体はほとんど変わっていなくて、基本的にAPIインタフェースそのままにバックエンドのみ書き換えてきた、という感じです。

なぜRust

OCamlは最高にイカした言語で大好きなのですが、やはりどうしてもユーザ数が少ないために起きる諸問題を抱えてしまっています。(ドキュメント少ない、ライブラリ少ない、etc)

基本的にVMを挟まず、高速に動作して静的型付けなプログラミング言語でモダンな言語機能が使いたい、ということで色々プログラミング言語を試してみた結果、OCamlにたどり着いたのですが、OCaml以外となるとRustしか残っていなかった、という消極的な理由です。

なぜ積極的に勉強したいと思えなかったかと言うと、やはり単純にRustの学習が辛い、これです。
実際基本的なCRUD機能を持つアプリケーションをRustで書いたわけですが、未だに所有権、ライフタイムが理解できていません。

ただ言い方を返ると、基本的な個人レベルのブログシステムであれば、別に所有権とかライフタイムで躓くことは実はほぼ無い、とも言えると思います。

消去法的に始めたRustですが、使えば使うほど「お?これは良いものだぞ?」と思え始めました。
なにより型!最高です。
そしてOCamlライクに定義できる構造体とmatch式が鬼に金棒感が有ってとても素敵です。

Rustというとパフォーマンスが凄く良くて、所有権とライフタイムによってリソースの管理が安全に〜という説明がよくされますが、ユーザ数が多くてモダンな言語機能があるイケてる言語、というシンプルな理由でも十分なほど素晴らしい言語/開発環境だと思います。

速度

リリースビルドしたものであれば、Apache Groovy/Grailsと同じか少し早いかな、ぐらいな感じです。
OCaml/Opiumの速度について

あまりチューニングなどもしていないのであくまで参考程度です。

今後

サーバサイドは恐らくしばらくRustで色々いじるかな、という感じになると思います。
今後はフロントエンドをElmRescriptで書き直す予定です。
いずれにせよ、SSRを廃止するので、本当にクライアントサイドのみのSPAでどれだけ検索エンジンボットがクロールしてくれるかを試してみたいと思っています。