カテゴリ: Go言語 更新日: 2025/11/12

Go言語でミドルウェアを作成する方法と活用例!初心者でもわかるWebアプリ開発

Go言語でミドルウェアを作成する方法と活用例
Go言語でミドルウェアを作成する方法と活用例

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語でWebアプリを作るときに、リクエストを事前に処理したり、ログを残したりする方法はありますか?」

先生

「それにはミドルウェアを使います。ミドルウェアは、Webリクエストの前後で共通処理を追加する仕組みです。」

生徒

「ミドルウェアって具体的にどんな処理ができますか?」

先生

「例えば、アクセスログを記録したり、認証チェックをしたり、リクエストに共通のヘッダーを追加したりできます。」

生徒

「なるほど、具体的な作り方を見せてもらえますか?」

先生

「もちろんです。それでは基本から順番に見ていきましょう!」

1. Go言語のミドルウェアとは?

1. Go言語のミドルウェアとは?
1. Go言語のミドルウェアとは?

Go言語におけるミドルウェアとは、HTTPリクエストとレスポンスの間で共通処理を行う関数のことです。標準ライブラリのhttp.Handlerを使って簡単に作ることができます。例えば、すべてのリクエストにログを出力したい場合、ミドルウェアを作ると一箇所で処理をまとめられます。

2. 基本的なミドルウェアの作成方法

2. 基本的なミドルウェアの作成方法
2. 基本的なミドルウェアの作成方法

ミドルウェアは、http.HandlerFuncを引数に取り、同じ型のhttp.HandlerFuncを返す関数として作成します。これにより、元のハンドラーに前処理や後処理を追加できます。


package main

import (
    "fmt"
    "net/http"
    "time"
)

// ログを出力するミドルウェア
func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        fmt.Printf("リクエスト: %s %s\n", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
        fmt.Printf("処理時間: %v\n", time.Since(start))
    }
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "こんにちは、ミドルウェアの世界!")
}

func main() {
    http.HandleFunc("/hello", loggingMiddleware(helloHandler))
    http.ListenAndServe(":8080", nil)
}

この例では、loggingMiddlewareがリクエスト前にログを出力し、リクエスト処理後に処理時間を表示しています。元のハンドラーhelloHandlerはそのまま使えます。

3. ミドルウェアの活用例

3. ミドルウェアの活用例
3. ミドルウェアの活用例

ミドルウェアはログだけでなく、認証やエラーハンドリング、共通ヘッダーの追加など幅広く活用できます。


// 認証チェックミドルウェア
func authMiddleware(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        token := r.Header.Get("Authorization")
        if token != "secret" {
            http.Error(w, "認証エラー", http.StatusUnauthorized)
            return
        }
        next.ServeHTTP(w, r)
    }
}

func secretHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "認証に成功しました!")
}

func main() {
    http.HandleFunc("/secret", authMiddleware(secretHandler))
    http.ListenAndServe(":8080", nil)
}

上の例では、authMiddlewareでAuthorizationヘッダーをチェックし、不正な場合はアクセスを拒否しています。これにより、共通の認証処理を複数のハンドラーに簡単に適用できます。

4. 複数のミドルウェアを組み合わせる方法

4. 複数のミドルウェアを組み合わせる方法
4. 複数のミドルウェアを組み合わせる方法

複数のミドルウェアを順番に適用したい場合、ミドルウェアを入れ子にすることで簡単に実現できます。


http.HandleFunc("/secure", loggingMiddleware(authMiddleware(secretHandler)))

この場合、リクエストはまずauthMiddlewareで認証をチェックされ、通過した場合にloggingMiddlewareでログが記録され、最後にsecretHandlerが実行されます。順番を変えることで、処理の流れを柔軟に制御できます。

5. まとめ

5. まとめ
5. まとめ

Go言語のミドルウェアは、Webアプリ開発で非常に役立つ仕組みです。ログ出力、認証チェック、共通ヘッダーの追加など、様々な処理を一箇所で管理できるため、コードの整理と保守性向上に繋がります。サードパーティ製ルーターを使うとさらにミドルウェアの管理がしやすくなり、大規模Webアプリにも対応できます。

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Kotlin・Go・Swift記事の人気No3
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