「Rust」 で API 開発にチャレンジしてみた
Rust 未経験者が集まったチームで 、API の開発にチャレンジしました。開始当初の取り組みや、約 1 年開発を続けてきたチームの現在の状況をお伝えします!
はじめまして、パイオニアのSaaS Technology Center(以下、STC)サービス開発部の小林(祐)です。
2021 年 9 月に入社し、主に Web アプリケーションのバックエンド開発を担当しています。
パイオニアではバックエンドの開発言語に Rust を採用しています。詳細は以下の note をご参照ください。
Rust は、所有権やライフタイムなど独自の概念が存在するため、他言語と比べると難しいイメージがあるかもしれません。そこで本記事では、パイオニアで Rust を採用したプロジェクトの API 開発をどのように進めているのか、についてご紹介します。
経験者 0 人のチームでスタート
私が所属するチームは、それまで業務で Rust を使ったことがあるエンジニアが 0 人であったため、全メンバーがイチから Rust をキャッチアップする必要がありました。
私自身は、パイオニアに転職する前までプライベートで Rust を多少触ったことがある程度で、パイオニアへの転職が決まったことを契機に、本格的に Rust を学習し始めた、という状態でした。そのため、他のメンバーに Rust を教えられる程のスキルはありませんでした。
そんな Rust 素人しかいないチームの状況でしたが、以下のような取り組みを通じて、チームメンバーの基礎スキル固めを進めていきました。
rustlings を自学習し、社内ハンズオンで復習する
雛形の GitHub リポジトリを利用して、サンプル API を実装する
いざ実装へ
座学やサンプル実装だけでは得られる実装力に限度があったので、基礎スキル固めが完了した後はすぐに事業用システムの API 開発に着手しました。
事業用システムの API はサンプル API よりロジックが複雑であり、エラーハンドリングや共通処理など、一緒に考慮しなければならないことも格段に増えます。
Rust の経験が浅いメンバーだけでは、これらを考慮しつつ初めから品質も担保した実装を行うことは難しく、開始当初は非常に不安でした。
ただ幸い、パイオニア STC内の別チーム技術推進室には Rust のプログラミング経験者が在籍しています。
経験者からの細かいコードレビューや、困った時にはすぐにペアプログラミング・モブプログラミングを行うことで、実践を通して少しずつ Rust の実装ノウハウを習得し、日々成長することができました。
更なる実装力向上に向けた取り組み
学習期間を含め約 1 年間 、Rust で開発を進めてきた結果、今では開始当初からいたメンバーの Rust の習熟度が上がりました。
言語自体の難しさに対するハードルは解消し、順調に API の開発を進めることができています。
一方で、今後チームに加わる新規参入者へのサポートも見越し、私のチームでは以下の取り組みを行っています。
新たに導入したクレート(※1) や実装パターンについて実装者に説明してもらう
スプリントの終わりにコードレビューでの指摘の振り返りを行う
上記で共有された知見を、各々のチームで独自に作成した Rust API 実装ガイドラインに反映する
※1 : Rust における実行バイナリまたはライブラリのこと。ここではライブラリのことを指す。
実際に Rust で開発してみて
Rust で苦労するところ
個人的な感想としては、Rust 経験者のサポートがないとコンパイルを通すだけでも難しい場合がある、と感じました。言語自体の難易度が高いため、未経験者だけでゼロからスタートすると、つまづいた時に苦労します。
また、他言語と比べると日本語の事例解説が少なかったり、まだ IaaS/PaaS の公式 SDK が未提供だったりします。(例えば、AWS の SDK は開発者プレビュー状態)
まだまだ Web アプリケーション開発の環境は成熟しきっていないためか、調査やライブラリ選定には時間を要する場面もあります。
Rust の良いところ
一方で、Rust は以下のような充実したエコシステムによって快適に開発が進められます。今ではちょっとしたスクリプトなども全て Rust で書くくらい、Rust なしでは生きていけない身体になりました。
公式ドキュメントが丁寧でわかりやすい
Cargo(※2) でパッケージ管理だけでなくビルドやテスト実行もできる
言語標準のフォーマッターと静的解析があるため、自身で準備・設定しなくて良い
rust-analyzer の補完やコンパイル前のエラー指摘により円滑にコーディングできる
※2: Rust のビルドシステム兼パッケージマネージャのこと。
おわりに
パイオニアでは 、Rust でのバックエンド開発を支える体制が整いつつあります。Rust を採用したプロジェクトも少しずつ増えてきており、今後更なる Rust エンジニアが必要になるであろう状況です。
Rust でバックエンド開発を進めたいエンジニアのご応募をお待ちしております!