Elixir umbrella
アンブレラプロジェクト(umbrella project)を作るには、--umbrella
フラグを渡してプロジェクトを作成する。
sh
mix new elixir_monorepo --umbrella
ディレクトリ構成
apps/main
から、packages/pure
を呼び出してみる。
sh
.
└── elixir_monorepo
├── apps
│ └── main
│ ├── index.exs
│ └── mix.exs
├── config
│ └── config.exs
├── mix.exs
└── packages
└── pure
├── lib
│ └── fizzbuzz.ex
├── mix.exs
└── test
├── fizzbuzz_test.exs
└── test_helper.exs
fizzbuzz
関数
elixir
defmodule FizzBuzz do
def fizzbuzz(n) do
cond do
rem(n, 15) == 0 -> "FizzBuzz"
rem(n, 3) == 0 -> "Fizz"
rem(n, 5) == 0 -> "Buzz"
true -> Integer.to_string(n)
end
end
end
mix.exs
elixir
defmodule Main.MixProject do
use Mix.Project
def project do
[
app: :main,
version: "0.1.0",
elixir: "~> 1.12",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
def application do
[
extra_applications: [:logger]
]
end
defp deps do
[
{:pure, path: "../../packages/pure"}
]
end
end
依存関係を取得。
sh
mix deps.get
依存関係をコンパイル
sh
mix deps.compile
elixir-practice/elixir_monorepo/apps/main/index.exs
で呼び出す。
elixir
result1 = FizzBuzz.fizzbuzz(1)
result2 = FizzBuzz.fizzbuzz(2)
result3 = FizzBuzz.fizzbuzz(3)
result4 = FizzBuzz.fizzbuzz(4)
result5 = FizzBuzz.fizzbuzz(5)
result6 = FizzBuzz.fizzbuzz(6)
result7 = FizzBuzz.fizzbuzz(7)
result8 = FizzBuzz.fizzbuzz(8)
result9 = FizzBuzz.fizzbuzz(9)
result10 = FizzBuzz.fizzbuzz(10)
result11 = FizzBuzz.fizzbuzz(11)
result12 = FizzBuzz.fizzbuzz(12)
result13 = FizzBuzz.fizzbuzz(13)
result14 = FizzBuzz.fizzbuzz(14)
result15 = FizzBuzz.fizzbuzz(15)
IO.puts(result1)
IO.puts(result2)
IO.puts(result3)
IO.puts(result4)
IO.puts(result5)
IO.puts(result6)
IO.puts(result7)
IO.puts(result8)
IO.puts(result9)
IO.puts(result10)
IO.puts(result11)
IO.puts(result12)
IO.puts(result13)
IO.puts(result14)
IO.puts(result15)
実行
sh
mix run apps/main/index.exs
実行結果
sh
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz