Go言語のサードパーティ製ルーターを活用したルーティング方法!chi・gorilla/mux入門
生徒
「先生、Go言語で複雑なWebアプリを作るとき、標準のServeMuxだとURLの管理が大変そうです。もっと便利な方法はありますか?」
先生
「そうですね。そんなときは、Go言語のサードパーティ製ルーターを使うと便利です。代表的なものにchiやgorilla/muxがあります。」
生徒
「サードパーティ製ルーターって何ですか?」
先生
「標準ライブラリ以外で提供されているルーターのことで、より柔軟で便利なルーティング機能を提供してくれます。複雑なURLやパラメータ付きのルーティングも簡単に設定できます。」
生徒
「具体的にどうやって使うんですか?」
先生
「では、基本的な使い方を見ていきましょう!」
1. chiルーターの基本的な使い方
まず、chiは軽量でシンプルなGo言語向けのサードパーティ製ルーターです。ルーティングの設定が簡単で、パスパラメータやミドルウェアの利用も容易です。
package main
import (
"fmt"
"net/http"
"github.com/go-chi/chi/v5"
)
func main() {
r := chi.NewRouter()
r.Get("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "こんにちは、chiルーターの世界!")
})
r.Get("/user/{id}", func(w http.ResponseWriter, r *http.Request) {
id := chi.URLParam(r, "id")
fmt.Fprintf(w, "ユーザーID: %s\n", id)
})
http.ListenAndServe(":8080", r)
}
上の例では、/helloにアクセスすると固定メッセージが返り、/user/{id}ではURLからユーザーIDを取得して表示できます。chi.URLParamで簡単にパスパラメータを取り出せるのが便利です。
2. gorilla/muxルーターの基本的な使い方
gorilla/muxはGo言語で最も有名なサードパーティ製ルーターの一つで、パスパラメータや正規表現マッチなど強力なルーティング機能があります。
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "こんにちは、gorilla/muxルーター!")
}).Methods("GET")
r.HandleFunc("/user/{id}", func(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
fmt.Fprintf(w, "ユーザーID: %s\n", vars["id"])
}).Methods("GET")
http.ListenAndServe(":8080", r)
}
この例では、mux.Vars(r)でURLのパスパラメータを取得し、ユーザーIDを表示できます。HTTPメソッドを指定できるので、GETやPOSTごとに処理を分けることも簡単です。
3. サードパーティ製ルーターを使うメリット
標準のServeMuxと比べて、サードパーティ製ルーターには次のようなメリットがあります。
- パスパラメータやクエリパラメータの取得が簡単。
- HTTPメソッドごとのルーティングが明確。
- 中間処理(ミドルウェア)の挿入が容易で、認証やログ処理などに便利。
- 複雑なURL構造でも整理しやすく、大規模なWebアプリ開発に向いている。
chiは軽量で高速、gorilla/muxは機能が豊富で柔軟、といった特徴があり、用途に応じて選ぶと良いでしょう。
4. 実践的な活用例
例えば、ブログアプリで記事一覧ページや記事詳細ページを作る場合、chiやgorilla/muxを使うとURLごとに処理を整理できます。
r.Get("/articles", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "記事一覧ページ")
})
r.Get("/articles/{slug}", func(w http.ResponseWriter, r *http.Request) {
slug := chi.URLParam(r, "slug")
fmt.Fprintf(w, "記事ページ: %s\n", slug)
})
このようにURL構造を整理すると、Webアプリの拡張やメンテナンスがしやすくなります。