Go言語におけるディレクトリ構成のベストプラクティス

Go
スポンサーリンク

本記事では、標準的なGoプロジェクトの構成と、それに基づいたベストプラクティスについて解説します。

1. 標準的なプロジェクト構成

Goプロジェクトでは、以下のようなディレクトリ構成を採用するのが一般的です。


project-root/
├── cmd/           # メインアプリケーションのエントリーポイント
│   └── app/
│       └── main.go
├── internal/      # 非公開のパッケージ
│   ├── auth/
│   ├── db/
│   └── handler/
├── pkg/           # 公開パッケージ
│   ├── models/
│   └── utils/
├── api/           # API定義、プロトコルファイルなど
├── web/           # Webアプリケーションの静的ファイル
├── configs/       # 設定ファイル
├── scripts/       # ビルドスクリプトなど
├── test/          # 追加のテストファイル
├── docs/          # ドキュメント
├── go.mod
└── go.sum

この構成を採用することで、コードの役割が明確になり、プロジェクトのスケールアップにも対応しやすくなります。

2. 重要なディレクトリの説明

cmd/

– アプリケーションのメインエントリーポイントを格納します。
– 各実行可能ファイルは独自のディレクトリを持つべきです。

internal/

– プロジェクト内部でのみ使用するプライベートなコードを配置します。
– Goコンパイラによって外部からのインポートが禁止されるため、実装の隠蔽に役立ちます。

pkg/

– 他のプロジェクトでも再利用可能な公開パッケージを配置します。
– 安定したAPIを提供し、慎重に設計する必要があります。

api/

– OpenAPI仕様やgRPCプロトコル定義ファイルを格納します。

web/

– フロントエンドの静的ファイル(HTML、CSS、JavaScriptなど)を配置します。

configs/

– 設定ファイル(YAML、JSON、TOMLなど)を格納します。

scripts/

– デプロイやビルドに使用するスクリプトを配置します。

test/

– ユニットテストとは別に、統合テストやエンドツーエンドテストのスクリプトを配置します。

docs/

– プロジェクトのドキュメントを格納します。

3. ベストプラクティス

パッケージ構造

– 各ディレクトリは単一の責任を持つように設計します。
– パッケージ名は簡潔で意味のあるものにします。

依存関係

– 循環依存を避けるため、適切にモジュールを分離します。
– 依存関係は上位レベルから下位レベルへ向かうべきです。

可視性

– 内部実装は `internal/` パッケージに配置し、外部公開を防ぎます。
– 再利用可能なコードは `pkg/` ディレクトリに配置します。

テスト

– テストファイルは実装ファイルと同じディレクトリに配置し、 `*_test.go` という命名規則を守ります。
– 統合テストやエンドツーエンドテストは `test/` ディレクトリに配置します。

このような構成を採用することで、コードの保守性が向上し、チーム開発がスムーズに進行します。

4. 参考文献

1. Go公式ブログ
2. Go標準ライブラリのソースコード
3. Goプロジェクトレイアウト(非公式)

Goプロジェクトにおける設計の助けになれば幸いです。

Go
スポンサーリンク
シェアする
タイトルとURLをコピーしました