mcpField
M
moai-lang-go

moai-lang-go

github.com/modu-ai開発1.2k76 回インストール今日更新
リポジトリ

moai-lang-go について

Go 1.23以降のバックエンドやCLI開発向けスキルです。Webフレームワークに加え、並行処理、テスト、性能改善、デプロイのパターンを扱います。

主な機能

  1. 01Go 1.23以降の言語ガイダンス
  2. 02Fiber、Gin、Echo、Chiのパターン
  3. 03並行処理とワーカープールのパターン
  4. 04GORMと型安全なSQLのガイダンス
  5. 05テスト、プロファイリング、デプロイのパターン

活用シーン

  1. 01REST APIやマイクロサービスの構築
  2. 02並行処理の実装
  3. 03CLIツールやシステムユーティリティの開発
  4. 04Goアプリケーションのテストと分析

インストール

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

$npx skills add https://github.com/modu-ai/moai-adk --skill moai-lang-go

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

reference/
advanced.md
testing.md
references/
examples.md
reference.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

コメント