mcpField
F
fiber

fiber

github.com/claude-dev-suite開発4652 回インストール2 日前に更新
リポジトリ

fiber について

fiberは、FiberでGoのWebアプリケーションを開発する人向けのクイックリファレンススキルです。アプリの設定、ルーティング、リクエスト処理、ミドルウェア、運用前の確認事項を扱います。

主な機能

  1. 01Fiberアプリの設定とルーティング
  2. 02パス、クエリ、リクエストボディの処理
  3. 03ミドルウェアの利用パターン
  4. 04ヘルスチェックとレディネスエンドポイント
  5. 05本番環境向けチェックリスト

活用シーン

  1. 01Fiber Webアプリの基本構成の作成
  2. 02ルート実装とリクエストデータの読み取り
  3. 03リカバリー、CORS、レート制限の設定
  4. 04サービス状態と本番設定の確認

MCP 対応

READMEでは、mcp__documentation__fetch_docsによるFiberドキュメント取得に言及しています。このスキルがMCPサーバーまたはクライアント機能を提供するとは説明されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill fiber

インストール後、Claude Code で/fiberを入力して読み込まれたか確認します。

同梱ファイルadvanced.md

詳細

Fiber Core Knowledge

完全なリファレンス:go-playground/validator によるバリデーション、WebSocket のセットアップ、カスタムエラー処理、プリフォークモード、グレースフルシャットダウンについては、advanced.md を参照してください。

詳細な知識:包括的なドキュメントについては、technology: fiber を指定して mcp__documentation__fetch_docs を使用してください。

基本セットアップ

package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World!")
    })

    app.Listen(":8080")
}

設定

app := fiber.New(fiber.Config{
    Prefork:       true,               // Multiple processes
    StrictRouting: true,               // /foo != /foo/
    CaseSensitive: true,               // /Foo != /foo
    BodyLimit:     4 * 1024 * 1024,    // 4MB
    ReadTimeout:   10 * time.Second,
    WriteTimeout:  10 * time.Second,
})

ルーティング

app.Get("/users", listUsers)
app.Get("/users/:id", getUser)
app.Post("/users", createUser)
app.Put("/users/:id", updateUser)
app.Delete("/users/:id", deleteUser)

// Path parameters
app.Get("/users/:id", func(c *fiber.Ctx) error {
    id := c.Params("id")
    return c.JSON(fiber.Map{"id": id})
})

// Optional parameter
app.Get("/users/:name?", func(c *fiber.Ctx) error {
    name := c.Params("name", "anonymous")
    return c.JSON(fiber.Map{"name": name})
})

// Route groups
api := app.Group("/api")
v1 := api.Group("/v1")
v1.Get("/users", listUsersV1)

コンテキスト - リクエストデータ

app.Post("/users", func(c *fiber.Ctx) error {
    // Path params
    id := c.Params("id")
    idInt, _ := c.ParamsInt("id")

    // Query params
    page := c.Query("page", "1")
    pageInt := c.QueryInt("page", 1)

    // Headers
    auth := c.Get("Authorization")

    // Cookies
    session := c.Cookies("session_id")

    return c.SendStatus(fiber.StatusOK)
})

ボディの解析

type CreateUserRequest struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

app.Post("/users", func(c *fiber.Ctx) error {
    var req CreateUserRequest
    if err := c.BodyParser(&req); err != nil {
        return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
            "error": err.Error(),
        })
    }
    return c.Status(fiber.StatusCreated).JSON(req)
})

ミドルウェア

import (
    "github.com/gofiber/fiber/v2/middleware/logger"
    "github.com/gofiber/fiber/v2/middleware/recover"
    "github.com/gofiber/fiber/v2/middleware/cors"
    "github.com/gofiber/fiber/v2/middleware/limiter"
)

app.Use(recover.New())
app.Use(logger.New())

app.Use(cors.New(cors.Config{
    AllowOrigins: "https://example.com",
    AllowMethods: "GET,POST,PUT,DELETE",
}))

app.Use(limiter.New(limiter.Config{
    Max:        100,
    Expiration: 1 * time.Minute,
}))

ヘルスチェック

app.Get("/health", func(c *fiber.Ctx) error {
    return c.JSON(fiber.Map{"status": "healthy"})
})

app.Get("/ready", func(c *fiber.Ctx) error {
    if err := db.Ping(); err != nil {
        return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{
            "status": "not ready",
        })
    }
    return c.JSON(fiber.Map{"status": "ready"})
})

このスキルを使用しない場合

  • Gin プロジェクト - Gin ではコンテキスト API が異なります
  • Echo プロジェクト - Echo ではミドルウェアのパターンが異なります
  • Chi プロジェクト - Chi は標準ライブラリと互換性があります
  • 標準の net/http が必要な場合 - Fiber は net/http ではなく fasthttp を使用します
  • gRPC サービス - Fiber は gRPC をサポートしていません

アンチパターン

アンチパターン問題点解決策
ミドルウェアで c.Next() を呼び出さないミドルウェアチェーンが中断されます処理を停止する場合を除き、必ず c.Next() を呼び出します
c.Body() を複数回使用するボディは消費されますまずボディを変数に保存します
エラー処理がないエラーが通知されずに失敗しますBodyParser() の戻り値を確認します
Prefork を慎重に設定しない状態に問題が発生する可能性があります共有状態がない場合にのみ Prefork を使用します
レート制限がないDDoS の脆弱性が生じますlimiter ミドルウェアを使用します

トラブルシューティング(クイックガイド)

問題診断解決策
ルートが見つからないメソッドまたはパスが間違っています正確なルート登録を確認します
ボディの解析に失敗するContent-Type が間違っていますContent-Type ヘッダーが正しいことを確認します
CORS エラー設定されていませんcors.New() ミドルウェアを使用します
ミドルウェアが実行されない順序が間違っていますルートハンドラーより前に配置します
Prefork の問題共有状態に関する問題ですPrefork では可変状態を共有しないようにします

本番環境チェックリスト

  • Recovery ミドルウェアが有効
  • CORS が設定済み
  • レート制限が有効
  • リクエストボディのサイズ制限が設定済み
  • タイムアウトが設定済み
  • 構造化ログ
  • ヘルス/レディネスエンドポイント
  • グレースフルシャットダウン
  • 入力バリデーション

リファレンスドキュメント

コメント