はじめに
前回の続きの記事になります。前回の記事ではvscodeのremote – containersでコンテナにログインしたところで終わりました。今回はの記事ではその続きからやっていきます。
プロジェクトの作成
cargo initコマンドでプロジェクトの作成を行います。
/web$ cargo init
Created binary (application) package
下記のようなディレクトリ構成でファイルが作成されます。
.
├── .gitignore
├── Cargo.toml
└── src
└── main.rs
fn main() {
println!("Hello, world!");
}
[package]
name = "web"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
一旦このままでビルドしてみましょう。
/web$ cargo build
Compiling web v0.1.0 (/web)
Finished dev [unoptimized + debuginfo] target(s) in 0.59s
./target/debugディレクトリにwebという名前の実行ファイルが作成されているので実行してみます。Hello, world!と表示されていればOKです。
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/web`
Hello, world!
Actix-Webの導入
それではcreates.ioのActix-Webのページを見てみましょう。ページの右側のInstallに書いてある記述をコピーしてきます。それをCargo.tomlの[dependencies]の下に貼り付けます。このプロジェクトで利用するクレート名とバージョンの設定をしています。
[dependencies]
+ actix-web = "4.1.0"
main.rsファイルを以下のように修正します。
use actix_web::{get, web, App, HttpServer, Responder};
#[get("/hello/{name}")]
async fn greet(name: web::Path<String>) -> impl Responder {
format!("Hello {name}!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().service(greet)
})
.bind(("0.0.0.0", 8080))?
.run()
.await
}
cargo runコマンドでコンパル&実行します。
$ cargo run
Compiling pin-project-lite v0.2.9
Compiling once_cell v1.13.0
Compiling scopeguard v1.1.0
Compiling smallvec v1.9.0
Compiling pin-utils v0.1.0
Compiling futures-sink v0.3.21
Compiling percent-encoding v2.1.0
Compiling matches v0.1.9
Compiling local-waker v0.1.3
Compiling alloc-no-stdlib v2.0.3
Compiling tinyvec_macros v0.1.0
Compiling ppv-lite86 v0.2.16
Compiling hashbrown v0.12.3
Compiling adler v1.0.2
Compiling unicode-bidi v0.3.8
Compiling bitflags v1.3.2
Compiling num_threads v0.1.6
Compiling slab v0.4.6
Compiling ryu v1.0.10
Compiling cpufeatures v0.2.2
Compiling language-tags v0.3.2
Compiling httpdate v1.0.2
Compiling mime v0.3.16
Compiling base64 v0.13.0
Compiling actix-utils v3.0.0
Compiling tinyvec v1.6.0
Compiling alloc-stdlib v0.2.1
Compiling form_urlencoded v1.0.1
Compiling tracing-core v0.1.28
Compiling miniz_oxide v0.5.3
Compiling futures-core v0.3.21
Compiling typenum v1.15.0
Compiling futures-task v0.3.21
Compiling crc32fast v1.3.2
Compiling httparse v1.7.1
Compiling encoding_rs v0.8.31
Compiling brotli-decompressor v2.3.2
Compiling parking_lot_core v0.9.3
Compiling socket2 v0.4.4
Compiling signal-hook-registry v1.4.0
Compiling getrandom v0.2.7
Compiling num_cpus v1.13.1
Compiling time v0.3.11
Compiling mio v0.8.4
Compiling lock_api v0.4.7
Compiling actix-service v2.0.2
Compiling indexmap v1.9.1
Compiling serde_json v1.0.82
Compiling serde_urlencoded v0.7.1
Compiling futures-util v0.3.21
Compiling tracing v0.1.35
Compiling flate2 v1.0.24
Compiling unicode-normalization v0.1.21
Compiling rand_core v0.6.3
Compiling ahash v0.7.6
Compiling generic-array v0.14.5
Compiling parking_lot v0.12.1
Compiling brotli v3.3.4
Compiling rand_chacha v0.3.1
Compiling zstd-sys v2.0.1+zstd.1.5.2
Compiling tokio v1.20.0
Compiling idna v0.2.3
Compiling cookie v0.16.0
Compiling zstd-safe v5.0.2+zstd.1.5.2
Compiling rand v0.8.5
Compiling block-buffer v0.10.2
Compiling crypto-common v0.1.6
Compiling zstd v0.11.2+zstd.1.5.2
Compiling url v2.2.2
Compiling digest v0.10.3
Compiling sha1 v0.10.1
Compiling local-channel v0.1.3
Compiling tokio-util v0.7.3
Compiling actix-rt v2.7.0
Compiling actix-server v2.1.1
Compiling actix-codec v0.5.0
Compiling h2 v0.3.13
Compiling actix-http v3.2.1
Compiling actix-web v4.1.0
Compiling web v0.1.0 (/web)
Finished dev [unoptimized + debuginfo] target(s) in 21.49s
Running `target/debug/web`
エラーがなくRunning target/debug/web
の行で止まっていれば無事起動できています。では、ブラウザでアクセスしてみましょう。localhost:8080/hello/{任意の文字列}にアクセスするとHello {任意の文字列}!と表示するようなプログラムになっています。 ホスト側で起動したブラウザでlocalhost:8080/hello/abcにアクセスしてみます。
期待通りHello abc!と表示されています。
コメント