0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-31

連載を通して簡単なブログアプリを作成しつつ 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?