UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
開発・技術 · SKILL.md

rocket

rocket

Rocket Rust web framework. Covers routing, fairings, guards, state, and testing. Use for type-safe, boilerplate-free Rust APIs. USE WHEN: user mentions "rocket", "rust type-safe api", "rocket guards", asks about "rocket fairings", "rocket state", "compile-time route checking", "rust web macros", "rocket testing" DO NOT USE FOR: Axum projects - use `axum` …

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: rocket description: | Rocket Rust web framework. Covers routing, fairings, guards, state, and testing. Use for type-safe, boilerplate-free Rust APIs.

USE WHEN: user mentions "rocket", "rust type-safe api", "rocket guards", asks about "rocket fairings", "rocket state", "compile-time route checking", "rust web macros", "rocket testing"

DO NOT USE FOR: Axum projects - use axum instead, Actix-web projects - use actix-web instead, Warp projects - use warp instead, non-Rust backends allowed-tools: Read, Grep, Glob, Write, Edit

Rocket Core Knowledge

Full Reference: See advanced.md for custom guards (authentication, API key), fairings (CORS, timing), database state, error catchers, and testing patterns.

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: rocket for comprehensive documentation.

Basic Setup

# Cargo.toml
[dependencies]
rocket = { version = "0.5", features = ["json"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["full"] }
#[macro_use] extern crate rocket;

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

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![index])
}

Routing

#[get("/users/<id>")]
fn get_user(id: u32) -> String {
    format!("User {}", id)
}

#[post("/users", data = "<user>")]
fn create_user(user: Json<CreateUser>) -> Json<User> {
    Json(User::from(user.into_inner()))
}

#[get("/files/<path..>")]
fn get_file(path: PathBuf) -> Option<NamedFile> {
    NamedFile::open(Path::new("static/").join(path)).ok()
}

// Query parameters
#[derive(FromForm)]
struct Pagination { page: Option<u32>, per_page: Option<u32> }

#[get("/users?<pagination..>")]
fn list_users(pagination: Pagination) -> Json<Vec<User>> {
    let page = pagination.page.unwrap_or(1);
    Json(fetch_users(page, pagination.per_page.unwrap_or(20)))
}

// Mounting
#[launch]
fn rocket() -> _ {
    rocket::build()
        .mount("/", routes![index])
        .mount("/api/v1", routes![list_users, get_user, create_user])
}

Request Guards

// JSON body
#[post("/users", data = "<user>")]
fn create_user(user: Json<CreateUser>) -> Json<User> {
    Json(User::from(user.into_inner()))
}

// Form data
#[post("/login", data = "<login>")]
fn login(login: Form<LoginForm>) -> String {
    format!("Welcome, {}", login.username)
}

// Cookies
#[get("/session")]
fn session(cookies: &CookieJar<'_>) -> Option<String> {
    cookies.get("session_id").map(|c| c.value().to_string())
}

State Management

use std::sync::atomic::{AtomicU64, Ordering};

struct HitCount(AtomicU64);

#[get("/count")]
fn count(hit_count: &State<HitCount>) -> String {
    let count = hit_count.0.fetch_add(1, Ordering::Relaxed);
    format!("Hits: {}", count)
}

#[launch]
fn rocket() -> _ {
    rocket::build()
        .manage(HitCount(AtomicU64::new(0)))
        .mount("/", routes![count])
}

Fairings (Middleware)

use rocket::fairing::AdHoc;

#[launch]
fn rocket() -> _ {
    rocket::build()
        .attach(AdHoc::on_liftoff("Liftoff", |_| Box::pin(async {
            println!("Rocket has launched!");
        })))
}

When NOT to Use This Skill

  • Axum projects - Axum integrates better with Tower ecosystem
  • Actix-web projects - Actix has more performance optimizations
  • Stable Rust requirement - Rocket requires nightly (though v0.5 works on stable)

Anti-Patterns

Anti-PatternWhy It's BadSolution
Using Outcome::Forward everywhereRoutes become hard to traceUse specific error types
Not using request guardsRepetitive validation codeCreate custom FromRequest guards
Mutable state without sync primitivesData racesUse Mutex or RwLock with State
No database connection poolingResource exhaustionUse rocket_db_pools
Hardcoded secrets in Rocket.tomlSecurity riskUse environment variables

Quick Troubleshooting

ProblemDiagnosisFix
"Use of unstable library feature"Wrong Rust versionInstall nightly or use Rocket 0.5+
Route not matchingRank conflictSpecify rank attribute or reorder routes
Guard returns errorValidation failedCheck guard implementation logic
Database error on startupWrong connection stringVerify Rocket.toml database config
CORS issuesNo fairingAdd CORS fairing with proper config

Production Checklist

  • Rocket.toml configured for production
  • CORS fairing attached
  • Custom error catchers registered
  • Request guards for authentication
  • Database pool configured
  • Health/readiness endpoints
  • Secret key set for release

Reference Documentation

保存したスキル