このプロジェクトについて
本リポジトリは、Goアプリケーションの共通する歴史的・新興のプロジェクトレイアウトパターンを提供します。これはコアGoチームによって定義された公式標準ではなく、Goエコシステムで観察される慣習を文書化したコミュニティの取り組みです。
レイアウトでは以下の主要ディレクトリを定義します:
- /cmd: メインアプリケーション;各サブディレクトリは実行可能名に対応し、/internalおよび/pkgからのコードをインポートする最小限のmain関数を含む。
- /internal: Goコンパイラ自身によって強制されるプライベートなアプリケーション・ライブラリコード(Go 1.4以降)。外部インポートを防ぐ。
- /pkg: 外部利用を意図したライブラリコード。他者がインポートしても安全であることを示すが、プライベートパッケージにはコンパイラで強制される/internalが代替手段として適している。
- /vendor: Go Modules(go mod vendor)で管理されるアプリケーション依存関係。
- /api: OpenAPI/Swagger仕様、JSONスキーマファイル、プロトコル定義。
- /web: 静的Webアセット、サーバーサイドテンプレート、SPA。
- /configs: 設定ファイルテンプレートまたはデフォルト設定。
- /init: システムinit(systemd、upstart、sysv)およびプロセスマネージャ設定。
- /scripts: ルートのMakefileをシンプルに保つためのビルド、インストール、解析スクリプト。
- /build: パッケージング(AMI、Docker、deb、rpm)およびCI設定。
- /deployments: IaaS/PaaS、コンテナオーケストレーションのデプロイ設定(docker-compose、kubernetes/helm、terraform)。
- /test: その他の外部テストアプリおよびテストデータ。
- /docs、/tools、/examples、/third_party、/githooks、/assets、/website: ドキュメント、ツール、例、外部ヘルパー、gitフック、アセット、ウェブサイトデータの補助ディレクトリ。
READMEでは/java/srcディレクトリの使用を明示的に避け(Javaの慣習)、小規模プロジェクトやPoCではシンプルに始めること(single main.goおよびgo.mod)、プロジェクトが大きくなるにつれてより多くの構造を採用することを推奨している。また、Go Modules(Go 1.14で本番対応)、gofmt、staticcheckをフォーマットおよびlint用に推奨している。READMEは中国語、日本語、韓国語、フランス語、スペイン語、ロシア語、ヒンディー語、ベンガル語など18以上の言語で利用可能。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.