mmag

ハマったことメモなど

Phoenix v1.3からディレクトリ構成が変わるっぽい

※ 多分に推測が含まれています。あとでちゃんと調べないと ※

今まさに海の向こうではElixir & Phoenix Conf 2016が行われているのですが、インタネッツを通してこんなツイートが流れてきました。

他のツイートを探していくと、Phoenix 1.3ではwebディレクトリがlib/my_app/webのようにlib以下へ入るとのこと。

.
├── assets
├── config
├── lib
│   └── my_app
│       └── web
│           ├── channels
│           ├── controllers
│           ├── templates
│           └── views
├── priv
└── test

これはPhoenixアプリにおいてwebという領域が特別な意味を持つように思われているという懸念から来ています。webはその名の通りWebからアプリケーションへアクセスするためのインターフェースであって、アプリの一部分に過ぎないということを強調する狙いがあるようです。

github.com

さらにModelという概念も無くなり、以下の様な構成になるそうです。

.
├── assets
├── config
├── lib
│   └── my_app
│       ├── blog
│       │   ├── comment.ex # schema
│       │   └── post.ex    # schema
│       ├── blog.ex
│       ├── sales
│       │   ├── order.ex   # schema
│       │   └── payment.ex # schema
│       ├── sales.ex
│       └── web
│           ├── channels
│           ├── controllers
│           ├── templates
│           └── views
├── priv
└── test

models以下に全てのスキーマが置かれる状態を解消したいようです。これまでの流れを思い出してみると、ずっと前はPhoenixにはモデルが無く、Ectoの出現によりそれがそのままモデル層として入りました。そのときはモデルのコードには、use Ecto.Modelという一行を書いていました。ですがその後、それがEcto.Schemaに変更されました。どこで読んだかうろ覚えですが、Ectoを使って得られるものはデータであり構造体であり、モデルと呼ぶのは適切ではない、というのがこの変更の理由だったと記憶しています。そして今回modelsディレクトリすら無くなるとのことで、Phoenixとしては原点回帰のような形になり、Ectoはwebディレクトリの中から出されるような格好となるようです。つまり、アプリケーションにおけるPhoenixの立ち位置がフロント側へ寄る構成になるという理解でよいのでしょうか。