02 アプリのコンパイル - ohr486/elixir_handson_demo2 GitHub Wiki
01-アプリの作成で、アプリの作成時にFetch and install dependencies? [Yn]
で
関連ライブラリを取得するかを聞かれました。
ここでY
として関連ライブラリをインストールした時には、以下の事が行われます。
Phoenixアプリが利用する関連ライブラリは、mix.exs
のdeps
関数の中に定義されています。
mix.exs
の中を見ると、以下の様にdeps
が定義されています。
defp deps do
[
{:phoenix, "~> 1.3.0"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"}
]
end
それぞれ、{<ライブラリ名>, <バージョン>}
のリストの形式で定義されます。
これらのライブラリは、ElixirとErlangのライブラリのホスティングサービスのhex.pmのホスティングサーバーから取得されます。
関連ライブラリを手動で取得したい時は、mix deps.get
とする事で取得できます。
mix deps.get
を実行すると以下の様になります。
$ mix deps.get
Running dependency resolution...
Dependency resolution completed:
cowboy 1.1.2
cowlib 1.0.2
file_system 0.2.2
gettext 0.13.1
mime 1.1.0
phoenix 1.3.0
phoenix_html 2.10.4
phoenix_live_reload 1.1.3
phoenix_pubsub 1.0.2
plug 1.4.3
poison 3.1.0
ranch 1.3.2
* Getting phoenix (Hex package)
Checking package (https://repo.hex.pm/tarballs/phoenix-1.3.0.tar)
Using locally cached package
* Getting phoenix_pubsub (Hex package)
Checking package (https://repo.hex.pm/tarballs/phoenix_pubsub-1.0.2.tar)
Using locally cached package
* Getting phoenix_html (Hex package)
Checking package (https://repo.hex.pm/tarballs/phoenix_html-2.10.4.tar)
Using locally cached package
* Getting phoenix_live_reload (Hex package)
Checking package (https://repo.hex.pm/tarballs/phoenix_live_reload-1.1.3.tar)
Using locally cached package
* Getting gettext (Hex package)
Checking package (https://repo.hex.pm/tarballs/gettext-0.13.1.tar)
Using locally cached package
* Getting cowboy (Hex package)
Checking package (https://repo.hex.pm/tarballs/cowboy-1.1.2.tar)
Using locally cached package
* Getting cowlib (Hex package)
Checking package (https://repo.hex.pm/tarballs/cowlib-1.0.2.tar)
Using locally cached package
* Getting ranch (Hex package)
Checking package (https://repo.hex.pm/tarballs/ranch-1.3.2.tar)
Using locally cached package
* Getting file_system (Hex package)
Checking package (https://repo.hex.pm/tarballs/file_system-0.2.2.tar)
Using locally cached package
* Getting plug (Hex package)
Checking package (https://repo.hex.pm/tarballs/plug-1.4.3.tar)
Using locally cached package
* Getting mime (Hex package)
Checking package (https://repo.hex.pm/tarballs/mime-1.1.0.tar)
Using locally cached package
* Getting poison (Hex package)
Checking package (https://repo.hex.pm/tarballs/poison-3.1.0.tar)
Using locally cached package
$
この時、取得したライブラリのバージョンを記述したmix.lock
というファイルが自動生成され、
deps
ディレクトリが生成され、そこの中にライブラリが配置されます。
deps以下のファイルを見てみると、関連ライブラリが配置されて入る事がわかります。
$ ls deps # depsディレクトリ内のファイルを表示
cowboy file_system mime phoenix_html phoenix_pubsub poison
cowlib gettext phoenix phoenix_live_reload plug ranch
$
また、mix.lock
には、それぞれのライブラリとそのバージョンが記述されます。
次に、mix deps.get
で取得したdeps以下のライブラリをコンパイルされます。
手動でコンパイルを実行したい時はmix deps.compile
とする事でコンパイルが走ります。
mix deps.compile
の実行結果は以下のとおりです。
$ mix deps.compile
17:32:24.973 [info] Compiling file system watcher for Mac...
17:32:25.846 [info] Done.
==> file_system
Compiling 6 files (.ex)
Generated file_system app
〜 略 〜
==> phoenix
Compiling 74 files (.ex)
Generated phoenix app
==> phoenix_live_reload
Compiling 4 files (.ex)
Generated phoenix_live_reload app
$
この時、コンパイルされたファイルは、_build
ディレクトリの中に入ります。
Elixirのソースコードをコンパイルしたファイルは拡張子が.beam
となる事から、beamファイルとも呼ばれます。
PhoenixアプリのJavaScriptやCSS、画像といった静的ファイルは、nodejs製のbrunch.ioという軽量のJS/CSSのタスクランナー/ビルドツールを使ってコンパイルされます。
brunchを使える様にする為に、assetsディレクトリ内で以下の様にbrunchのインストールを行ってください。
$ cd assets # assetsディレクトリに移動して
$ npm install
〜略〜
$ node node_modules/brunch/bin/brunch build
〜略〜
$
node node_modules/brunch/bin/brunch build
で静的ファイルのビルドを実行すると、
priv
ディレクトリ以下にコンパイルされた静的ファイルが配置されます。
Phoenixアプリはこのprivディレクトリ以下のファイルを参照して、ブラウザで画面を表示します。
ソースコードのコンパイルが終わったので、それではいよいよアプリを起動してみましょう。