ワンクリックで
axum-guide
Axum v0.8.x backend development guide. Handlers, routing, middleware, auth, error handling.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Axum v0.8.x backend development guide. Handlers, routing, middleware, auth, error handling.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
Claude + Gemini + Codex 4者クロスファクトチェック。Opus自身、Gemini Flash、Gemini Pro、Codex (gpt-5.3-codex) の4者で独立チェック→争点抽出→議論→合意レポートを出力する。
Claude + Gemini クロスファクトチェック。Opus自身、Gemini Flash、Gemini Proの3者で独立チェック→争点抽出→議論→合意レポートを出力する。
Claude内マルチモデルファクトチェック。Opusが自身でチェックし、Sonnetサブエージェントに独立チェックさせ、両者の結果を比較・議論して合意レポートを出力する。
Gemini CLIのGoogle検索統合(grounding)を使ったWeb検索。Claudeは結果の整形・要約のみ担当し、WebSearchツールは使用しない。
Dioxus v0.7.x desktop app guide. Components, Signal state, rsx! macro, hooks, events, Context API, async.
Leptos v0.8.x frontend development guide. Components, signals, resources, async, forms, and ownership patterns.
SOC 職業分類に基づく
| name | axum-guide |
| description | Axum v0.8.x backend development guide. Handlers, routing, middleware, auth, error handling. |
use axum::{extract::{Path, Query, State, Json}, response::IntoResponse, http::StatusCode};
async fn get_user(
State(pool): State<PgPool>,
Path(id): Path<i32>,
) -> Result<Json<User>, AppError> {
let user = sqlx::query_as!(User, "SELECT * FROM users WHERE id = $1", id)
.fetch_one(&pool).await?;
Ok(Json(user))
}
async fn create_user(
State(pool): State<PgPool>,
claims: Claims, // Custom extractor
Json(payload): Json<CreateUserRequest>,
) -> Result<(StatusCode, Json<User>), AppError> {
// ...
Ok((StatusCode::CREATED, Json(user)))
}
fn app() -> Router<AppState> {
Router::new()
.route("/", get(root))
.route("/users", get(list_users).post(create_user))
.route("/users/:id", get(get_user).put(update_user).delete(delete_user))
.nest("/api", api_routes())
.layer(middleware_stack())
.with_state(state)
}
pub struct AppError {
pub code: StatusCode,
pub message: String,
}
impl IntoResponse for AppError {
fn into_response(self) -> Response {
(self.code, Json(json!({"error": self.message}))).into_response()
}
}
impl From<sqlx::Error> for AppError {
fn from(err: sqlx::Error) -> Self {
match err {
sqlx::Error::RowNotFound => AppError {
code: StatusCode::NOT_FOUND,
message: "Resource not found".into(),
},
_ => AppError {
code: StatusCode::INTERNAL_SERVER_ERROR,
message: "Database error".into(),
},
}
}
}
async fn logging_middleware(req: Request, next: Next) -> Response {
let method = req.method().clone();
let uri = req.uri().clone();
let response = next.run(req).await;
tracing::info!("{} {} -> {}", method, uri, response.status());
response
}
let app = Router::new()
.route("/", get(handler))
.layer(middleware::from_fn(logging_middleware));
pub struct Claims { pub user_id: i32, pub role: String }
#[async_trait]
impl<S: Send + Sync> FromRequestParts<S> for Claims {
type Rejection = AppError;
async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
let token = parts.headers.get("cookie")
.and_then(|v| v.to_str().ok())
.and_then(extract_token)
.ok_or(AppError::unauthorized("No token"))?;
validate_jwt(&token)
}
}
async fn auth_middleware(claims: Claims, req: Request, next: Next) -> Response {
next.run(req).await
}
let protected = Router::new()
.route("/profile", get(profile))
.layer(middleware::from_fn(auth_middleware));
use tower_http::cors::{CorsLayer, Any};
let cors = CorsLayer::new()
.allow_origin(Any)
.allow_methods(Any)
.allow_headers(Any)
.allow_credentials(true);
async fn login() -> impl IntoResponse {
let cookie = format!(
"token={}; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age={}",
token, max_age
);
([(header::SET_COOKIE, cookie)], Json(response))
}
async fn upload(mut multipart: Multipart) -> Result<(), AppError> {
while let Some(field) = multipart.next_field().await? {
let name = field.name().unwrap_or_default().to_string();
let data = field.bytes().await?;
// Process file
}
Ok(())
}
State last (others may consume body)Clone (usually wrap in Arc)