スポンサーリンク

2015年9月20日

[Elixir]ezファイルを作成して、"mix archive.install"する

とある錬金術師の万能薬(Elixir)

Goal

.ezファイルを作成して、”mix archive.install”する。

Dev-Environment

OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5

Wait a minute

カスタムタスクを作成した後、そのプロジェクト内もしくはダウンロードしたプロジェクトでしか使えないのは不便ですね。
mixが使えれば、どこからでも呼べるコマンドにしたいですね。
具体的には、”archive.install”でezファイルをインストールして、
mixコマンドからどのディレクトリにいても呼べるようにしたいです。
というわけで、やっていきましょう!!

Index

mix archive.build
|> Preparation
|> mix archive.build
|> Extra

Preparation

プロジェクトの準備をします。
以前、こちらの記事をやっているからは飛ばしても構いません。
プロジェクトを作成します。

Example:

>cd path/to/create/directory
>mix new ez_sample
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/ez_sample.ex
* creating test
* creating test/test_helper.exs
* creating test/ez_sample_test.exs

Your mix project was created successfully.
You can use mix to compile it, test it, and more:

    cd ez_sample
    mix test

Run `mix help` for more commands.

>cd ez_sample

>mix test

Directory: lib/mix

ディレクトリを作成。

Directory: lib/mix/tasks

ディレクトリを作成。
適当なカスタムタスクを作成します。
ただ、引数を表示するだけのカスタムタスク。

File: mix/tasks/ez_sample.ex

defmodule Mix.Tasks.EzSample do
  use Mix.Task

  @shortdoc "ez sample"

  def run(args) do
    IO.puts (inspect args)
  end
end

mix archive.build

それでは、.ezファイルに固めてmixにインストールできるようにします。

Example:

>mix archive.build
Generated archive ez_sample-0.0.1.ez with MIX_ENV=dev
.exファイルを作成するのは、これだけ(笑)
次は、mixにインストールします。
>mix archive.install ez_sample-0.0.1.ez
Are you sure you want to install archive ez_sample-0.0.1.ez? [Yn] y
* creating c:/Users/user_name/.mix/archives/ez_sample-0.0.1.ez
今回使っているプロジェクト以外の適当なディレクトリに移動してからカスタムタスクを試す。
>cd appropriate/path

>mix ez_sample hoge
["hoge"]

>mix ez_sample hoge huge foo:bar
["hoge", "huge", "foo:bar"]

Extra

手を動かすことはない。
依存関係のライブラリがある場合注意が必要。
ex_mark2pdfと言うライブラリを作成していたのだが、
そのライブラリは、earmarkライブラリに依存している。
ex_mark2pdfを.ezファイルに固めて使ってみたところ、
earmarkの関数がないと言われる。
方法があるのか分からないが、オプションなしで使うと、
依存関係先の機能(関数)は使えない模様。

Speaking to oneself

今回は、.ezファイルへの固め方でした。
探す必要がないくらい簡単でしたorz
ex_mark2pdfは…
作ったはいいけど、あまり使えないライブラリに仕上がってしまった。(まだ、v0.0.1だが…)
今のままだと、プロジェクト内でしか利用ができない!!
自分でmarkdownのparserを作るしかないのか!?

Bibliography

特になし。

人気の投稿