haiju's 開発メモ

開発に必要な情報を自分用にメモ

RustのWebフレームワークRocket.rsを試してみる

この記事はRust その2 Advent Calendar 2016 の24日目の記事です。

自分がRustでやってみたいと思っていたことはWebアプリの

開発です。

それで、たまたまTwitterを見ていたら、Rocket.rsという新しい

フレームワークを知ったので、早速、Hello Worldを表示する

サンプルプログラムを作ってみます。

[手順]

※前提条件

RocketにはNightly版のRustが必要とQuickstartの冒頭に

書いてあることに注意。

(見落としていたため、stable版で大量のエラーを吐いたw)

1. RustのNightlyの最新をインストールする必要があるので以下

 コマンドを実行。

% rustup default nightly

info: syncing channel updates for 'nightly-x86_64-unknown-linux-gnu'
info: downloading component 'rustc'
51.7 MiB / 51.7 MiB (100 %) 1.5 MiB/s ETA: 0 s
info: downloading component 'rust-std'
71.7 MiB / 71.7 MiB (100 %) 3.1 MiB/s ETA: 0 s
info: downloading component 'cargo'
4.0 MiB / 4.0 MiB (100 %) 1.2 MiB/s ETA: 0 s
info: installing component 'rustc'
info: installing component 'rust-std'
info: installing component 'cargo'
info: default toolchain set to 'nightly-x86_64-unknown-linux-gnu'

 

nightly-x86_64-unknown-linux-gnu installed - rustc 1.15.0-nightly (71c06a56a 2016-12-18)

2. バージョンを確認。

% rustc --version

rustc 1.15.0-nightly (71c06a56a 2016-12-18)  --- 最新であることを確認

3. cargoコマンドでhello-rocketプロジェクトを作成し、hello-rocketディレクト

 へ移動。

% cargo new hello-rocket --bin

     Created binary (application) `hello-rocket` project

% cd hello-rocket

4. Getting Startedにある通りにCargo.toml の[dependencies]にRocketを追加。

[dependencies]
rocket = "0.1.1"
rocket_codegen = "0.1.1"

5. src/main.rs を以下の通りに書き換えて保存。

#![feature(plugin)]
#![plugin(rocket_codegen)]


extern crate rocket;

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

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

6. cargo run で実行すると、4で追加したWebフレームワークの

 rocketと依存ライブラリのインストールが始まる。

% cargo run
Updating registry `https://github.com/rust-lang/crates.io-index`
Downloading rocket_codegen v0.1.1
Downloading rocket v0.1.1
Compiling typeable v0.1.2
Compiling unicode-normalization v0.1.3
Compiling rustc-serialize v0.3.22
Compiling log v0.3.6
Compiling matches v0.1.4
Compiling unicode-bidi v0.2.4
Compiling traitobject v0.0.1
Compiling httparse v1.2.1
Compiling semver v0.1.20
Compiling libc v0.2.18
Compiling mime v0.2.2
Compiling num_cpus v1.2.0
Compiling rustc_version v0.1.7
Compiling idna v0.1.0
Compiling language-tags v0.2.2
Compiling unicase v1.4.0
Compiling hpack v0.2.0
Compiling url v1.2.4
Compiling winapi v0.2.8
Compiling solicit v0.4.4
Compiling winapi-build v0.1.1
Compiling toml v0.2.1
Compiling kernel32-sys v0.2.2
Compiling term v0.4.4
Compiling time v0.1.35
Compiling cookie v0.2.5
Compiling term-painter v0.2.3
Compiling hyper v0.9.14
Compiling rocket v0.1.1
Compiling rocket_codegen v0.1.1
Compiling hello-rocket v0.1.0 (file:///home/haiju/workspace/hello-rocket)
Finished debug [unoptimized + debuginfo] target(s) in 52.51 secs
Running `/home/haiju/workspace/hello-rocket/target/debug/hello-rocket`

Finished debug [unoptimized + debuginfo] target(s) in 52.51 secs
Running `/home/haiju/workspace/hello-rocket/target/debug/hello-rocket`
 🔧 Configured for development.
 => listening: localhost:8000
 => logging: Normal
 🛰 Mounting '/':
 => GET /
 🚀 Rocket has launched from http://localhost:8000...
 GET /:
 => Matched: GET /
 => Outcome: Succcess
 => Response succeeded.

7. ブラウザで http://localhost:8000/ にアクセスし、Hello, World! が表示されて

 いればOK。

f:id:haiju:20161225024748j:plain

一番後発ってこともあるのか?分かりやすいなーって印象。

ただ、Nightlyの最新が必要ってことを除けばだけど。

追っかけてみたいなーって思った。

次はChatアプリとか書いてみたいなー。

[参考サイト]

rocket.rs