moai-lang-go について
Go 1.23以降のバックエンドやCLI開発向けスキルです。Webフレームワークに加え、並行処理、テスト、性能改善、デプロイのパターンを扱います。
主な機能
- 01Go 1.23以降の言語ガイダンス
- 02Fiber、Gin、Echo、Chiのパターン
- 03並行処理とワーカープールのパターン
- 04GORMと型安全なSQLのガイダンス
- 05テスト、プロファイリング、デプロイのパターン
活用シーン
- 01REST APIやマイクロサービスの構築
- 02並行処理の実装
- 03CLIツールやシステムユーティリティの開発
- 04Goアプリケーションのテストと分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ modu-ai/ moai-adk --skill moai-lang-goインストール後、Claude Code で/moai-lang-goを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/advanced.mdtesting.mdreferences/examples.mdreference.md詳細
クイックリファレンス(30秒)
Go 1.23+を使用した、高性能なバックエンドシステムとCLIアプリケーションの開発エキスパートです。
自動トリガー:.go拡張子のファイル、go.mod、go.sum、goroutine、チャネル、Fiber、Gin、GORM、Echo、Chi
主なユースケース:
- 高性能なREST APIとマイクロサービス
- 並行・並列処理システム
- CLIツールとシステムユーティリティ
- クラウドネイティブなコンテナ化サービス
よく使うパターン:
Fiber APIパターン:
fiber.New関数を呼び出してアプリを作成します。api/users/:idに、fiber.Ctxを受け取りerrorを返すハンドラー関数を使ったGETルートを定義します。ハンドラー内で、c.Paramsから取得したidを含むfiber.Mapを指定してc.JSONを呼び出します。ポート3000でapp.Listenを呼び出します。
Gin APIパターン:
gin.Default関数を呼び出してrを作成します。api/users/:idに、gin.Contextポインターを受け取るハンドラー関数を使ったGETルートを定義します。ハンドラー内で、ステータス200と、c.Paramから取得したidを含むgin.Hを指定してc.JSONを呼び出します。ポート3000でr.Runを呼び出します。
エラー処理付きgoroutine:
context.Backgroundを指定してerrgroup.WithContextを呼び出し、gとctxを作成します。ctxを指定してprocessUsersを返す関数でg.Goを呼び出します。ctxを指定してprocessOrdersを返す関数でもg.Goを呼び出します。g.Waitのerrがnilでない場合は、エラーを指定してlog.Fatalを呼び出します。
実装ガイド(5分)
Go 1.23の言語機能
新機能:
- for i range 10構文を使って整数を範囲指定し、iを出力します
- プロファイル誘導最適化(PGO)2.0
- 型推論が改善されたジェネリクス
ジェネリクスのパターン:
型パラメーターTとUをanyとする、ジェネリックなMap関数を作成します。Tのスライスと、TからUへの関数を受け取ります。同じ長さのUの結果スライスを作成します。スライスをrangeで反復処理し、関数を値に適用した結果をresultの要素に設定します。resultを返します。
WebフレームワークFiber v3
fiber.ConfigにErrorHandlerとPrefork trueを指定してfiber.Newを呼び出し、アプリを作成します。recover.New、logger.New、cors.Newのミドルウェアを使用します。api/v1パスにapiグループを作成します。listUsers、getUser(idパラメーター付き)、createUser、updateUser(id付き)、deleteUser(id付き)のルートを定義します。ポート3000でapp.Listenを呼び出します。
WebフレームワークGin
gin.Defaultでrを作成します。cors.Defaultミドルウェアを使用します。api/v1パスにapiグループを作成します。listUsersを呼び出すusersのGET、getUserを呼び出すusers/:idのGET、createUserを呼び出すusersのPOSTを定義します。ポート3000でr.Runを呼び出します。
リクエストバインディングのパターン:
NameフィールドとEmailフィールドを持つCreateUserRequest構造体を定義します。jsonタグと、必須、最小長2、必須のメールアドレス検証のbindingタグを追加します。createUserハンドラーでreq変数を宣言し、ポインターを指定してc.ShouldBindJSONを呼び出します。エラーが発生した場合は、ステータス400とエラーを指定してc.JSONを呼び出します。それ以外の場合は、ステータス201とレスポンスデータを指定してc.JSONを呼び出します。
WebフレームワークEcho
echo.Newでeを作成します。middleware.Logger、middleware.Recover、middleware.CORSを使用します。api/v1パスにapiグループを作成します。usersのGETとPOSTを定義します。ポート3000でe.Startを指定してe.Logger.Fatalを呼び出します。
WebフレームワークChi
chi.NewRouterでrを作成します。middleware.Loggerとmiddleware.Recovererを使用します。api/v1パスと関数を指定してr.Routeを呼び出します。その中で、usersパスを指定してr.Routeを呼び出します。一覧用のGet、作成用のPost、単一ユーザー用のidパラメーター付きGetを定義します。ポート3000とrを指定してhttp.ListenAndServeを呼び出します。
ORM GORM 1.25
モデル定義:
gorm.Modelを埋め込んだUser構造体を定義します。uniqueIndexとnot nullのタグを付けたName、uniqueIndexとnot nullを付けたEmail、foreignKey AuthorIDタグを付けたPostsスライスを追加します。
クエリのパターン:
Postsを指定してdb.Preloadを呼び出します。作成日時の降順で並べ替え、件数を10に制限する関数を渡し、その後、userとid 1を指定してFirstを呼び出します。トランザクションの場合は、txポインターを受け取る関数を指定してdb.Transactionを呼び出します。その中でユーザーとプロフィールを作成し、エラーがあれば返します。
sqlc による型安全な SQL
version 2、postgresql エンジン、queries と schema のパス、およびパッケージ名、出力ディレクトリ、pgx v5 の sql_package を指定する Go 生成設定を含む sqlc.yaml を作成します。
query.sql ファイルに、id がパラメーターと一致するすべての列を返すクエリとして、名前を GetUser に設定したものを追加します。name と email の値を挿入してすべての列を返すクエリとして、名前を CreateUser に設定したものを追加します。
並行処理のパターン
Errgroup パターン:
errgroup.WithContext を使って g と ctx を作成します。g.Go を呼び出して fetchUsers を実行し、users 変数に代入します。g.Go を呼び出して fetchOrders を実行し、orders 変数に代入します。g.Wait がエラーを返した場合は、nil とエラーを返します。
ワーカープールパターン:
受信専用の jobs チャネル、送信専用の results チャネル、ワーカー数 n を受け取る workerPool 関数を定義します。WaitGroup を作成します。n 回ループし、WaitGroup をインクリメントして、Done を defer し、jobs を range で処理して processJob の結果を results に送信する goroutine を起動します。Wait を呼び出してから results を閉じます。
タイムアウト付きコンテキスト:
context.WithTimeout を使って 5 秒の ctx と cancel を作成します。cancel の呼び出しを defer します。ctx を指定して fetchData を呼び出します。エラーが context.DeadlineExceeded の場合は、タイムアウトを返し、StatusGatewayTimeout を設定します。
テストのパターン
テーブル駆動テスト:
name が string、input が CreateUserInput、wantErr が bool の構造体を含む tests スライスを定義します。有効な入力と name が空のテストケースを追加します。tests を range で処理し、name とテスト関数を指定して t.Run を呼び出します。service の Create を呼び出し、wantErr が true かどうかを確認して require.Error を呼び出します。
HTTP テスト:
fiber.New で app を作成します。getUser を呼び出す users/:id の GET ルートを追加します。httptest.NewRequest を使って users/1 への GET リクエストを作成します。app.Test にリクエストを渡してレスポンスを取得します。ステータスコードが 200 であることをアサートします。
Viper を使った Cobra CLI
Use と Short フィールドを持つ cobra.Command ポインターとして rootCmd を定義します。init 関数で、cfgFile 用の PersistentFlags StringVar を追加します。config と lookup を指定して viper.BindPFlag を呼び出します。viper.SetEnvPrefix を MYAPP に設定し、viper.AutomaticEnv を呼び出します。
高度なパターン
以下を含む包括的な内容については:
- 高度な並行処理パターン(ワーカープール、レート制限、errgroup)
- ジェネリクスと型制約
- インターフェースの設計と合成
- 包括的なテストパターン(TDD、テーブル駆動テスト、ベンチマーク、ファジング)
- パフォーマンスの最適化とプロファイリング
高度なパターンについては reference/advanced.md を、テストパターンについては reference/testing.md を参照してください。
パフォーマンスの最適化
PGO ビルド:
GODEBUG の pgo を有効にして cpuprofile の出力先を指定し、アプリケーションを実行します。プロファイルファイルを指定する pgo フラグを使って go build でビルドします。
オブジェクトのプーリング:
New 関数が 4096 バイトのスライスを返す sync.Pool として bufferPool を作成します。型アサーションを使ってバッファを取得し、プールに返すために Put を defer します。
コンテナーへのデプロイ(10~20MB)
マルチステージ Dockerfile:最初のステージでは golang:1.23-alpine をビルダーとして使用し、WORKDIR を設定して go.mod と go.sum をコピーし、go mod download を実行してからソースをコピーし、CGO_ENABLED 0 とバイナリーを縮小する ldflags を指定してビルドします。2 番目のステージでは scratch を使用し、バイナリーをコピーして ENTRYPOINT を設定します。
グレースフルシャットダウン
app.Listen を呼び出す goroutine を起動します。バッファーサイズが 1 の os.Signal 用 quit チャネルを作成します。SIGINT と SIGTERM を指定して signal.Notify を呼び出します。quit から受信した後、app.Shutdown を呼び出します。
Context7 ライブラリ
- golang/go(Go 言語と標準ライブラリ)
- gofiber/fiber(Fiber Web フレームワーク)
- gin-gonic/gin(Gin Web フレームワーク)
- labstack/echo(Echo Web フレームワーク)
- go-chi/chi(Chi ルーター)
- go-gorm/gorm(GORM ORM)
- sqlc-dev/sqlc(型安全な SQL)
- jackc/pgx(PostgreSQL ドライバー)
- spf13/cobra(CLI フレームワーク)
- spf13/viper(設定)
- stretchr/testify(テストツールキット)
相性の良いツール
- moai-domain-backend(REST API アーキテクチャとマイクロサービス)
- moai-lang-rust(システムプログラミングの補完)
- moai-quality-security(セキュリティ強化)
- moai-essentials-debug(パフォーマンスプロファイリング)
- moai-workflow-ddd(ドメイン駆動開発)
トラブルシューティング
よくある問題:
- モジュールのエラー:go mod tidy と go mod verify を実行します
- バージョンの確認:go version と go env GOVERSION を実行します
- ビルドの問題:go clean -cache と go build -v を実行します
パフォーマンス診断:
- CPU プロファイリング:go test -cpuprofile cpu.prof -bench . を実行します
- メモリプロファイリング:go test -memprofile mem.prof -bench . を実行します
- データ競合の検出:go test -race ./... を実行します
追加リソース
高度な並行処理パターン、ジェネリクス、インターフェース設計については、reference/advanced.md を参照してください。
TDD、ベンチマーク、ファジングを含む包括的なテストパターンについては、reference/testing.md を参照してください。
最終更新日:2026-01-11 バージョン:1.1.0