モノリスとは一枚岩という意味で、マイクロサービスに対極に位置するものです。マイクロサービスという言葉を最初に使ったのは(おそらく)マーティンファウラーですが、彼は口を酸っぱくして「最初からマイクロサービスでつくるな」「まずはモノリスで始めよ(モノリスファースト)」といっています。
なぜ最初からマイクロサービスで作ってはいけないのでしょうか? それは初めからにマイクロサービスにしてしまうとメリットよりもデメリットのほうが大きくなってしまうからです。
ではHanamiがどのようにモノリスファーストを実現しているかをいていきましょう。
Hanamiのモノリスファースト
Hanamiのアプリケーションのディレクトリ構造は以下のようになっています。
[] % tree -L 3
.
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── apps
│ ├── api_v1
│ │ ├── application.rb
│ │ ├── config
│ │ ├── controllers
│ │ └── types
│ └── web
│ ├── application.rb
│ ├── config
│ ├── controllers
│ ├── frontend
│ ├── node_modules
│ ├── package.json
│ ├── templates
│ ├── views
│ ├── webpack-assets.json
│ ├── webpack.config.coffee
│ └── yarn.lock
├── config
│ ├── boot.rb
│ ├── environment.rb
│ └── initializers
├── config.ru
├── lib
│ ├── my_app
│ │ ├── entities
│ │ ├── mailers
│ │ └── repositories
│ └── my_app.rb
apps
というディレクトリがポイントで、このなかに複数のアプリケーション(api_v1
, web
)が入っています。
そしてそれぞれのアプリケーションにcontrollers
とviews
があるのがわかります。
実はconfig
のかなにはroutes.rb
が入っています。
lib
ディレクトをみるとここにはentities
とrepositories
があります。
entitiesはビジネスロジックを記述する場所で、repositoriesはDBとのやり取りを記述する場所です。
このようにコントローラやビューをアプリケーションごとに分離しながらビジネスロジックを共有することで、できるだけ管理可能な形でモノリスに保つというのがHanamiの特徴です。
いいね!