Skip to content

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