最近 Rust を勉強している
2022-01-30 公開
最近、Rust を勉強しています。 今は小さな CLI を作ってみているくらいですが、勉強へのモチベーションがそれなりにあり、次は WebAssembly も Rust で触ってみたいと思っている今日この頃です。
なぜ自分が Rust を学ぼうと思ったか、なぜここまでモチベーションを保てているのかを記録しておこうと思います。
今使っている言語
私が普段の業務で使っている言語は Ruby や JavaScript、TypeScript です。 Web 系企業に勤めるソフトウェアエンジニアの技術セットとしてはよくあるものだと思われます。 これらに加えて Go もある程度は書ける状態ではあると思っていますが、業務で使った経験がほぼない(コードを読んで小さい変更を加えたくらい)ため微妙なところです。
Ruby や JavaScript は標準ライブラリが充実していたり外部ライブラリが充実していたりするため、プライベートで何かスクリプトを書いたりアプリケーションサーバを書いてみたりするときにもそれらでサクッと書いてしまうことが多いです。 Web エンジニアを始めてそろそろ 4 年になりますが、最初に取得したスキルセットでずっと戦えてしまっている状態です。 メリットもある一方、システムプログラミング言語どころかあらゆる言語の習得に二の足を踏むような状況にそこそこ危機感を抱くようになっていました。
フロントエンドツールへの Rust の進出
私が Rust に興味を持ち始めたのは、Web フロントエンドツールへの Rust 進出が顕著に増え始めているのを目にしたことが大きいです。
Node.js のリプレイスプロジェクトである Deno において Rust がコア技術として活用されており、linter や formatter なども Rust で書かれています。 また、Next.js が babel から Rust で書かれたコンパイラである SWC に移行し始めたことは、Web フロントエンド界隈に大きな影響を与えたと感じています。
Advanced Features: Next.js Compiler | Next.js
Next.js のバージョンアップの差分に Rust のコードが含まれ始めたあたりに「あ、そろそろ少なくとも Rust が読めるようになっておかないと Web フロントエンドを主戦場に戦っている人間としてまずいかな」と思ったのが直接的なきっかけです。
Rust でシステムプログラミングに踏み込む
自分が計算機科学を修めていないことは結構なコンプレックスになっており、またコンプレックス以上に基礎力に影響すると考えているため、どこかでシステムプログラミングに踏み込んでみたいと考えていました。
基礎力という言葉は抽象的ではありますが、具体的に挙げれば計算量とかメモリ周りの理解とかですかね。 これらはソフトウェア開発における教養のように感じています。 なくても業務はこなせるが、深い議論になってくると知識や理解のなさが露呈してくる類いのものです。
私はこれまでこういった知識を雰囲気だけ理解し、つまり子細は置いておいて致命的な勘所だけを押さえて、なんとなく乗り切るといった対処をしてきました。 要は付け焼き刃なのですが、これで乗り切れる局面もあれば理解が足りなくて困ることも多々ありました。
Rust が Web フロントエンド領域に進出してきたのを見て、Web フロントエンドエンジニアとしての短期的な技術スタックの充実に加え、ソフトウェアエンジニアとしての長期的な技術力の向上のために Rust を通して様々なことを学びたい、と思うようになりました。
今のところの手応え
Rust を学ぶにあたっての最初の教材は The Book でしたが、ボリュームが多くてプライベートの隙間時間に読んでいくには多少骨が折れたため、まず何かしらを作ってみることにしました。 会社の Rustacean に手を動かして Rust を学ぶ教材を聞いたところ、Writing an OS in Rust をオススメされました。が、かなり初っ端で躓いてしまいこちらも一旦ストップしました。
次に試したのは Getting started - Command Line Applications in Rust でした。 15 分で CLI を作るという言葉通り、すぐに読み終わって CLI をひとつ作成することができました。 たまたま作りたい CLI のネタがあったので、完成を目指して Rust を学びつつ開発を進めています。
所有権システムは個人的には比較的理解しやすく、一方ポインタ周りがまだ理解するのに時間がかかっているような状態です。
エラーを例外ではなく Option
や Result
型で扱うようなデザインは好印象だなーというくらい。
ともあれ、結構楽しんで学べている気がします。
今後
CLI を作ったら WebAssembly にも触れてみたいと思っています。また、アルゴリズムの勉強がてら Rust での競プロにも挑戦してみたい気持ちがあります。 あれやこれや挑戦してみたいというモチベーション自体が久しぶりなので、これを維持しつつうまく活用していきたい所存です。