ARTICLES

【Rust】Rocket入門 - Hello, World! 編

By Kaisei Yokoyama

はじめに

RustのWeb Framework、Rocketの日本語解説をやっていきます。基本的なレスポンスやリクエストの受け取り方、ルーティング、テンプレートエンジンの利用、Jsonの使用、データベースとの連携まで、できるところまでやっていこうと思います。

Rocketは英語の充実したガイドやApiのドキュメントがあるので、英語が読める気力とスキルがある人はそちらを参照することをオススメします。

この(一連の)記事を、国内でのRustおよびRocketの普及と発展を願って投稿します。

実行環境

Overview

取り扱う内容は以下のとおりです。

  • Rustのインストール
    • Nightly Rustのインストール
  • プロジェクトの作成
    • Rocketの導入
    • Rocketを用いたシンプルなコードの作成・実行

また、今回作成するコードはこちらです。

Setup

Rustのインストール

  • mac

    $ curl https://sh.rustup.rs -sSf | sh
  • windows

インストーラーをダウンロードし、実行してください。

Nightly Rustのインストール

Rocketの利用には、Rustの中でも最も活きの良いRustであるNightly版のRustが必要です。

$ rustup install nightly

Nightly Rustに切り替え

$ rustup default nightly

やっていきましょう

プロジェクトの生成

cargo new rocket_sample

cargoというRust公式のビルドシステム兼パッケージマネージャを使います。rocket_sampleはプロジェクト名です。名前は任意です。

Rocketの導入

プロジェクトにcrate(ライブラリのこと)を追加します。Cargo.tomlに、次のような記述を加えてください。

[dependencies]
rocket = "0.4.2"

src/main.rsに設定を追記

Rocketで多用されるマクロのための設定が必要です。

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use] extern crate rocket;

文字列を返すだけのページ

src/main.rsに、次のような関数を設けます。

#[get("/")]
fn index() -> &'static str {
    "Hello, World!"
}

ルーティング

設定したページを組み込みます。

fn main() {
    rocket::ignite()
        .mount("/", routes![index])
        .launch();
}

実行

$ cargo run
    Updating crates.io index
   Compiling proc-macro2 v0.4.30
   Compiling unicode-xid v0.1.0
   Compiling version_check v0.1.5
   Compiling libc v0.2.66
   Compiling syn v0.15.44
   Compiling byteorder v1.3.2
   Compiling matches v0.1.8
   Compiling smallvec v1.1.0
   Compiling log v0.4.8
   Compiling yansi v0.4.0
   Compiling bitflags v1.2.1
   Compiling cc v1.0.48
   Compiling cfg-if v0.1.10
   Compiling autocfg v0.1.7
   Compiling httparse v1.3.4
   Compiling yansi v0.5.0
   Compiling safemem v0.3.3
   Compiling maybe-uninit v2.0.0
   Compiling version_check v0.9.1
   Compiling percent-encoding v1.0.1
   Compiling untrusted v0.6.2
   Compiling typeable v0.1.2
   Compiling serde v1.0.104
   Compiling language-tags v0.2.2
   Compiling traitobject v0.1.0
   Compiling state v0.4.1
   Compiling memchr v2.2.1
   Compiling unicode-bidi v0.3.4
   Compiling unicase v1.4.2
   Compiling unicode-normalization v0.1.11
   Compiling pear_codegen v0.1.2
   Compiling indexmap v1.3.0
   Compiling rocket_codegen v0.4.2
   Compiling rocket v0.4.2
   Compiling ring v0.13.5
   Compiling idna v0.1.5
   Compiling log v0.3.9
   Compiling time v0.1.42
   Compiling num_cpus v1.11.1
   Compiling atty v0.2.13
   Compiling quote v0.6.13
   Compiling base64 v0.9.3
   Compiling base64 v0.10.1
   Compiling smallvec v0.6.13
   Compiling mime v0.2.6
   Compiling url v1.7.2
   Compiling hyper v0.10.16
   Compiling cookie v0.11.1
   Compiling toml v0.4.10
   Compiling devise_core v0.2.0
   Compiling devise_codegen v0.2.0
   Compiling devise v0.2.0
   Compiling pear v0.1.2
   Compiling rocket_http v0.4.2
   Compiling rocket_sample v0.1.0 (/Users/****/github/rocket_sample)
    Finished dev [unoptimized + debuginfo] target(s) in 1m 39s
     Running `target/debug/rocket_sample`
🔧 Configured for development.
    => address: localhost
    => port: 8000
    => log: normal
    => workers: 8
    => secret key: generated
    => limits: forms = 32KiB
    => keep-alive: 5s
    => tls: disabled
🛰  Mounting /:
    => GET / (index)
🚀 Rocket has launched from http://localhost:8000

接続してみる

起動したサーバーに接続してみましょう。接続先は(おそらく)http://localhost:8000 です。

ブラウザでサーバーに接続し、Hello, World!と表示されれば成功です。

お疲れ様でした。今回作成したコードはこちらです。

次回予告

Hello, World! 編ということで、今回は開発環境の整備、ライブラリの導入、簡単なコードの実行までをレクチャーしました。

次回は今回のコードの解説をしつつ、基本的なRocketの仕組みやルーティングについて扱いたいと思います。

SHARE THIS POST