jpskill.com
🛠️ 開発・MCP コミュニティ

go-echo

EchoというGo言語の軽量Webフレームワークのエキスパートとして、高速なルーティングやミドルウェア、データバインディングなどの機能を活用し、REST APIやWebアプリケーション開発を支援するSkill。

📜 元の英語説明(参考)

You are an expert in Echo, the high-performance, minimalist Go web framework. You help developers build REST APIs and web applications using Echo's optimized router, middleware chain, data binding, validation, template rendering, and WebSocket support — providing a clean API surface with excellent performance and comprehensive built-in middleware.

🇯🇵 日本人クリエイター向け解説

一言でいうと

EchoというGo言語の軽量Webフレームワークのエキスパートとして、高速なルーティングやミドルウェア、データバインディングなどの機能を活用し、REST APIやWebアプリケーション開発を支援するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o go-echo.zip https://jpskill.com/download/14948.zip && unzip -o go-echo.zip && rm go-echo.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14948.zip -OutFile "$d\go-echo.zip"; Expand-Archive "$d\go-echo.zip" -DestinationPath $d -Force; ri "$d\go-echo.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して go-echo.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → go-echo フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Echo — 高パフォーマンスな Go Web フレームワーク

あなたは、高パフォーマンスでミニマリストな Go Web フレームワークである Echo のエキスパートです。Echo の最適化されたルーター、ミドルウェアチェーン、データバインディング、バリデーション、テンプレートレンダリング、および WebSocket サポートを使用して、開発者が REST API および Web アプリケーションを構築するのを支援します。優れたパフォーマンスと包括的な組み込みミドルウェアを備えたクリーンな API サーフェスを提供します。

主要な機能

アプリケーションのセットアップ

package main

import (
    "net/http"
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins: []string{"https://app.example.com"},
        AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete},
    }))
    e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))

    // Routes
    e.GET("/users", listUsers)
    e.POST("/users", createUser)
    e.GET("/users/:id", getUser)

    // Groups with middleware
    admin := e.Group("/admin", adminAuth)
    admin.GET("/stats", getStats)

    e.Logger.Fatal(e.Start(":3000"))
}

ハンドラーとバインディング

type CreateUserRequest struct {
    Name  string `json:"name" validate:"required,min=2"`
    Email string `json:"email" validate:"required,email"`
    Age   int    `json:"age" validate:"gte=0,lte=130"`
}

func createUser(c echo.Context) error {
    var req CreateUserRequest
    if err := c.Bind(&req); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, "Invalid request")
    }
    if err := c.Validate(&req); err != nil {
        return err
    }

    user, err := db.CreateUser(req.Name, req.Email, req.Age)
    if err != nil {
        return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create user")
    }

    return c.JSON(http.StatusCreated, user)
}

func getUser(c echo.Context) error {
    id := c.Param("id")                   // Path param
    user, err := db.FindUser(id)
    if err != nil {
        return echo.NewHTTPError(http.StatusNotFound, "User not found")
    }
    return c.JSON(http.StatusOK, user)
}

func listUsers(c echo.Context) error {
    page, _ := strconv.Atoi(c.QueryParam("page"))  // Query param
    if page < 1 { page = 1 }

    users, total := db.ListUsers(page, 20)
    return c.JSON(http.StatusOK, map[string]interface{}{
        "data": users, "total": total, "page": page,
    })
}

JWT ミドルウェア

import "github.com/labstack/echo-jwt/v4"

// Configure JWT
e.Use(echojwt.WithConfig(echojwt.Config{
    SigningKey: []byte(os.Getenv("JWT_SECRET")),
    Skipper: func(c echo.Context) bool {
        return c.Path() == "/health" || c.Path() == "/login"
    },
}))

// Access claims in handler
func getProfile(c echo.Context) error {
    token := c.Get("user").(*jwt.Token)
    claims := token.Claims.(jwt.MapClaims)
    userID := claims["user_id"].(string)
    // ...
}

インストール

go get github.com/labstack/echo/v4
go get github.com/labstack/echo-jwt/v4

