コンテンツにスキップ

Elixir

設定例

[project]
name = "my-elixir-app"
root = "."
languages = ["elixir"]
[resolve.elixir]
app_name = "MyApp"
[[layers]]
name = "domain"
paths = ["lib/domain/**"]
dependency_mode = "opt-in"
allow = []
external_mode = "opt-out"
external_deny = []
[[layers]]
name = "usecase"
paths = ["lib/usecase/**"]
dependency_mode = "opt-in"
allow = ["domain"]
external_mode = "opt-out"
external_deny = []
[[layers]]
name = "infrastructure"
paths = ["lib/infrastructure/**"]
dependency_mode = "opt-out"
deny = []
external_mode = "opt-out"
external_deny = []

app_name の設定

[resolve.elixir] app_name には mix.exs:app に対応する PascalCase のモジュール名(例: MyApp)を指定します。

[resolve.elixir]
app_name = "MyApp" # mix.exs の :app が :my_app の場合

インポートの分類

Elixir の 4 種ディレクティブはすべて依存関係として解析されます。

ディレクティブ分類
aliasalias MyApp.Domain.User内部(app_name に一致)
alias with as:alias MyApp.Domain.User, as: U内部
importimport Enum外部
requirerequire Logger外部
useuse Ecto.Schema外部

モジュールとファイルパスの対応

内部モジュールのパスは以下のルールで解決されます:

MyApp.Domain.Userapp_name を除去 → Domain.User → lowercase → lib/domain/user.ex

非対応の機能

allow_call_patterns は Elixir では利用できません。Elixir は動的ディスパッチを使用するため、静的にレシーバ型を特定できないためです。