Rust Webサーバーの立て方と注意点について
RustでWebサーバーを立てるためにはフレームワークが利用するのが手っ取り早いです。
今回は人気のある2つのフレームワーク、actix-webとRocketの基本的なWebサーバーの設置方法を説明します。
Actix-webを使ったサーバーの立て方
actix-webは高速な非同期Webフレームワークで、Rustの型システムと安全性を活かすことができます。
環境設定
まず新しいプロジェクトを作成します。
cargo new my_web_app
cd my_web_app
依存関係の追加
Cargo.tomlファイルにactix-webを依存関係に追加します。
[dependencies]
actix-web = "4"
サーバーを立てる
src/main.rsファイルを編集して、基本的なHTTPサーバーを設定します。
use actix_web::{web, App, HttpResponse, HttpServer, Responder};
async fn greet() -> impl Responder {
HttpResponse::Ok().body("Hello, world!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route("/", web::get().to(greet))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
8080ポートでサーバーを起動し、ルートURLへのGETリクエストに対して"Hello, world!"と応答します。
Rocketを使ったサーバーの立て方
RocketはRustの安全性と速度を活かしたWebフレームワークで、特に使いやすさに重点を置いて設計されています。
環境設定
RocketはRustのNightly版を使用します。
まずはプロジェクトを作成し、RustのNightly版を設定します。
cargo new rocket_web_app
cd rocket_web_app
rustup override set nightly
依存関係の追加
Cargo.tomlにrocketを依存関係に追加します。
[dependencies]
rocket = "0.5"
サーバーを立てる
src/main.rsに以下のコードを追加します。
#[macro_use] extern crate rocket;
#[get("/")]
fn index() -> &'static str {
"Hello, world!"
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![index])
}
ルートURLに対して"Hello, world!"と応答するシンプルなWebサーバーを立てます。
サーバーの実行
どちらのフレームワークも、サーバーを実行するにはコマンドラインから以下を実行します。
cargo run
これで指定したポートでサーバーが起動し、ブラウザからアクセス可能になります。
Rustをもっと詳しくなりたい方に
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。
Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。
基礎から学ぶRustプログラミング入門
本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
この記事が気に入ったらサポートをしてみませんか?