RustによるWebアプリ開発を解説

RustはCやC++の問題点を解決するためのプログラミング言語として2015年に安定版が公開されました。現在、活用されているプログラミング言語の中でも比較的新しいものに分類されています。ただ、急激に人気を集めているプログラミング言語でもあります。
このRustはいくつかの用途に利用できますが、それらの中でも注目を集めているのがWebアプリ開発です。今回はRustを活用したWebアプリ開発にフォーカスして解説します。
この記事の目次
Webアプリ開発に利用されるRustとは
Rustは2006年に開発が開始された、オープンソースのプログラミング言語です。プログラミング言語は歴史の長いものが多く利用されていますが、Rustについては新しいプログラミング言語に分類されます。新しいプログラミングだからこそ、人気が高まっていると考えてよいでしょう。
プログラミングの根本的な考え方として「Cの代替を目指す」ということがあり、実際CやC++の問題点を解決しやすいプログラミング言語となっています。Microsoft社もRustを高く評価していて、これから新しいプログラミング言語として活用される可能性が高い状況です。
また、エンジニアなどに対して行われる調査である「Stack Overflow Developer Survey 2022」ではRustが「the most loved language(最も愛される言語)」に選ばれています。エンジニアからも愛され、需要も高まっているプログラミング言語といえるのです。
なぜWebアプリにRustが適しているのか
新しいプログラミング言語であることから「なぜWebアプリ開発にRustを利用するのか」という疑問を持つ人は多いでしょう。続いてはRustがWebアプリ開発に適している理由を解説します。
高速な処理を実現しやすいから
Rustの特徴として「処理が高速なプログラミング言語である」ということが挙げられます。CやC++が高速であるように、これらの代替を目指すRustも高速なプログラミング言語なのです。近年の高級言語は処理が遅くなりがちであるため、この点はメリットです。
また、実装内容によってはCやC++よりも高速な処理を実現できます。これはこれらのプログラミング言語が抱える課題を解決できるプログラミング言語であるからです。速度面の障壁となる課題が解決されていることで、全体としてWebアプリ開発に適したプログラミング言語となっています。
WebAssemblyの中では需要が高いから
WebAssemblyはブラウザからアセンブリを実行する技術を指します。今まではこれを実行するための命令を作ることは難しかったのですが、Rustなどのプログラミング言語を活用することで実装が可能です。
ポータブルなスタックマシンとなっているため、構文解析と実行がスムーズです。似た処理ができるプログラミング言語にはJavaScriptが存在していますが、それと比較してもスムーズに実行できる仕組みと考えましょう。
このような処理ができるプログラミング言語は複数ありますが、高速であることで需要が高まっています。特段の理由がなければ、需要の高いプログラミング言語を選択したほうが安心です。
Webアプリ開発におけるRustの用途
Webアプリ開発とはいえども、多くの用途が考えられます。それらの中でもどのような用途に適用できるのか解説します。
Webアプリのバックエンド開発
基本的にWebアプリ開発でRustを採用する際は、バックエンド開発に利用します。バックエンドとはWebサーバーやデータベースで動作する部分を指し、RustはWebサーバーの中で動作するプログラムを開発可能です。ユーザーが直接目にする部分ではなく、サーバー内で処理する部分を実装するプログラミング言語だと考えましょう。
ただ、ここで注意してもらいたいことはPHPなどのようにバックエンド開発を完結できるものではないことです。Rustで完結させることも不可能ではありませんが、実装の工数を鑑みると現実的ではありません。部分的にRustを導入することで、処理を高速化することを目的としています。
Webアプリのバックエンドは「1つのプログラミング言語で開発されている」と思われがちですが、実際には複数の言語が利用されているものです。それらのひとつとしてRustが採用されているだけであり、WebアプリのバックエンドをすべてRustで実装するわけではありません。
Webアプリのフロントエンド開発
積極的におすすめできる実装ではありませんが、Rustでフロントエンドの実装も可能です。フロントエンドはバックエンドに対して、ユーザーの目に見える部分だと考えましょう。Webアプリのボタンを表示する処理などがこれに該当します。
RustはWeb系に特化したプログラミング言語ではないため、基本的にはフロントエンド開発には適していません。ただ、フロントエンドのプログラミング言語であるJavaScriptなどと組み合わせることで、フロントエンド開発にも利用できます。使いこなせると画面表示を高速化できるのです。
とはいえ、現時点ではRustをフロントエンド開発に採用するメリットは限られています。負担のほうが大きくなりがちであるため、フロントエンド開発「にも」利用できるということだけ把握しておきましょう。
RustでWebアプリを開発するメリット
RustでWebアプリを開発するメリットは以下のとおりです。
Web開発にRustを採用することで、リソースを効率よく活用できるメリットがあります。これによって、少ないリソースでもシステムを快適に動作させられます。限られたリソースで効率よくシステムを稼働させたいと考えているならば、Rustを採用するメリットがあるでしょう。
また、消費するリソースが減ることにより、システムを稼働させるためのサーバーリソースを抑制できるメリットもあります。例えば、サーバーのスペックを抑えてもシステムを快適に稼働させられるのです。これにより、クラウドサービスのスペック低減や仮想サーバーの割り当てリソース削減につながります。
もちろん、どの程度のリソース低減が期待できるかは実装する内容によって異なります。もともと、非常に高速なWebアプリはRustに置き換えても大差ない可能性があるため、ここは注意しなければなりません。
モダンシステムを実装できる
プログラミング言語の中でも新しいものであるため「モダンプログラミング」に対応しています。「モダン」の定義は曖昧ですが、効率よく堅牢なシステムを実装できる仕組みだと考えましょう。
今までのプログラミング言語では、堅牢なシステムを実装しようとすると多くのソースコードが必要でした。プログラミング言語として実装されているわけではないため、半ば無理やりに実装する必要があったからです。これはエンジニアの負担を高め、また維持や保守の効率を下げてしまうものでした。
しかし、Rustは最初からこのような設計に対応しているため、ソースコードが複雑になりにくくなっています。堅牢なシステム開発においてもシンプルなソースコードとなり、Webアプリの保守性を高めてくれるメリットがあるのです。
RustでWebアプリを開発するデメリット
RustでWebアプリを開発するデメリットは以下のとおりです。
ベストプラクティスが明確ではない
高速な処理が期待できるためRustは人気ではありますが、まだ新しいプログラミング言語でベストプラクティスが明確ではありません。何かしら課題が発生した場合には自分自身でベストプラクティスを検討する必要があります。時には自力でベストプラクティスにたどりつけないかもしれません。
RustではなくJavaやC系のプログラミング言語ならば、利用数が多くベストプラクティスも概ね提唱されています。このベストプラクティスに沿って実装すれば、基本的にはプログラミング言語としての問題を抱えることなく実装できるのです。
もちろん、ベストプラクティスを検討して実装することは「開発の楽しさ」という考え方もあるでしょう。ただ、第三者に提供するWebアプリなど信頼性を重要視する場合にはおすすめできません。
エコシステムが完成していない
近年は状況が改善しつつありますが、プログラミング言語としてのエコシステムが完成していません。他のプログラミング言語ではライブラリなどが存在していて当たり前のような機能でも自分で実装しなければならないことがあります。
例えば、外部システムのAPIにRust向けのライブラリが存在していない場合、自分たちで実装しなければなりません。APIの仕様を踏まえてRustで通信できるように実装し、その取得内容を処理できるようにもします。公式で提供されている場合と比較して大きな負担が生じてしまうのです。
これからRustが多用されるようになれば、ライブラリなども提供数が増えてくるでしょう。しかし、現時点ではRust向けに提供されていることは少なく、これがWebアプリ開発の工数増加に繋がってしまうことがあります。
RustでのWebアプリ開発に利用するフレームワーク
RustでWebアプリ開発するならば、ネイティブに開発するよりもフレームワークを利用すべきです。純粋に実装すべき部分が多く、自力ですべて対応しようとすると長い時間を要してしまいます。
Rocket
RustのWebアプリフレームワークとして人気が高いものです。Tokio Runtimeで動作するように設計されていて、効率よくWebアプリを実装できるようになっています。
フレームワークはいくつか存在していますが、それらの中でもRocketはシンプルなソースコードが特徴です。複雑なフレームワークも存在していますが、それらと比較すると記述量が少なく短時間でWeb開発を済ませられます。
ただ、シンプルな実装を重視したフレームワークであるため、複雑な実装を実現したい場合には不向きかもしれません。その場合は以下に紹介する機能数の多いフレームワークを利用しましょう。
Actix Web
こちらもTokio Runtimeで動作するRustのWebアプリフレームワークです。ダウンロードの実績では最高峰のフレームワークであり、Rustのデファクトスタンダードといえるような存在になっています。
実装できる機能はRocketよりも多くなっていて、Webアプリ開発に必要な機能の大半をこちらだけで実装可能です。ひとつのフレームワークで完結したいと考えているならば、Actix Webを利用するようにしましょう。
なお、Actix WebはWebサーバーなしでもWebアプリケーションの開発が可能です。一般的にWebアプリ開発はサーバーの用意から進めないといけないため、その作業がなくなる点はメリットでしょう。
Axum
こちらはWebアプリ開発向けにTokioから2022年に公開されたフレームワークです。ただ、新しいフレームワークとなっていて、実際に活用している事例は限られています。また、機能についても実装中でこれからの拡張が期待されます。
現時点でAxumだけを利用してWebアプリ開発を実現することはほぼ不可能でしょう。ただ、これから機能が増える過程で上記2つと異なる路線を進む可能性があり、今後の発展が期待できるRustのフレームワークです。
まとめ
RustによるWebアプリ開発について解説しました。RustはCやC++の代替となるプログラミング言語であることから、Webアプリ開発の中でもバックエンド開発に利用されます。フロントエンドは別のプログラミング言語などで開発すると考えましょう。
なお、Webアプリ開発に特化したプログラミング言語ではないため、すべて自力で実装しようとすると多くの労力がかかります。基本的には紹介したフレームワークを活用して、効率を高めながら開発すべきです。