Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RustでつくるWebアプリケーション(1)

 RustでつくるWebアプリケーション(1)

More Decks by NearMeの技術発表資料です

Other Decks in Programming

Transcript

  1. 0
    RustでつくるWebアプリケーション(1)
    2022-12-9 第24回NearMe技術勉強会
    Asahi Kaito

    View full-size slide

  2. 1
    今回から、本格的にアプリケーションを
    作成していきます

    View full-size slide

  3. 2
    今回は、
    (1) Actixの使い方
    (2) Rustの文法〜trait〜とは
    ついてまとめます。

    View full-size slide

  4. 3
    今回用いるもの
    ● Rust
    → これがなくては始まらない
    ● Cargo
    → Rustのプロジェクト作成に必要
    ● Actix
    → Rust用のWebフレームワーク

    View full-size slide

  5. 4
    Actixとは
    公式Webサイトによると...

    Actix Web is a powerful, pragmatic, and extremely fast web
    framework for Rust

    高速なWebフレームワークをRustで作れますよということです!
    https://actix.rs/

    View full-size slide

  6. 5
    Actixの例(基本編)
    use actix_web::{web, App, HttpRequest, HttpServer, Responder};
    async fn greet(req: HttpRequest) -> impl Responder {
    let name = req.match_info().get("name").unwrap_or("World");
    format!("Hello {}!", &name)
    }
    #[actix_web::main]
    async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
    App::new()
    .route("/", web::get().to(greet))
    .route("/{name}", web::get().to(greet))
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
    }
    https://actix.rs/

    View full-size slide

  7. 6
    Actixの例(基本編)
    use actix_web::{web, App, HttpRequest, HttpServer, Responder};
    async fn greet(req: HttpRequest) -> impl Responder {
    let name = req.match_info().get("name").unwrap_or("World");
    format!("Hello {}!", &name)
    }
    #[actix_web::main]
    async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
    App::new()
    .route("/", web::get().to(greet))
    .route("/{name}", web::get().to(greet))
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
    }
    https://actix.rs/
    “http://127.0.0.1:8080”に接続すると...
    “http://127.0.0.1:8080/{適当な文字列}”に接続すると...

    View full-size slide

  8. 7
    〜ハンズオン中〜

    View full-size slide

  9. 8
    Actixの例(getマクロを用いる)
    use actix_web::{get, web, App, HttpRequest, HttpServer, Responder};
    #[get("/")]
    async fn index(_req: HttpRequest) -> impl Responder {
    "Hello from the index page."
    }
    async fn hello(path: web::Path) -> impl Responder {
    format!("Hello {}!", &path)
    }
    #[actix_web::main]
    async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
    App::new()
    .service(index)
    .route("/{name}", web::get().to(hello))
    }).bind(("127.0.0.1", 8080))?.run().await
    }
    https://actix.rs/

    View full-size slide

  10. 9
    Actixの例(getマクロを用いる)
    use actix_web::{get, web, App, HttpRequest, HttpServer, Responder};
    #[get("/")]
    async fn index(_req: HttpRequest) -> impl Responder {
    "Hello from the index page."
    }
    async fn hello(path: web::Path) -> impl Responder {
    format!("Hello {}!", &path)
    }
    #[actix_web::main]
    async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
    App::new()
    .service(index)
    .route("/{name}", web::get().to(hello))
    }).bind(("127.0.0.1", 8080))?.run().await
    }
    “http://127.0.0.1:8080”に接続すると...
    “http://127.0.0.1:8080/{適当な文字列}”に接続すると...
    https://actix.rs/

    View full-size slide

  11. 10
    〜ハンズオン中〜

    View full-size slide

  12. 11
    Rustの文法~traitとは?~
    ● trait = 型
    → 複数の構造体などに同じような振る舞いを適用させたいときに  用い

    ● traitの使い方
    (1) traitを作成する
    (2) 構造体を作成する
    (3) implを用いて、traitを構造体に適用する

    View full-size slide

  13. 12
    Rustの文法~traitとは?~
    (1) traitを作成する
    pub trait Introduction {
    fn introduction(&self) -> String;
    }
    (2) 構造体を作成する
    pub struct Pokemon {
    pub name: String,
    pub types: Vec,
    pub tera_type: String,
    pub location: String,
    }

    View full-size slide

  14. 13
    Rustの文法~traitとは?~
    (3) implを用いて、traitを構造体に適用する
    impl Introduction for Pokemon {
    fn introduction(&self) -> String {
    format!(
    "Name: {}, types: {:?}, tera_type: {}, location: {}",
    self.name, self.types, self.tera_type, self.location
    )
    }
    }

    View full-size slide

  15. 14
    〜ハンズオン中〜

    View full-size slide