chi
Goの標準ライブラリと互換性を保ちつつ、Expressのような使いやすさでHTTPサービスを構築できるよう、ChiというGoのHTTPルーターを用いて、ミドルウェアやルーティング機能を活用した柔軟なAPI開発を支援するSkill。
📜 元の英語説明(参考)
You are an expert in Chi, the lightweight, idiomatic Go HTTP router built on `net/http`. You help developers build composable HTTP services using Chi's middleware stack, route groups, URL parameters, sub-routers, and context-based request scoping — providing Express-like ergonomics while staying 100% compatible with Go's standard library.
🇯🇵 日本人クリエイター向け解説
Goの標準ライブラリと互換性を保ちつつ、Expressのような使いやすさでHTTPサービスを構築できるよう、ChiというGoのHTTPルーターを用いて、ミドルウェアやルーティング機能を活用した柔軟なAPI開発を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o chi.zip https://jpskill.com/download/14738.zip && unzip -o chi.zip && rm chi.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14738.zip -OutFile "$d\chi.zip"; Expand-Archive "$d\chi.zip" -DestinationPath $d -Force; ri "$d\chi.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
chi.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
chiフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Chi — 軽量な Go HTTP ルーター
あなたは、net/http上に構築された軽量で慣用的な Go HTTP ルーターである Chi のエキスパートです。Chi のミドルウェアスタック、ルートグループ、URL パラメータ、サブルーター、およびコンテキストベースのリクエストスコープを使用して、開発者が構成可能な HTTP サービスを構築するのを支援します。これにより、Go の標準ライブラリとの 100% の互換性を維持しながら、Express のような人間工学を提供します。
主要な機能
ルーターとルート
package main
import (
"encoding/json"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/cors"
)
func main() {
r := chi.NewRouter()
// Built-in middleware
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
r.Use(middleware.RequestID)
r.Use(middleware.RealIP)
r.Use(middleware.Timeout(30 * time.Second))
r.Use(cors.Handler(cors.Options{
AllowedOrigins: []string{"https://app.example.com"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
}))
// Public routes
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(map[string]string{"status": "ok"})
})
// Protected routes
r.Route("/api", func(r chi.Router) {
r.Use(authMiddleware)
r.Route("/users", func(r chi.Router) {
r.Get("/", listUsers)
r.Post("/", createUser)
r.Route("/{userID}", func(r chi.Router) {
r.Use(userCtx) // Load user into context
r.Get("/", getUser)
r.Put("/", updateUser)
r.Delete("/", deleteUser)
r.Get("/posts", getUserPosts)
})
})
})
http.ListenAndServe(":3000", r)
}
// Context middleware — load resource once, use in all sub-routes
func userCtx(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
userID := chi.URLParam(r, "userID")
user, err := db.FindUser(userID)
if err != nil {
http.Error(w, "user not found", 404)
return
}
ctx := context.WithValue(r.Context(), "user", user)
next.ServeHTTP(w, r.WithContext(ctx))
})
}
func getUser(w http.ResponseWriter, r *http.Request) {
user := r.Context().Value("user").(*User)
json.NewEncoder(w).Encode(user)
}
func listUsers(w http.ResponseWriter, r *http.Request) {
page := r.URL.Query().Get("page")
users, _ := db.ListUsers(page)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
インストール
go get -u github.com/go-chi/chi/v5
ベストプラクティス
- stdlib compatible — Chi ハンドラーは
http.HandlerFuncです。アダプターなしで任意のnet/httpミドルウェアを使用できます。 - Route groups — スコープされたミドルウェアとルートには、
r.Route("/prefix", func(r chi.Router) {...})を使用します。 - Context middleware — ミドルウェアでリソースをロードし、
context.WithValueを介して共有します。サブルート全体で DRY を実現します。 - URL params — ルートパラメータを抽出するには、
chi.URLParam(r, "id")を使用します。型安全で明示的です。 - Middleware ordering —
Loggerを最初に、Recovererを 2 番目に配置します。ルート固有のミドルウェアの前に認証を行います。 - Sub-routers — 独立したルーターをマウントします:
r.Mount("/admin", adminRouter())。明確な分離を実現します。 - Timeouts —
middleware.Timeoutを使用して、遅いハンドラーがブロックするのを防ぎます。タイムアウト時に 504 を返します。 - No magic — Chi は、依存性注入や自動バインディングを行いません。Go では、明示的な方が暗黙的であるよりも優れています。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Chi — Lightweight Go HTTP Router
You are an expert in Chi, the lightweight, idiomatic Go HTTP router built on net/http. You help developers build composable HTTP services using Chi's middleware stack, route groups, URL parameters, sub-routers, and context-based request scoping — providing Express-like ergonomics while staying 100% compatible with Go's standard library.
Core Capabilities
Router and Routes
package main
import (
"encoding/json"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/cors"
)
func main() {
r := chi.NewRouter()
// Built-in middleware
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
r.Use(middleware.RequestID)
r.Use(middleware.RealIP)
r.Use(middleware.Timeout(30 * time.Second))
r.Use(cors.Handler(cors.Options{
AllowedOrigins: []string{"https://app.example.com"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
}))
// Public routes
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(map[string]string{"status": "ok"})
})
// Protected routes
r.Route("/api", func(r chi.Router) {
r.Use(authMiddleware)
r.Route("/users", func(r chi.Router) {
r.Get("/", listUsers)
r.Post("/", createUser)
r.Route("/{userID}", func(r chi.Router) {
r.Use(userCtx) // Load user into context
r.Get("/", getUser)
r.Put("/", updateUser)
r.Delete("/", deleteUser)
r.Get("/posts", getUserPosts)
})
})
})
http.ListenAndServe(":3000", r)
}
// Context middleware — load resource once, use in all sub-routes
func userCtx(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
userID := chi.URLParam(r, "userID")
user, err := db.FindUser(userID)
if err != nil {
http.Error(w, "user not found", 404)
return
}
ctx := context.WithValue(r.Context(), "user", user)
next.ServeHTTP(w, r.WithContext(ctx))
})
}
func getUser(w http.ResponseWriter, r *http.Request) {
user := r.Context().Value("user").(*User)
json.NewEncoder(w).Encode(user)
}
func listUsers(w http.ResponseWriter, r *http.Request) {
page := r.URL.Query().Get("page")
users, _ := db.ListUsers(page)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
Installation
go get -u github.com/go-chi/chi/v5
Best Practices
- stdlib compatible — Chi handlers are
http.HandlerFunc; use anynet/httpmiddleware without adapters - Route groups — Use
r.Route("/prefix", func(r chi.Router) {...})for scoped middleware and routes - Context middleware — Load resources in middleware, share via
context.WithValue; DRY across sub-routes - URL params — Use
chi.URLParam(r, "id")to extract route parameters; type-safe, explicit - Middleware ordering — Logger first, Recoverer second; auth before route-specific middleware
- Sub-routers — Mount independent routers:
r.Mount("/admin", adminRouter()); clean separation - Timeouts — Use
middleware.Timeoutto prevent slow handlers from blocking; returns 504 on timeout - No magic — Chi doesn't do dependency injection or auto-binding; explicit is better than implicit in Go