はじめに
前回、Ubuntu16.04にPhoenixをセットアップしてみました。
今回は、Phoenixの公式ガイドラインを見ながら、構成などを確認していきます。
次回はガイドラインAdding Pagesです。
上、および、走ること
PhoenixフレームワークのUp And Runningの内容を確認していきます。
確認すると言っても、前回セットアップが終わってますので、以下の手順で最初のページ(localhost:4000
)が表示されるようになるはずです。
なお、一部Adding Pagesの内容も先取りしてます。
$ mix phoenix.new hello_phoenix
$ cd hello_phoenix
$ mix ecto.create
$ mix phoenix.server
概念
- Endpoint リクエストを処理するための入り口。Plugの管理や、Routerへのディスパッチを行う
- Router リクエストを解析して、適切なController/Actionにディスパッチする。パスやURL生成などのヘルパー提供。リクエストを処理するPipelineを定義する
- Pipeline Plugをグループ化して、ルートのセット毎に適用できる
- Controller リクエストを処理するAction関数を提供する
- Action データを準備してViewに渡す。Viewを介してレンダリングする。リダイレクトを行う
- View Templateをレンダリングする。表示レイヤ。表示のためのヘルパ関数提供
- Template その名の通り。事前のコンパイルされているので早い
- Channel 双方向通信のためのソケット管理。Controllerに同様の役割
- PubSub PubSub用の仮想レイヤーを提供
その他ライブラリ
-
Plug
-
WebApplicationを作るためのモジュール群
-
単純で軽量なので、Pipelineにおいて複数を階層的に配置することが可能
-
認証、パラメータの前処理、レンダリングまでいろいろ書くことができる
-
現在はCowboy専用
-
Ecto いわゆるDBラッパー
-
Repo DBへの接続を表す
-
Model データモデル
-
Query ModelとRepoをつなぐquery
-
Changeset Modelのデータをアプリケーションで使う前に加工するための定義。型変換やバリデーションなど
ソースツリー
ディレクトリhello_pheonix
直下は、次のようになっています。
├── README.md
├── _build/
├── brunch-config.js
├── config/
├── deps/
├── lib/
├── hello_phoenix
│ ├── endpoint.ex
│ └── repo.ex
└── hello_phoenix.ex
├── mix.exs
├── mix.lock
├── node_modules/
├── package.json
├── priv/
├── gettext/
│ ├── en/
│ └── errors.pot
├── repo/
│ ├── migrations/
│ └── seeds.exs
└── static/
├── css/
├── favicon.ico
├── images/
├── js/
└── robots.txt
├── test/
└── web/
- _build/ ビルドした結果の出力先
- brunch-config.js brunch.ioのconfigファイル
- config/ アプリケーションの環境(devとかprod)共通設定と、環境別設定の配置先
- deps/ erlang/elixirの依存ライブラリの展開先
- lib/ Endpointなどを提供。web/が更新を検知すると自動的にビルドするのに対して、libは更新を自動的には検知しない
- mix.exsとmix.lock mix用ファイル
- node_modules/ Node.js用ファイル
- package.json npm用ファイル
- priv/ 静的リソースの配置場所。ビルド時に必要であればweb/以下にコピーされる
- test/ unittest用
- web/ メインとなる作業場所。下記参照
ソースツリー(web)
hello_phoenix/web/
├── channels/
│ └── user_socket.ex
├── controllers/
│ └── page_controller.ex
├── gettext.ex
├── models/
├── router.ex
├── static/
│ ├── assets/
│ ├── css/
│ ├── js/
│ └── vendor/
├── templates/
│ ├── layout/
│ └── page/
├── views/
│ ├── error_helpers.ex
│ ├── error_view.ex
│ ├── layout_view.ex
│ └── page_view.ex
└── web.ex
- channels/ Channel用ファイルを格納
- controllers/ Controller用ファイルを格納。開発(dev)環境では、リクエスト時に更新があれば自動的に再ビルドされる(template, viewも同様)
- gettext.ex I18N用
- models/ Model用ファイル
- router.ex Routerファイル
- static/ privディレクトリからビルド時に必要なファイルがコピーされる
- template/ Template用ファイル。自動再ビルドの対象
- view/ View用ファイル。自動再ビルドの対象
-
web.ex ControllerやViewといったモジュールの定義を行うファイル。
use HelloPhoenix.Web, :controller
のように使用する
とりあえず間違いがあれば後で修正・追記する