🚨

⚠️Go初心者要注意⚠️ golang-standards は Standard では無いぞって話

2024/12/10に公開

初めに結論

検索するとよくヒットするgolang-standards/project-layoutというリポジトリは、は公式の”標準”ではありません!!(これはリポジトリの README にはっきりと明記されているぞ!!!!)
https://github.com/golang-standards/project-layout

そのため、これを「Goの公式標準」 だと信じ込んで引用するのは要注意です!
もちろん、この構成自体は参考になる場合もありますが、「これが公式の標準だ!」という主張とセットで引用するのはやめましょう。

この件に関しては、このリポジトリの Issue で色々と議論されていたみたいなので、この記事では議論の流れを紹介します。

https://github.com/golang-standards/project-layout/issues/117

対象読者

  • 最近 Go を触り始めた初心者
  • Go で新しくアプリケーション開発を始めようとしている Go 初心者

そもそも golang-standards って??

Go アプリケーションの基本的なレイアウトを紹介しているリポジトリ

https://github.com/golang-standards/project-layout

現時点で Star: 49.9k

ネットで 『Go ディレクトリ構成』みたいに検索すると上の方にヒットする記事では必ず言及されている。

また、各言語に翻訳もされているため、初心者が参考にしやすいリポジトリとなっている。

ぱっと見公式のように見えるが、しっかりと README で NOT an official standard defined by the core Go dev team(Goのコア開発チームによって定義された公式規格ではありません。)と記載されている。

Issue で議論されている内容

Standard を名乗るな派と、別にええやん派で長い間議論されていたようです。
そして結局のところ議論はまとまらず、リポジトリ作成者の手によって Issue はクローズされたようです。

https://github.com/golang-standards/project-layout/issues/117

それぞれの派閥の意見を簡単にまとめました。

Standard ってややこしいねん!派

  • golang-standardsって名前は、初心者に誤解を招いているんじゃ無いのか?
    • この理由が一番大きそう。人は README を読まないんだ。。。
  • 名前が『Standard(標準)』を意味するため、初心者がこれを唯一の正解と信じ込み、他の選択肢を排除してしまうのでは?
  • このディレクトリ構成はGoが理想とするシンプルな構成では無いのでは?

別にええやん!派

  • リポジトリ名は自由でしょ!!!
    • それはそう(正論)
  • READMEに公式ではないと記載しているので問題ないでしょ!
    • それはそう(正論)なぜ人は README を読まないのか。。。
  • 選択肢の一つとして、このリポジトリが存在するのは問題ない
  • 大規模リポジトリではこの構成はよく見かけるし有用
    • 確かにリポジトリの規模とかにもよるので、この構成が微妙かどうかは議論が堂々巡りになりそう。

まとめ

ぱっと調べるとすぐに出てきて、スター数も多いため公式っぽく見えますが、しっかりと README を読みましょう(自分は公式だと完全に勘違いしたのでw)

また公式もディレクトリ構成に関する情報を出しているので、そちらも参考にしましょう

Go 公式サイト。ディレクトリ構成に関して言及されている。
https://go.dev/doc/modules/layout

Go の公式リポジトリ。色々なサンプルプロジェクトが見れる。
https://go.googlesource.com/example/

Discussion