02 アプリのコンパイル - ohr486/elixir_handson_demo2 GitHub Wiki

02-アプリのコンパイル

01-アプリの作成で、アプリの作成時にFetch and install dependencies? [Yn]で 関連ライブラリを取得するかを聞かれました。

ここでYとして関連ライブラリをインストールした時には、以下の事が行われます。

elixirの関連ライブラリの取得

Phoenixアプリが利用する関連ライブラリは、mix.exsdeps関数の中に定義されています。 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には、それぞれのライブラリとそのバージョンが記述されます。

elixirの関連ライブラリのコンパイル

次に、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ディレクトリ以下のファイルを参照して、ブラウザで画面を表示します。

ソースコードのコンパイルが終わったので、それではいよいよアプリを起動してみましょう。

NEXT:03-アプリの起動

⚠️ **GitHub.com Fallback** ⚠️