golang-project-layout
新しいGoプロジェクトの開始時や既存コードベースの整理、複数パッケージを含むモノレポの構築、複数のmainパッケージを持つCLIツールの作成、ディレクトリ構成の検討など、あらゆるGoプロジェクトのレイアウトとワークスペースのセットアップ方法をガイドします。Goプロジェクトの初期化や構成変更作業が必要な場面で活用してください。
description の原文を見る
Provides a guide for setting up Golang project layouts and workspaces. Use this whenever starting a new Go project, organizing an existing codebase, setting up a monorepo with multiple packages, creating CLI tools with multiple main packages, or deciding on directory structure. Apply this for any Go project initialization or restructuring work.
SKILL.md 本文
ペルソナ: あなたは Go プロジェクトアーキテクトです。問題に応じた適切なサイズの構造を作成します — スクリプトはフラットなままで良く、サービスは実際の複雑さが正当化される場合にのみレイヤーを追加します。
Go プロジェクトレイアウト
アーキテクチャ決定: まず確認する
新しいプロジェクトを開始するときは、開発者に質問して どのソフトウェアアーキテクチャを好むか(クリーンアーキテクチャ、ヘキサゴナル、DDD、フラット構造など)を確認してください。小規模なプロジェクトを過度に構造化してはいけません — 100行の CLI ツールは抽象化のレイヤーや依存性注入を必要としません。
→ samber/cc-skills-golang@golang-design-patterns スキルを参照し、ファイルツリーとコード例を含む詳細なアーキテクチャガイドを確認してください。
依存性注入: 次に確認する
アーキテクチャが決定した後、開発者に質問して どの依存性注入アプローチを希望するか(手動のコンストラクタ注入、DI ライブラリ(samber/do、google/wire、uber-go/dig+fx)、またはなし)を確認してください。この選択はサービスの配線方法、ライフサイクル管理(ヘルスチェック、グレースフルシャットダウン)の方法、およびプロジェクト構造に影響します。samber/cc-skills-golang@golang-dependency-injection スキルで完全な比較と決定テーブルを参照してください。
12-Factor App
アプリケーション(サービス、API、ワーカー)については、12-Factor App の規約に従ってください: 環境変数経由での設定、stdout へのログ出力、ステートレスなプロセス、グレースフルシャットダウン、バッキングサービスをアタッチされたリソースとして扱い、管理タスクはワンオフコマンド(例: cmd/migrate/)として実行します。
クイックスタート: プロジェクトタイプを選択
| プロジェクトタイプ | 使用場面 | 主要ディレクトリ |
|---|---|---|
| CLI ツール | コマンドラインアプリケーションの構築 | cmd/{name}/、internal/、オプションで pkg/ |
| ライブラリ | 他者が使用可能な再利用可能なコードの作成 | pkg/{name}/、プライベートコード用 internal/ |
| サービス | HTTP API、マイクロサービス、またはウェブアプリ | cmd/{service}/、internal/、api/、web/ |
| モノレポ | 複数の関連パッケージ/モジュール | go.work、パッケージごとに分離されたモジュール |
| ワークスペース | 複数のローカルモジュール開発 | go.work、replace ディレクティブ |
モジュール命名規約
モジュール名 (go.mod)
go.mod 内のモジュールパスは以下の条件を満たす必要があります:
- リポジトリ URL と一致する必須:
github.com/username/project-name - 小文字のみを使用:
github.com/you/my-app(不可:MyApp) - 複数単語の場合はハイフンを使用:
user-auth(不可:user_authまたはuserAuth) - セマンティックである: 名前は目的を明確に表現するべき
例:
// ✅ 良い例
module github.com/jdoe/payment-processor
module github.com/company/cli-tool
// ❌ 悪い例
module myproject
module github.com/jdoe/MyProject
module utils
パッケージ命名
パッケージは小文字、単数形である必須があり、ディレクトリ名と一致する必要があります。→ samber/cc-skills-golang@golang-naming スキルで完全なパッケージ命名規約と例を参照してください。
ディレクトリレイアウト
すべての main パッケージは cmd/ に配置し、最小限のロジックで保つ必要があります — フラグをパースし、依存性を配線し、Run() を呼び出します。ビジネスロジックは internal/ または pkg/ に配置します。エクスポートされていないパッケージには internal/ を、外部消費者に有用なコードの場合のみ pkg/ を使用します。
ユニバーサルレイアウト、小規模プロジェクト、ライブラリレイアウトの例、および一般的な間違いについては ディレクトリレイアウト例 を参照してください。
必須設定ファイル
すべての Go プロジェクトはルートに以下を含むべきです:
- Makefile — ビルド自動化。
Makefile テンプレートを参照 - .gitignore — git 無視パターン。
.gitignore テンプレートを参照 - .golangci.yml — リンター設定。
samber/cc-skills-golang@golang-lintスキルで推奨設定を参照
Cobra + Viper でのアプリケーション設定については、設定リファレンス を参照してください。
テスト、ベンチマーク、例
_test.go ファイルをテスト対象のコードと同じ場所に配置します。フィクスチャには testdata/ を使用します。ファイル命名、配置、および組織の詳細については テストレイアウト を参照してください。
Go ワークスペース
モノレポ内で複数の関連モジュールを開発する場合は go.work を使用します。セットアップ、構造、およびコマンドについては ワークスペース を参照してください。
初期化チェックリスト
新しい Go プロジェクトを開始するときは:
- 開発者に質問する — 優先されるソフトウェアアーキテクチャ(クリーン、ヘキサゴナル、DDD、フラット等)
- 開発者に質問する — 優先される DI アプローチ —
samber/cc-skills-golang@golang-dependency-injectionスキル参照 - プロジェクトタイプを決定(CLI、ライブラリ、サービス、モノレポ)
- プロジェクト範囲に応じて構造をサイズダウン
- モジュール名を選択(リポジトリ URL と一致、小文字、ハイフン)
-
go versionを実行して現在の Go バージョンを検出 -
go mod init github.com/user/project-nameを実行 - エントリポイント用に
cmd/{name}/main.goを作成 - プライベートコード用に
internal/を作成 - パブリックライブラリがある場合のみ
pkg/を作成 - モノレポの場合:
go workを初期化してモジュールを追加 -
gofmt -s -w .を実行してフォーマットを確認 -
/vendor/とバイナリパターンを含む.gitignoreを追加
関連スキル
→ samber/cc-skills-golang@golang-cli スキルで CLI ツール構造と Cobra/Viper パターンを参照。→ samber/cc-skills-golang@golang-dependency-injection スキルで DI アプローチの比較と配線を参照。→ samber/cc-skills-golang@golang-lint スキルで golangci-lint 設定を参照。→ samber/cc-skills-golang@golang-continuous-integration スキルで CI/CD パイプラインセットアップを参照。→ samber/cc-skills-golang@golang-design-patterns スキルで設計パターンを参照。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- samber
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/samber/cc-skills-golang / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。