Help us understand the problem. What is going on with this article?

Google App Engine で始める Go 実践入門 Part 4 【ディレクトリ構成】

More than 1 year has passed since last update.

連載を通して簡単なブログアプリを作成しつつ Go/GAE について学んでいきます。
今回は ディレクトリ構成 についての説明です。

App Engine のディレクトリ構成

App Engine における開発では、アプリケーションのディレクトリ構成は少し特殊になります。

下記はディレクトリ構成の一例です。
(あくまでも一例となります。この構成が絶対ではありません。)

イメージが膨らみやすいように少しファイルも記載しています。

go-gae-blog-app-example
  ├── lib
  ├── model
  │     ├── Article.go
  │     ├── Comment.go
  │     └── User.go
  ├── module
  │     ├── admin
  │     │     ├── handler
  │     │     │     ├── article_handler.go
  │     │     │     └── user_handler.go
  │     │     └── main
  │     │           ├── node_modules
  │     │           ├── static
  │     │           │     ├── dist
  │     │           │     ├── public
  │     │           │     └── src
  │     │           ├── template
  │     │           ├── app.yaml
  │     │           ├── db.go
  │     │           ├── main.go
  │     │           └── package.json
  │     └── blog
  │           ├── handler
  │           │     ├── article_handler.go
  │           │     └── user_handler.go
  │           └── main
  │                 ├── node_modules
  │                 ├── static
  │                 │     ├── dist
  │                 │     ├── public
  │                 │     └── src
  │                 ├── template
  │                 ├── app.yaml
  │                 ├── db.go
  │                 ├── main.go
  │                 └── package.json
  ├── repository
  │     ├── article_repository.go
  │     ├── comment_repository.go
  │     └── user_repository.go
  ├── service
  │     ├── article_service.go
  │     ├── auth_service.go
  │     └── user_service.go
  ├── vendor
  ├── .gitignore
  ├── Gopkg.lock
  ├── Gopkg.toml
  └── README.md

App Engine の特殊な点として module という概念があります。
module は昔の呼び方で今は service に変わっていますが、service ディレクトリと名称が被ってしまうので旧名の module で話を進めます。

この module とは何かというと、 1 つ 1 つのアプリケーションだと認識して構いません。
App Engine におけるプロジェクトとモジュールの関係を整理すると次のようになります。

  • プロジェクト ≠ アプリケーション
  • モジュール = アプリケーション
  • プロジェクトは複数のモジュール(アプリケーション)を持つ ( 1 つ以上)
  • 課金はプロジェクト単位

「プロジェクトは複数のモジュールを持つ」というのが一番のポイントです。

例えば「ブログプロジェクト」の中で「ブログサイト」と「管理者用サイト」を同時に開発するといったスタイルです。

もちろん「ブログプロジェクト」の中で「ブログサイト」を開発し、「ブログ管理者プロジェクト」の中で「管理者用サイト」を開発するといったように、プロジェクトを分けるという選択肢もあります。

ここらへんは分断されたモノリス、整理されたモノリス、マイクロサービスといった話になってくるので状況によるかと思います。

先ほどのディレクトリ構成は整理されたモノリスを目指した構成になっています。
ドメイン領域のソースコードをプロジェクト内で共通化し、HTTPの処理や認可/認証の処理はモジュールごとにハンドリングするといった形です。

おわりに

次回のテーマは『Visual Studio Code』です。

よかったら Twitter フォローしてね。@_rema424

rema424
FPSげーまー。OW: 3600eDPI, 19.24cm/180°, Apex: 1080eDPI, 19.24cm/180°。うんちぷり。
michael-inc
マイケルはコミュニティサービスをつくる会社、「Community Builder」です。インターネットを通して人生がより豊かになるよう、人がつながる場所をつくりつづけます。
https://michael-inc.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした