Edited at
HanamiDay 24

Hanamiの2つの原則のうちの1つ モノリスファーストとは何なのか

More than 1 year has passed since last update.

モノリスとは一枚岩という意味で、マイクロサービスに対極に位置するものです。マイクロサービスという言葉を最初に使ったのは(おそらく)マーティンファウラーですが、彼は口を酸っぱくして「最初からマイクロサービスでつくるな」「まずはモノリスで始めよ(モノリスファースト)」といっています。

なぜ最初からマイクロサービスで作ってはいけないのでしょうか? それは初めからにマイクロサービスにしてしまうとメリットよりもデメリットのほうが大きくなってしまうからです。

ではHanamiがどのようにモノリスファーストを実現しているかをいていきましょう。


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)が入っています。

そしてそれぞれのアプリケーションにcontrollersviewsがあるのがわかります。

実はconfigのかなにはroutes.rbが入っています。

libディレクトをみるとここにはentitiesrepositoriesがあります。

entitiesはビジネスロジックを記述する場所で、repositoriesはDBとのやり取りを記述する場所です。

このようにコントローラやビューをアプリケーションごとに分離しながらビジネスロジックを共有することで、できるだけ管理可能な形でモノリスに保つというのがHanamiの特徴です。

いいね!


参考資料