私の経歴は一部を除いて基本的にRubyで埋め尽くされている。

一時期Node.JSに乗り換えようとJavaScriptやTypeScriptばかり書いていた時期もあった。 それからReactに疲れて、Rails 7に出会ってからはかれこれずっとRubyばかり書いている。

私にとってRubyそのものはとても楽しい言語である。 Railsでデザインパターンを学ぶことでモチベーションは保てている。 Railsの動向を追っている限りでは、以前ほどRubyやRailsに対して悲観的には思わなくなった。

しかし相変わらず世の中の関心はNext.jsを始めとしたTypeScriptに支配されているように感じる。 そしてその対向勢力として最近存在感を増しているのはGoとかRustのような静的型言語である。 その他にPythonやJava、PHPなどは無視できないけれども個人的にこれらの言語はまた別のカテゴリである。

Rubyの世界ではあまりGoやRustといった言語は縁がないのかと思ったけれども、まずはthrusterが衝撃的だった。

このプロジェクトそのものはRailsをHTTP2対応できるなどのような文言が並んでいるが、個人的にはそれよりもRubyGemsでGoで記述されているアプリケーションが配布できるのかということだった。 ソースを見てみるとRubyのバージョンは定義されているものの、それ以外は全くない。 あらかじめコマンド形式のバイナリをパスに追加するくらいのものである。 こんな裏技のようなプログラムの配布ができるのかと思っていた。

ただこの発見はちょうど3ヶ月くらい前にWritebookの投稿を書いたときのものであって、その投稿は特に理由はないが現在非公開にしている。

それからつい数日前に興味深い投稿をみつけた。

この投稿はそれぞれJavaScriptで記述されているサーバーを部分的にRustで置き換えていくと、パフォーマンスにどういった影響を与えるかという内容について記載されている。

Wasmを使うか、ネイティブ関数を使うかはまだ決めていないけれども、これまでずっと自分には縁がないと思っていたRustを学習したいと思うきっかけにはなった。

基本的に新しい言語を学ぶということは文法そのものの習得もそうなのだが、自分の開発に関する慣習を大きく変える必要があるので基本的によほどのことがない限りはしない。 見た印象だけでは以前ほど文法に対して難しさは感じなくなりつつあるけれども、部分的に新しい言語を取り入れることが果たして自分にとってどれだけ可能性があるのかは興味がある。

個人的にはRustが今後どういった発展をしていくかはわからないが、やはりWeb開発においてはRailsが最も効率がよいものだと信じている。 というのもNext.jsでAPIを作るときによくセットで紹介されるPrismaではあるが、個人的にはやはりSQLよりもRailsのエコシステムでORMを書くほうが最も効率的だと思う。

Railsが依然として弱いのはそれ以外の時間のかかる処理、例えば先程の投稿にもあるようなQRコードなどの画像生成の分野はRubyやC、C++などで頑張るよりもRustにしたい。 私の場合バックグラウンド処理でやることは大抵UnixのコマンドをPopenのラッパーを書くよりも、Rustの関数やWasmでのやり取りのほうがより洗練されているとは思う。

漠然とした気持ちは今後このブログに残していくとして、具体的な方法に関しては本家のほうのブログに残せていけたらと思っている。