この記事はtraP Advent Calendar 2021 28日目の記事です。
この記事では、わかりやすさを重視しているため、正確性に欠けることがあります。
あなたは誰? : いろり(@irori).sysAd班,グラフィック班
できること : golang(歴1年弱)
できないこと : フロントエンド全般
はじめに
言語を理解するためには、何か一つアプリを作るといいと言われます。
しかし、初心者がアプリを作る上で壁になるのが「どういう(ディレクトリ)構成にすればいいんですか」問題です。
分からないからといって、ググってもよく分からないのが事実。(ググり方が分からないのもある)
ので、この記事では手取り早く開発に移れるように、最低限のディレクトリ構造を説明していきますよ~
構成
(私が見聞きした限り)こういう感じになります
├model
├router
├.gitignore
├readme.md
├go.mod
└go.sum
├main.go
└README.md
解説
私がtraPのハッカソンのレポジトリーを見て回った限り、「軽くアプリを作ってみよう」というレベルでは、router/modelに分けることが多いようです。ハッカソンで行われる一週間徹夜限界開発が「軽く」にあたるのかは諸説あり、です。
router
apiリクエストを書きます。
加えてapiで叩かれたデータが構造的に正しいか確認したり、データを加工して、modelに書かれている関数を呼び出します。
model
DBを操作して、データを参照したり、挿入したりする関数を書きます。この関数はrouterで呼び出されます。
またdb.go
を置きます。ここにdbとの接続をする関数を書き、main.goで呼び出します。
main.go
golangのmain関数が入っています。
main関数が最初に実行されます。リポジトリの他のコードや関数は、main関数の中で呼び出されるに過ぎません。
.gitignore
githubでリポジトリを作るときに、add .gitignore
にチェックを付け、templateで使用する言語を選択します。(ex..gitignore template :go
)
すると生成時に勝手に作成してくれます。
リポジトリを作成する際にチェックを入れ忘れた場合は、golangで書かれているバックエンドのレポジトリにあるものをコピペしてこれば良いと思います。
書式は難しくありませんが、どれを.gitignore
に加える/加えないのかの判断は初心者には難しいと思うので、素直にコピペするのが楽です。
readme.md
これもgithubでリポジトリを作成する際に、add README.md
にチェックをつけると自動で作成されます。
リポジトリの説明をMarkdownで書きます。readme.mdをプロジェクトのルートに置いておくと、githubでいい感じに表示してくれます。↓こんな感じ

Markdownの説明はここにあります。手軽にそこそこ整っているページを作れるのでよく使われています。情報系に進むなら、書けるようになって損はないと思います。
go.mod
リポジトリのルートで
$go mod init
を打ちます
すると
go mod tidy
を打ってくれ、と言われるので打ちます。go.modというファイルが自動で生成されます
go.sum
gormとかを使いたくなった時に、先ほどと同じくリポジトリのルートで
$go get ライブラリ
を打ちます
(gormの場合はgo get gorm.io/gorm
)といった具合です
このgorm.io/gorm
は「go get 名前(gormとか)」でググったら出てくると思います
これをしないと、いくらimport文に書いても、エラーが出ると思います。
そして最後に
$go mod tidy
を打ちます。すると自動でgo.sumのファイルが作成されます。定期的に、go mod tidy
をすると、勝手にいい感じに編集してくれるので便利です。
余談
こういうの(traQ)を最初から真似しようとすると痛い目をみます(私)
ディレクトリ構造を極めようとすると、アーキテクチャの勉強が関わってきますが、初心者にはハードルが高いと聞きました。最近よく聞くクリーンアーキテクチャはこのページに詳しく載っています(英語)。
いかがでしたか
次のSwanさんの記事はこちらです