Help us understand the problem. What is going on with this article?

Elixir School で学ぶ (7) - Mix

More than 3 years have passed since last update.

概要

前回の続きです。

やったこと

9. Mix

Elixir のプロジェクト管理ツール Mix について学びます。
よく使うコマンドのみに限定します。

  • mix new
  • iex -S mix
  • mix compile
  • mix deps.get
  • mix test

環境

Elixir 1.3.1
Erlang/OTP 18 [erts-7.3]
Mix 1.3.1

教材

Mix · Elixir School

詳細

9.1. 新しいプロジェクト - mix new

新しいプロジェクトをつくってみます。

通常は mix new ですが、今回は "Programming Elixir 1.2" に載っている GitHubから Issues を取得するPhoenix アプリケーションをつくるので、mix phoenix.new github_issues とします。

» mix phoenix.new github_issues
* creating github_issues/config/config.exs
* creating github_issues/config/dev.exs
(中略)
Fetch and install dependencies? [Yn] Y 
* running mix deps.get
* running npm install && node node_modules/brunch/bin/brunch build

We are all set! Run your Phoenix application:

    $ cd github_issues
    $ mix phoenix.server

You can also run your app inside IEx (Interactive Elixir) as:

    $ iex -S mix phoenix.server

Before moving on, configure your database in config/dev.exs and run:

    $ mix ecto.create

自動的に mix deps.get を読んで依存モジュールをインストールしてくれます。
--no-brunch をつけずに実行した場合は、 npm install を実行してフロントエンドのビルドツール brunch をインストールします。

ご丁寧にその後のインタラクションも表示してくれて、サーバーの起動方法を示してくれます。

サーバーの起動は mix phoenix.server で、iex を使ってデバッグなどしたい場合は iex -S mix phoenix.server で起動します。

それぞれ起動時にコンパイルしてくれます (なので後述の mix compile を事前に実行する必要はありません)。

--no-ect をつけずに実行した場合、データベースに繋ぎにいくので、ユーザーとデータベースを事前に作成しておいてください。

9.2. 対話的な方法 - iex -S mix

というわけで、サーバーを起動してみます。

≫ iex -S mix phoenix.server
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

==> connection
Compiling 1 file (.ex)
Generated connection app
(中略)
[info] Running GithubIssues.Endpoint with Cowboy using http://localhost:4000
Interactive Elixir (1.3.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 05 Sep 18:37:49 - info: compiled 6 files into 2 files, copied 3 in 1.3 sec

この状態で、http://localhost:4000 にアクセスすると、ログが出力されます。

iex(3)> [info] GET /
[debug] Processing by GithubIssues.PageController.index/2
  Parameters: %{}
  Pipelines: [:browser]
[info] Sent 200 in 2ms

9.3. コンパイル - mix compile

前述のとおり、mix compile を手動で実行することはいまのところないですね、どういうときに手動実行するんだろう…

9.4. 依存関係を管理する - mix deps.get

依存関係は、mix.exs ファイル内の deps 関数で定義します。

初期状態はこんなかんじです。

mix.exs
~
  defp deps do
    [{:phoenix, "~> 1.2.0"},
     {:phoenix_pubsub, "~> 1.0"},
     {:phoenix_ecto, "~> 3.0"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 2.6"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:gettext, "~> 0.11"},
     {:cowboy, "~> 1.0"}]
  end
~

今回、GitHub API を使うので、tentacat というラッパーモジュールを使ってみます。

diff --git a/mix.exs b/mix.exs
index 9a46f8f..d652a9a 100644
--- a/mix.exs
+++ b/mix.exs
@@ -37,6 +37,7 @@ defmodule GithubIssues.Mixfile do
      {:phoenix_html, "~> 2.6"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
+     {:tentacat, "~> 0.5.3"},
      {:cowboy, "~> 1.0"}]
   end

インストールします。

» mix deps.get
Running dependency resolution
Dependency resolution completed
  certifi: 0.4.0
~

依存モジュールもろとも追加されました。

便利。

9.5. 環境

:dev, :test, :prod の三種類があります。

ローカルで開発しているときは自動的に :dev になり、mix test を実行したときは自動的に :test になります。

環境ごとの設定ファイルは、config/{env}.exs です。

環境を自分で定義したい場合、例えば staging を追加するなら、config/staging.exs に必要な設定を記載すれば、MIX_ENV=staging として環境を切り替えることができます。

9.6. その他のよく使うコマンド

mix test はユニットテストを実行するコマンドです。

» mix test
Compiling 15 files (.ex)
Generated github_issues app
....

Finished in 0.1 seconds
4 tests, 0 failures

Randomized with seed 726683

まとめ

  • 本当に基本的なコマンドのみ試しましたが、どれも分かりやすくて便利

次回は「10. Sigils」をやります。

nunulk
PHP, Laravel, オブジェクト指向プログラミング, デザインパターン, リファクタリング, 関数プログラミング, etc.
http://nunulk.hatenablog.com
phper-oop
ペチオブはオブジェクト指向ワーキンググループです。様々なエンジニアの方に参加頂いております。
https://phper-oop.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away