会社にRustを導入しようとしている話①
こんにちは、株式会社POLでエンジニアをしている高橋です。
最近、POLでRustを利用したサービス開発を進めています。以前、ミズノさんの記事でRustを導入していると紹介がありましたが、今回はRustの導入についてもう少し具体的に紹介しようと思います。
何回かに分けて紹介して行く予定で、今回はRustを導入する経緯やモチベーション、導入予定のサービスや技術構成について紹介します。
Rustを導入する経緯、モチベーション
Rustを導入する経緯の1つとして、現状のサービスの分割を行い研究者プラットフォームとしての利用に耐えうるシステム構成に移行していきたいという動機があります。
株式会社POLは、研究者の可能性を最大化するプラットフォームの想像をビジョンに掲げて新卒就活サービスを運営している会社なのですが、創設初期から現在まで新卒就活サービスのスピーディな発展を第一に注力してきたこともあり、ビジョンに掲げているような就活も含めた様々なサービスを開発するにはシステム全体の設計から見直す必要があります。
この課題を解決するために一部機能のマイクロサービス化を現在進めており、マイクロサービス化する際の言語としてRustを採用しています。
マイクロサービス化するだけであれば現状採用しているJavaやKotlinのような言語でも良いのですが、
1. エンジニアとしてのトライ
どの言語でも選択すれば導入はできるので、個人的に将来性がありそうなRustを採用してみたかった。
2. なるべく既存システムのコードを踏襲しない一例を作りたかった
JVM言語を採用すると既存の構成に引っ張られそうで、研究者プラットフォームのためのシステム構成をゼロベースで検討し構築したかった。特にスケジュールが押してくると既存のシステムのソースコードレベルでなんとかする甘えを僕自身がやってしまいそうで、それを阻止するために非JVMにしておきたい。
3. ミズノさんがRust推しだった
新技術を採用する上で同じ技術を推してくれる仲間の存在は非常に大きく、ミズノさんが以前から「Rustいいですよ」と推していたので。
上記の理由からRustの導入に踏み切っています。
もちろん、上記以外にも、最近Rustという言語が注目されているのでRustを採用すればエンジニアにとって魅力的な会社になる、メモリを意識したパフォーマンスの良い開発の安全性をコンパイル時点で担保してくれる、といった一般的な理由もあって、今回Rustを採用しています。
Rustを導入するサービス
以下2つのサービスでRustを導入予定です。
研究室サーチ、研究関連データgRPCサービス
去年の夏に研究室サーチという、研究室を色々な方が探せるサービスをベータリリースしているのですが、正式リリースに向けたリニューアル開発にRustを採用しています。
現在はJavaによるRESTFul APIが稼働しているのですが、リニューアルに伴いAsync-grapqhlベースでのGraphQLサーバーに切り替え予定です。
また、研究者、研究室、大学、論文といった、私達が研究関連データと定義しているデータについては、gRPCサーバーを構築して様々なサービスから取得するような構成に変更予定です。gRPCサーバーはtonicというライブラリを採用して構築しています。
以下、リニューアル後のシステムの構成図です。
※まだ構築中なので構成を変更する可能性があります。
認証基盤サービス
認証方式を見直しており、認証情報を自社DBに持つのではなくAmazon Cognitoベースでのでの切り替えを進めています。また、フロントエンドとAmazon Cognitoをつなぐ認証サーバーをActix Webを使って構築中です。(こちらは私ではなくゲバさんが進めているので、ゲバさんの記事にご期待ください)
最後に
以上、POLでRustの導入についての紹介でした。次回以降で、各レイヤーのコード構成について紹介していく予定です。
今年からPOLではRustに注力していく予定です。Rustを書きたいエンジニアを募集中ですので、興味のある方は気軽にエントリください。