見出し画像

[技術スタック] 僕らがRustを使う理由

僕らがRustを使う理由

どうも、デジタルコマース事業部の小林です。僕たちデジタルコマース事業部では、バックエンド開発にRustを採用したプロダクトがあります。この先どうなるかは分かりませんが、現状では部署内のプログラミング言語をRustで統一する方向で進んでいます。個人的にはRustを気に入ってはいますが、チーム内で賛否もありますので、採用するに至った経緯やその後の使用感を記載していければと思います。

・なぜRustなのか?

デジタルコマース事業部では、Rustを採用する前は、C#かNode.jsでバックエンドの開発をしていました。理由としてはデジタルコマース事業部が出来る以前の金融ソリューション事業部ではC#を長らく使用してきた歴史があり、慣れ親しんだチームメンバーが多いことが挙げられると思います。また、Node.jsに関しては、フロントエンドエンジニアからエンジニアをスタートしてキャリアを積んでいるエンジニアが多く、シームレスに導入できるからでしょう。デジタルコマース事業部という部署が新設されて心機一転、技術スタックを見直した際に、「今から新しいことに挑戦するのだからこそ、エンジニアから見てイケている言語に変えよう」と思いました。

Node.jsはシングルスレットですので、将来パフォーマンスを気にするようなタイミングで厳しくなるのではないかと考え、却下しました。これに関しては、パフォーマンスで根を上げるような、うれしい悲鳴が起こりますようにという願掛けに近いです。そのほかに出た案としては、GoかRustでした。

条件としては、近年の風潮で静的型付け言語であることと、パフォーマンスと、イケているかでした。部署内では、双方イケているという認識でした。そのため、問題は静的型付け言語であることと、パフォーマンスです。パフォーマンスも双方定評があるように見受けられたのですが、当時Goは静的型付けであるにもかかわらず、ジェネリクスがありませんでした。ジェネリクスがない静的型付け言語は、苦労するのではないだろうかという結論になり、Rustを採用することに決めました。また、Rustを試してみて不都合が出た時に変更を容易にするために、マイクロサービスも導入しました。これが、デジタルコマース事業部でRustが採用された経緯です。

・Rustを採用してみたその後

デジタルコマース事業部で、Rustを採用して1年が経ちました。個人的には気に入っているのですが、今だに議論の際に槍玉に上がったりします。実際はどうなのかという点を記述していきます。

まず、チーム内で知識を共有しづらいです。原因は、Rustが単純にプログラミング言語として難しい分類の言語であることに起因していると思います。ある程度の経験のあるシニアエンジニアであれば、問題なく参入できますが、若手エンジニアが参入しようと思うと、障壁が高いです。コンパイルが通りません。所有権も独特です。そして、所有権含めて制約が強めですので、単純なREST APIやGraphQLサーバを構築するのに、しんどさを感じます。オーバースペックとも言えるかもしれません。

ただ、マイナス面ばかり挙げましたが、当然いいところもあります。制約が強いので、その制約をクリアした暁には、自然に綺麗なコードが出来上がっています。また、バグもかなりの確率で、未然に防げていると実感しています。また、Rustはコンパイル後はバイナリファイルになりますので、ランタイムが必要な他言語と比べて、Dockerコンテナのサイズが小さくなる傾向にあります。地味ですが、嬉しいポイントです。

ここまで悪い点もいい点も挙げていましたが、今でもRustを採用し、Rustで統一しようとしているのは、ひとえにRustへの愛といっても過言ではないかもしれません。Rustのコミュニティはどんどん盛り上がっていますし、この先どうなるかは分かりませんが、近々では安泰だと思いますので、当面はRustでコードを書いていきたいと思います!