JavaScriptを有効にしてください

【Elixir】mixコマンドを自作する

 ·  ☕ 3 分で読めます

【Elixir】clauses with the same name and arity の意味と対処方法

Elixirのプロジェクト管理ツールであるmixは、プロジェクトのコンパイル、テスト、依存関係の管理など、多くのタスクを簡単に実行できます。Elixirのプロジェクトでカスタムmixコマンドを作成する方法についてご紹介いたします。

Mixタスクのテンプレートを理解する

ElixirのMix.Taskモジュールを利用して独自のmixタスクを作成ができます。これには、モジュールでuse Mix.Taskを宣言し、run/1関数を定義する必要があります。

1
2
3
4
5
6
7
8
9
defmodule Mix.Tasks.YourCustomTask do
  use Mix.Task

  @shortdoc "ここにタスクの短い説明を記述します。"

  def run(args) do
    # タスクが実行された時のロジックをここに記述します。
  end
end

カスタムmixタスクを作成する

カスタムタスクを作成するには、プロジェクトのlibディレクトリにタスク用のファイルを作成します。例として、hello_worldというタスクを作成する場合、lib/mix/tasks/hello_world.exに以下の内容を記述します。

1
2
3
4
5
6
7
8
9
defmodule Mix.Tasks.HelloWorld do
  use Mix.Task

  @shortdoc "Hello Worldを表示します。"

  def run(_args) do
    IO.puts "Hello, World!"
  end
end

このコードは、mix hello_worldを実行したときに"Hello, World!“を出力するシンプルなタスクを作成します。

タスクの実行

カスタムタスクを作成した後、コマンドラインから直接呼び出せます。ただし、Elixirプロジェクトのルートディレクトリで実行する必要があります。

$ mix hello_world

アプリケーションの起動を組み込む

特定のカスタムタスクでは、アプリケーションのコンポーネントや環境に依存する処理が必要になる場合があります。これを実現するには、Mix.Task.run "app.start", []をタスクのrun関数内で呼び出すことで、タスク実行前にアプリケーションを起動できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
defmodule Mix.Tasks.Example do
  use Mix.Task

  @shortdoc "アプリケーションを起動して特定のタスクを実行します。"

  def run(_args) do
    Mix.Task.run "app.start", []
    # アプリケーションが起動した後の処理をここに記述します。
    IO.puts "アプリケーション起動後のタスクを実行中..."
  end
end

このステップは、アプリケーションのリソースや環境設定に依存するタスクを作成する際にとくに重要です。

まとめ

Elixirのmixを使って独自のタスクを作成することは、開発プロセスをカスタマイズし、効率化する強力な方法です。この記事では、基本的なカスタムmixタスクの作成方法を説明しました。Mix.TaskのAPIを深く探ることで、より複雑なタスクの作成も可能になります。Elixirの柔軟性とmixのパワーを最大限に活用して、開発体験を向上させましょう。

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer