v1.3からのディレクトリ構成をもう一度調べるはいこんにちは。v1.3.0-rc.0がリリースされました。前リリースからの大きな変更として、Phoenixプロジェクトのディレクトリ構成がガラッと変わります。新たな構成に対応したジェネレータは、phoenix.*ではなくphx.*というタスクになっています。感がありますが、phoenix.serverやphoenix.routesもdeprecatedになり、phx.server、phx.routesになっていくようです。github.com以前v1.3以降でどんな構成になるのか調べたのですが、改めて調べておきましょう。joe-noh.hatenablog.comphx.newまずはv1.2以前のphoenix.newと、v1.3から入るphx.newでつくられるプロジェクト構成を比較してみます。Phoenixのリポジトリをcloneして、installerディレクトリの中で以下のコマンドを発行。Phoenixのリビジョンは1.3.0-rc.0タグのついた4d608bfです。directoryと怒られたのですが、ディレクトリ構成が見たいだけなので--dev無しで。つくられたディレクトリをtreeで見るとこんな形式。一部省略してあります。views以前書いたwebがlib配下に入るmodelという概念がなくなるはそのままのようですが、加えて、これまでweb/static配下にあったcss、jsや、package.json、brunch-config.jsがまるっとトップレベルのassetsに移っています。見慣れないapplication.exというファイルがありますが、これは上の例だとapp_with_phoenix_new.exに当たるもので、名称が変更されるようです。全体的にディレクトリ構成とモジュール名の対応関係がキチンとしていて、生成されたlib/app_with_phx_new/web/page_controller.exではAppWithPhxNew.Web.PageControllerモジュールが定義されていました。endendただ、よく見るとweb.exが入る場所が一段深くなっていて、lib/app_with_phx_new/web/web.exとなっています。ForumのJoséのコメントによると、意図したものであるようです。phx.gen.json次はphx.gen.jsonを試してみます。age:integerのように、スキーマのモジュール名とテーブル名、テーブル構造を引数に与えていましたが、Accountsという第一引数が増えています。helpにある例をそのまま実行してみます。ecto.migrate引数に与えたAccountsがどこに効いているかというと、lib/app_with_phx_new/accounts/user.exのようにuserのひとつ上の名前空間になっています。テーブル名も、特に指定しないとaccounts_usersとなるようです。コンソールに出ていませんが、しれっとlib/app_with_phx_new/accounts/accounts.exも作られていました。このAccountsモジュールはいわゆる「境界づけられたコンテキスト」のひとつで、他のモジュール、例えばUserControllerは、Userモジュールに定義した関数を使ったり、Repo.all(User)のようなことはせず、このAccountsモジュール経由でユーザの操作を行うようにしましょうね、という意図があるようです。生成されたファイルの中を見ても、UserControllerのindexアクションでは、Accounts.list_usersを使ってユーザ一覧を得るようになっていました。Userモジュールはスキーマ定義があるだけでほぼ空っぽで、テストもUserではなくAccountsモジュールのものが作られています。生成されたAccountsモジュールの中に以下の関数が定義されており、少々やりすぎではという印象でした。Accountsモジュールが太っていきそうなので、自分ならこれは今まで通りUserモジュールに移します。ここにchangeset/2を書きたいendなお、lib/app_with_phx_new/web/controllers/fallback_controller.exという馴染みのないものがありますが、ちょっとここでは深掘りしません。まとめざっくりまとめると、PhoenixはElixirアプリケーションのWebフロントとして考えるテーブルと直接対応していないコンテキストモジュールをAPIの境界とし、ここにロジックを書くということをフレームワークが緩く強制するということのようです。JavaScriptと言ってもすでにインタネットに情報があります。...2017-01-11あっちこっちでpreload問題こんばんは。Ectoでは関連を明示的にpreloadすることがよくあ...2016-09-10PhoenixでモデルのSchemaに無い属性をレスポンスのJSONに含めるはいっこんばんは。APIを書いてて迷ったことが...2016-08-28Gettextの使い方メモはいコンバンハ。オプションが追加された昨日は途中で寝ながらエントリを書きました。Propertyが定義されていればそれを使い、定義されていなければデフォルト値を使うSassの変数pre-commitが便利Svelteコンポーネントをテストするときはテスト用コンポーネントを書くといい気がしたSvelteのstoreでバリデーションを実装するRenderでmonorepo管理されたアプリケーションを動かす月別アーカイブはてなブログをはじめよう!Joe_nohさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。