Webバックエンド - フレームワーク

Fiber ふぁいばー

Go言語WebフレームワークExpressHTTPルーティングミドルウェア
Fiberについて教えて

簡単に言うとこんな感じ!

Go言語で動く超高速なWebサーバー用フレームワークだよ!JavaScriptの「Express」に見た目そっくりに作られてるから、Expressを使ったことがある人はすぐ使いこなせるんだ。「速さ」と「使いやすさ」を両立したツールってこと!


Fiberとは

Fiberは、Go言語(Golang)向けのオープンソースWebフレームワークです。2020年に登場し、Node.jsの人気フレームワーク「Express」のAPI設計を参考にしながら、GoのパフォーマンスをフルActiveに引き出す設計で作られています。内部的にはGoの超高速HTTPエンジン「Fasthttp」を採用しており、標準のHTTPライブラリより大幅に高いスループットを実現します。

Fiberの最大の特徴は「JavaScriptのExpressを知っていれば、すぐGoで書ける」というコンセプトです。フロントエンドやNode.jsの経験があるエンジニアが、Goの速さを手に入れながら学習コストを抑えて移行できるよう設計されています。Webアプリ・REST APIマイクロサービスなど幅広い用途に使われており、GitHubスター数は3万以上(2024年時点)に達するほど支持されています。

システム発注の場面では「GoでAPIサーバーを作る際にFiberを採用しています」という提案を受けることがあります。処理速度が重視される基幹API・大量リクエストをさばくサービスで選ばれやすいフレームワークです。


Fiberの構造と主な機能

機能内容
ルーティングURLパスとHTTPメソッドに応じて処理を振り分ける仕組み
ミドルウェアリクエスト処理の前後に共通処理(認証・ログ等)を挟む
コンテキスト(Ctx)リクエスト情報の取得・レスポンスの返却を担うオブジェクト
グループ化共通パスをまとめてルートをグループ管理できる
テンプレートエンジンHTMLを動的に生成するための仕組み(任意で組み込み)
静的ファイル配信画像・CSS・JS等のファイルをそのまま返す機能

書き方はExpressそっくり

// Node.js の Express
const app = express()
app.get('/hello', (req, res) => {
  res.send('Hello, World!')
})

// Go の Fiber(見た目がほぼ同じ!)
app := fiber.New()
app.Get("/hello", func(c *fiber.Ctx) error {
  return c.SendString("Hello, World!")
})

app.Getでルート定義」「c.SendStringでレスポンス」という構造が対応していて、Expressを知っていれば違和感なく読めるのが特徴です。

ミドルウェアの仕組み

ミドルウェアとは「リクエストが実際の処理に届く前(または後)に共通の処理を差し込む仕組み」です。Fiberでは以下のようなミドルウェアが標準で用意されています。

ミドルウェア名用途
loggerアクセスログを記録する
recoverパニック(異常終了)を受け止めてサーバーを守る
corsクロスオリジン(別ドメインからのアクセス)を許可する
compressレスポンスをgzip圧縮して転送量を減らす
limiter一定時間内のリクエスト数を制限する(不正アクセス対策)

歴史と背景

  • 2009年 — Go言語(Golang)がGoogleによって公開される。C言語並みの速さとシンプルな構文が特徴
  • 2010年代 — GoでのWeb開発には標準ライブラリ net/httpGin などが使われるが、Node.js/Expressほど直感的ではないという声も
  • 2019年 — Goの高速HTTPライブラリ「Fasthttp」が注目を集める。標準ライブラリの約10倍の処理速度を実現
  • 2020年初頭 — Gopal Ramishetti(@gofiber)らが「ExpressライクなAPIをGoで」をコンセプトにFiberを公開。GitHubで急速にスターを獲得
  • 2021年 — Fiber v2リリース。コンテキスト設計の改善・ミドルウェアAPIの整理など大幅強化
  • 2023〜 — マイクロサービス・クラウドネイティブなAPIサーバーの選択肢として国内外で採用が拡大

主要Goフレームワークとの比較

GoにはFiberのほかにもWebフレームワークがあります。それぞれ特性が異なるため、用途に応じた選定が重要です。

フレームワーク速度学習コスト特徴
Fiber★★★★★低(Express経験者)Fasthttp採用・Expressライク
Gin★★★★☆安定・実績豊富・最もメジャー
Echo★★★★☆シンプルさと高機能のバランス
Chi★★★☆☆標準ライブラリに近い薄いラッパー
標準 net/http★★★☆☆外部依存ゼロ・カスタマイズ自由

Fiber と Express の対応関係(SVG図解)

Express (Node.js) app.get / app.post req / res オブジェクト app.use(ミドルウェア) Router でグループ化 res.json / res.send Fiber (Go) app.Get / app.Post *fiber.Ctx オブジェクト app.Use(ミドルウェア) app.Group でグループ化 c.JSON / c.SendString 対応

関連する規格・RFC

規格・RFC番号内容
RFC 7230HTTP/1.1 メッセージ構文と転送エンコーディング
RFC 7231HTTP/1.1 セマンティクスとコンテンツ(メソッド・ステータスコード)
RFC 9110HTTP セマンティクス(HTTP/1.1〜3の統合仕様)
RFC 7235HTTP 認証フレームワーク(Basic/Bearerトークン等)

関連用語

  • Go言語 — Googleが開発したコンパイル型の静的型付け言語。FiberはGo専用フレームワーク
  • Express — Node.js向けの軽量Webフレームワーク。FiberはこのAPIを模倣して設計されている
  • REST API — HTTPを使ったAPIの設計スタイル。FiberはREST APIの実装に多用される
  • ミドルウェア — アプリケーションの処理前後に共通処理を挟む仕組み
  • ルーティング — URLパスとHTTPメソッドを処理関数に対応付ける仕組み
  • マイクロサービス — 機能を小さなサービスに分割するアーキテクチャ。Fiberはその実装基盤として使われる
  • HTTP — WebのデータやりとりのプロトコルでFiberが扱う通信の基本
  • Gin — GoのもうひとつのメジャーなWebフレームワーク。Fiberと比較・選定されることが多い