【2022最新】Rustのおすすめフレームワークを徹底比較
Rustは近年人気を集めているプログラミング言語で、CやC++の代替を目指しているものです。プログラミング言語の人気が高まるにつれて、新しくフレームワークが公開されたり注目されたりしています。今回はRustで開発されたフレームワークのうち、おすすめを6種類紹介します。
actix-web
参照:Actix
世界的に利用数が多い
Rustのフレームワークでも世界的に活用されているものです。日本のみならず海外でも積極的に採用されていて、多くの情報が手に入ります。フレームワークの活用には情報収集が重要となるため、情報収集しやすいものは利用のハードルが下がるのです。
特に注目してもらいたいのは、日本語の情報が多く見つかる点です。フレームワークによっては英語の情報しか見つからず、情報収集に困ってしまいます。actix-webならそのような状況を避けられるでしょう。
豊富な機能
Rustで実装されているWebフレームワークはいくつもありますが、その中でも特に機能性が多いものです。一般的な機能であればactix-webで完結すると考えましょう。
フレームワークの機能数が少ないと、自分でスクラッチする部分が増えてしまいます。それではフレームワークを導入するメリットが薄れてしまうため、機能数の多さは重要なポイントです。
サンプルが豊富
actix-webはサンプルが豊富なフレームワークです。シンプルなサンプルはもちろん、実践的な複雑なサンプルも数多く公開されています。有志が公開しているサンプルもあり、探せば多くが手に入ります。
ドキュメントがあればある程度は把握できますが、サンプルがあるとより理解が深まります。他のフレームワークよりもサンプルが多く、その点はactix-webの魅力だと考えましょう。
Tauri
参照:Build smaller, faster, and more secure desktop applications with a web frontend | Tauri Apps
軽量なフレームワーク
Rustで開発されているフレームワークの中でも軽量なものです。フレームワークが軽量であるかどうかはアプリケーションの動作速度に影響するため、Tauriのように軽量なフレームワークであればアプリケーションも軽量であることが期待できます。
フレームワークが軽量であるのは、ソースコードがシンプルに抑えられているからです。Rustはそもそもシンプルに記載できるプログラミング言語であり、Rustはその特徴を最大限活かして軽量化しています。
レンダリングエンジンの組み込みが不要
OSに搭載されているWebViewの機能を利用することでレンダリングエンジンが不要になっています。そのような設計になっていないフレームワークは別途レンダリングエンジンが必要ですが、Tauriならばその必要はありません。
レンダリングエンジンが不要であることで、フレームワークの構成がシンプルになっています。また、実装にあたってレンダリングを意識する必要がないため、ソースコードを簡潔に記述可能です。
クロスプラットフォームに対応
クロスプラットフォームに対応した設計であるため、OS間でユーザインターフェースの実装を変更する必要がありません。それぞれのOSで適切なものが呼び出され、自動的に必要な処理がなされます。
プラットフォームによるユーザーインターフェースの違いは、自走するエンジニアの負担になりやすい部分です。Tauriはこの点を解決できているため、エンジニアにやさしいフレームワークといえます。
Axum
参照:axum – Rust
シンプルな設計
フレームワークとしてシンプルな設計を採用しているため、Rustの知識があるエンジニアならばスムーズに理解できるはずです。Axum独自の考え方はありますが、基本的にはRustの理解があれば差し支えないレベルです。
実装にあたってフレームワーク独自のルールが多いと、習得するまでに時間を要してしまいます。しかし、Axumはそのような問題が発生しないように、可能な限りシンプルな設計やコーディングが意識されています。
エラーハンドリングが容易
システムを実装するにあたって重要となるのがエラーハンドリングです。Axumでもエラーハンドリングは重要となり、シンプルにエラーハンドリングができるように考えられています。
Javaなどエラーハンドリングが得意なプログラミング言語はいくつもありますが、ものによっては複雑な文法で書かなければなりません。Axumはそのような問題が起きないように考えられていて、シンプルなソースコードでエラーハンドリングできます。
モジュールベースの開発
依存関係を最小限に抑えるため、モジュールベースの設計が求められています。アプリケーションの開発ではいくつもの「部品」を検討する必要があり、Axumはモジュール単位での実装が基本です。
なお、Axumではモジュールを実質的にDIコンテナと見なしています。本来はコンテナの実装に専用のライブラリを導入しますが、実質的にはコンテナとして扱えるため、モジュールを中心とした設計を心がけましょう。
Rocket
マイクロフレームワーク
Rustのフレームワークでもマイクロフレームワークに分類されるものです。最小限の機能だけが実装されているフレームワークであり、必要な部分は自分で開発しなければなりません。
マイクロフレームワークであることから、ソースコードは少なく動作は軽量です。ただ、ソースコードが少ないフレームワークはノートが軽量であることが当たり前であるため、この点は特筆すべきポイントとはいえません。
シンプルなWebAPIサーバを実装
RustでシンプルなWebサーバーを実装したい時はRocketが適しています。RustでもWebサーバーの実装が可能であり、最小限の機能だけでよければRocketを活用することで簡単に実装可能です。
一般的にWebサーバーの実装には専門的な知識が必要となり、手間もかかってしまうものです。Rocketは最小限の機能とはなってしまいますが、簡単かつ短時間で構築できる魅力があります。
複雑な開発には不適
マイクロフレームワークをカスタマイズして、複雑なアプリケーションを実装する場合があります。機能が多すぎるフレームワークを利用すると制約が増えてしまうため、マイクロフレームワークを利用するのです。
ただ、Rocketは拡張を前提として開発されたものではないため、このような使い方は理想的ではありません。カスタマイズを中心としたいならば、Rustの別フレームワークを選択しましょう。
warp
高い生産性を意識
warpはプログラムの再利用を意識することで、高い生産性を実現したフレームワークです。プログラム開発では再利用の意識が重要であり、フレームワークによって考え方が異なっています。
また、後ほどご説明するとおり、warpにはTerminalを利用可能です。エンジニアでTerminalの使い方に慣れているならば様々なものがスムーズに操作でき、これも生産性を高める要因となっています
Terminalベースの操作性
今の時代には珍しくTerminalを中心とした操作性のフレームワークです。現在はグラフィカルなUIが多用されますが、warpではあえてTerminalを採用しています。
ただ、グラフィカルなUIが広がっているとはいえども、エンジニアならばTerminalを利用する機会は多々あります。そのため、使用感に慣れてしまえばグラフィカルなものよりスムーズに操作できるでしょう。
今後の発展に期待
まだまだ新しいフレームワークであり、これからの発展に期待できます。Rustで開発されるフレームワークは種類が増えているため、warpもその中の一つだと考えるようにしましょう。独自の方向性から一定の支持を集めるフレームワークであるため、大きく伸びると考えられます。
Tide
ミニマムなフレームワーク
Tideはマイクロフレームワークとはいえないものの、機能数が最小限に抑えられたフレームワークです。ミニマムなフレームワークといえるものであり、シンプルに利用したりエンジニアが必要に応じて開発したりできます。
Rustには上記でご説明したようなマイクロフレームワークがあるため、それらと比較すると機能は豊富です。とはいえ、ミニマムなフレームワークには間違いなく、エンジニアが適切に使いこなさなければシンプルすぎるWebアプリケーションとなってしまいます。
非同期処理に対応
Rustで実装されているフレームワークの中でも非同期処理に対応しています。全てのフレームワークで非同期処理ができるわけではないため、非同期処理ができるという点では強みを持つものです。
非同期処理に対応しているかどうかは、ユーザーインターフェースの設計を大きく左右します。Tideは他のフレームワークでは実現が難しい、画面更新を伴わないデータ処理などができると考えましょう。
歴史は浅いが情報は豊富
2018年に公開された比較的新しいフレームワークですが、エンジニアの方が多く情報が豊富です。新しいフレームワークはどうしても情報源が偏ってしまう傾向にありますが、Tideはその心配がありません。
また、マイクロフレームワークであることから、有志がいくつものカスタマイズを公開しています。情報源が英語になってしまうものはありますが、情報の多さは魅力的です。
Rustフレームワークのトレンド
RustのフレームワークのトレンドについてGoogle Trendsを利用して調査してみると、結果は以下の通りです。
どのフレームワークも多く検索されていて、近年はRocketが多く検索されているようです。ただ、これは宇宙に打ち上げるロケットと誤って検索されていることも多いようで、実質的には大きな差がないと考えられます。
Rustの開発現場ではactix-webが重宝されていますが、検索数としては少し減っている状況です。これは利用者数が増え、検索がある程度落ち着いたからでしょう。どのフレームワークが極端に人気ということはなく、必要に応じてそれぞれが利用されていると考えるべきです。
Rustの難易度
数あるプログラミング言語の中でもRustは難易度が高いものに分類されます。CやC++の代替を目指しているプログラミング言語であり、CPUやメモリーに近い言語であるからです。一般的にメモリーなどを意識しなければならないプログラミング言語は難しいとされていて、Rustはそのようなプログラミング言語に該当します。
また、Rustはプログラミング言語を高速に処理してメモリ安全性を保証するために、プログラミング言語として数多くのルールが存在します。近年活用されているプログラミング言語は、このような文法面でのルールが少ないものもあり、そのような言語と比較するとどうしても難易度の高さを感じてしまうでしょう。
ただ、Rustのようなプログラミング言語を実現するためには、複雑なルールを設けなければならないことも事実です。事実は受け止めて習得してしまえば他のプログラミング言語と大差ないと感じられるため、ある程度は割り切って習得できるようチャレンジしてみましょう。
Rustの将来性
GoogleやMicrosoft、AmazonがRustを採用しているということもあり、世界的に注目を集めているプログラミング言語です。案件数も増えてエンジニアの需要も高まっている状況で、将来性の明るいプログラミング言語だと考えてよいでしょう。これからRustを習得できるように学習を開始しても遅くありません。
比較的新しいプログラミング言語であり、Rustを十分に扱えるエンジニアは限られています。ただ、エンジニアが少々不足しているにも関わらず、案件数は増えている状況で、多くの企業がRustを採用し始めている状況です。この状況がいつまで続くかは誰にも分かりませんが、IT業界の大手企業が積極的に採用している限りは将来性が明るいでしょう。
なお、現時点ではエンジニアは数が限られていますが、近年は新しくRustを習得する人が増えています。Rustは進化を続けているプログラミング言語であり定期的に新機能もリリースされているため、これから習得するならば他のエンジニアに負けない強みを持つようにすべきです。
まとめ
Rustのフレームワークをご紹介しました。機能数が多いフレームワークからマイクロフレームワークまで紹介したため、必要に応じて適切なものを選択できるようになりましょう。
基本的にフレームワークを利用すると開発効率が高まりますが、誤ったものを選択すると利便性が下がります。特にRustは文法などが厳しいプログラミング言語であり、選択を誤ると実装しにくくなってしまいます。どのフレームワークが適切であるか見極めて、最善のものを利用するようにすべきです。