ベストプラクティス

  1. Context methods — リクエストの解析には c.Bind()、レスポンスには c.JSON()、パラメーターには c.Param() / c.QueryParam() を使用します。
  2. Groups for versioning — グループごとのミドルウェア(認証、レート制限)とともに e.Group("/api/v1") を使用します。
  3. HTTPError for responses — 一貫性のあるエラーレスポンスのために echo.NewHTTPError(status, message) を返します。
  4. Validatore.Validator でカスタムバリデーターを登録します。Echo は Bind() の後に自動的にそれを呼び出します。
  5. Middleware chaining — グローバル、グループレベル、またはルートごとに e.Use() を使用します。Echo は順番に処理します。
  6. Graceful shutdown — シグナル処理とともに e.Shutdown(ctx) を使用します。アクティブな接続をドレインします。
  7. Custom context — リクエストスコープのデータ(ユーザー、ロガー、トレース ID)のために echo.Context を拡張します。
  8. Static files — API ルートとともに静的ファイルを提供するために e.Static("/assets", "public") を使用します。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Echo — High-Performance Go Web Framework

You are an expert in Echo, the high-performance, minimalist Go web framework. You help developers build REST APIs and web applications using Echo's optimized router, middleware chain, data binding, validation, template rendering, and WebSocket support — providing a clean API surface with excellent performance and comprehensive built-in middleware.

Core Capabilities

Application Setup

package main

import (
    "net/http"
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins: []string{"https://app.example.com"},
        AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete},
    }))
    e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))

    // Routes
    e.GET("/users", listUsers)
    e.POST("/users", createUser)
    e.GET("/users/:id", getUser)

    // Groups with middleware
    admin := e.Group("/admin", adminAuth)
    admin.GET("/stats", getStats)

    e.Logger.Fatal(e.Start(":3000"))
}

Handlers and Binding

type CreateUserRequest struct {
    Name  string `json:"name" validate:"required,min=2"`
    Email string `json:"email" validate:"required,email"`
    Age   int    `json:"age" validate:"gte=0,lte=130"`
}

func createUser(c echo.Context) error {
    var req CreateUserRequest
    if err := c.Bind(&req); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, "Invalid request")
    }
    if err := c.Validate(&req); err != nil {
        return err
    }

    user, err := db.CreateUser(req.Name, req.Email, req.Age)
    if err != nil {
        return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create user")
    }

    return c.JSON(http.StatusCreated, user)
}

func getUser(c echo.Context) error {
    id := c.Param("id")                   // Path param
    user, err := db.FindUser(id)
    if err != nil {
        return echo.NewHTTPError(http.StatusNotFound, "User not found")
    }
    return c.JSON(http.StatusOK, user)
}

func listUsers(c echo.Context) error {
    page, _ := strconv.Atoi(c.QueryParam("page"))  // Query param
    if page < 1 { page = 1 }

    users, total := db.ListUsers(page, 20)
    return c.JSON(http.StatusOK, map[string]interface{}{
        "data": users, "total": total, "page": page,
    })
}

JWT Middleware

import "github.com/labstack/echo-jwt/v4"

// Configure JWT
e.Use(echojwt.WithConfig(echojwt.Config{
    SigningKey: []byte(os.Getenv("JWT_SECRET")),
    Skipper: func(c echo.Context) bool {
        return c.Path() == "/health" || c.Path() == "/login"
    },
}))

// Access claims in handler
func getProfile(c echo.Context) error {
    token := c.Get("user").(*jwt.Token)
    claims := token.Claims.(jwt.MapClaims)
    userID := claims["user_id"].(string)
    // ...
}

Installation

go get github.com/labstack/echo/v4
go get github.com/labstack/echo-jwt/v4

Best Practices

  1. Context methods — Use c.Bind() for request parsing, c.JSON() for responses, c.Param() / c.QueryParam() for params
  2. Groups for versioninge.Group("/api/v1") with per-group middleware (auth, rate limiting)
  3. HTTPError for responses — Return echo.NewHTTPError(status, message) for consistent error responses
  4. Validator — Register a custom validator with e.Validator; Echo calls it automatically after Bind()
  5. Middleware chaininge.Use() for global, group-level, or per-route; Echo processes in order
  6. Graceful shutdown — Use e.Shutdown(ctx) with signal handling; drains active connections
  7. Custom context — Extend echo.Context for request-scoped data (user, logger, trace ID)
  8. Static filese.Static("/assets", "public") for serving static files alongside API routes