RustでWebアプリケーションを開発する際に基礎となる要素技術からRustの応用まで、Rustに関するあれこれを解説する本連載。第2回ではAPIサーバを構築し、SNSアプリを簡易実装することでRustを使ったWeb開発での記述性や要素技術を解説する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
paizaでWebエンジニアをやっている藤田と申します。
前回は、WebアプリケーションにおけるRDB(リレーショナルデータベース)の立ち位置と、RustからRDBを制御する実装および自動テストについて記述しました。今回は、RustでWebフレームワークである「axum」を用いて(REST)APIサーバを構築し、SNSアプリを簡易実装することで、RustでのWeb開発での記述性や要素技術を解説します。
今回のプロジェクトもGitHubのサンプルリポジトリを用意していますので、コードを実行する際はご利用ください。
現代のWebアプリケーションは、ネットワーク、データベース、ブラウザ、暗号などの技術を核として、データモデリング、デザイン、UI/UX(ユーザーインタフェース/ユーザーエクスペリエンス)、セキュリティ、ログ、トレーシング、テレメトリー、データ分析、自動テスト、監視などの非常に多種多様な関心事に取り囲まれています。
その全てを詳述し、一度にその解決策を実装するのも難しいため、この記事ではサーバサイドで重要な基礎となるデータモデリングとRDB+クッキーによるセッション管理のサンプル実装を提示します。HTTPS、認証機能、ロギングなども実装されていないので、本番環境で利用する際はアプリに要求されるセキュリティ基準にのっとり機能を追加してください。
RustでAPI開発を進めた所感として、Ruby on Railsなどの成熟したWebフレームワークに比べると、モノリシックに提供されるソリューションが少なく、硬めの型システムを持つ静的型付け言語でAPIを記述するのはそれなりに難しいということです。一方で、以下のような利点があると考えています。
RustでのWeb開発は、初期段階でさまざまな難しさ(言語の難しさ、実装選択の難しさ)に直面するため短期、小規模での開発には向かないと思われますが、長期、継続的に規模が拡大する開発において有利に作用するファクターが多いように感じます。
今回はRustでAPIサーバのサンプルを実装するに当たり某SNSサービスの機能をまねたアプリ「Ruitter」を作成しようと思います。作成するAPIとその基本的要件は以下のようになります。
あくまで今回の記事の主体はRustによるAPIサーバ実装ですが、サンプルコードにはデバッグのWeb UIプログラムも用意しています。
機能2に至ってはユーザー名さえ知っていれば誰でもなりすましができるなど本番運用するには課題がありますが、今回の内容を理解すれば機能拡張を進めていくことができると思います。
今回はWebフレームワークライブラリとしてaxumを利用します。このライブラリは非同期ランタイムTokioの開発チームが開発を進めており、扱いやすいため採用しています。その他利用ライブラリはプロジェクトファイル(Cargo.toml)に記述しています。
Copyright © ITmedia, Inc. All Rights Reserved.