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。
一番後発ってこともあるのか?分かりやすいなーって印象。
ただ、Nightlyの最新が必要ってことを除けばだけど。
追っかけてみたいなーって思った。
次はChatアプリとか書いてみたいなー。
[参考サイト]