3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mix.installとmix deps.getの比較

Last updated at Posted at 2024-08-29

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はMix.installとmix deps.getを比較して学んだことをまとめます。

目的

Mix.installの使いどころをmix deps.getとの差分で理解する

実行環境

Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.17.0
Erlang v27.0

今回やりたいこと

前回の記事で取得した、Qiitaの記事一覧に対して"Elixir"で検索をかける方法について、Mix.installを使用した方法との差分を理解したい

前提

前回の記事の結果が長すぎるため、下記の条件でさらに絞り込みをします。

  1. Qiitaの記事一覧に対して"Elixir"で検索をかける(これは前回の記事と同じ)
  2. 1.の結果について、記事ごとの"title"と"url"と”tags”だけに絞り込む(←new!)
  3. 2.の結果について、先頭5件だけ表示する (←new!)

関数を追加

Mixプロジェクト内の関数のパイプにEnum.map/2と、Enum.slice/2を追加します

lib/get_qiita_articles.ex
     "https://qiita.com/api/v2/items?query=elixir"
     |> HTTPoison.get!()
     |> Map.get(:body)
     |> Jason.decode!()
+    |> Enum.map(fn map ->
+      %{
+        "title" => map["title"],
+        "url" => map["url"],
+        "tags" => map["tags"]
+      }
+      |> Enum.slice(0..4)
     end

iexを起動します

bash
iex -S mix

iex上で追加した関数を使用します

iex
GetQiitaArticles.index

下記のレスポンスが返ってきました

iex
[
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "paiza.IO", "versions" => []}
    ],
    "title" => "paiza.ioでelixir その310",
    "url" => "https://qiita.com/ohisama@github/items/765c2f858c09ac7f8f16"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "CICD", "versions" => []},
      %{"name" => "Livebook", "versions" => []},
      %{"name" => "LivebookTeams", "versions" => []}
    ],
    "title" => "Livebook Teams で超簡単Webアプリ実装&リリース自動化",
    "url" => "https://qiita.com/RyoWakabayashi/items/8ef32cb58b339291ca5d"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "初心者向け", "versions" => []},
      %{"name" => "基礎", "versions" => []}
    ],
    "title" => "Phoenix Projectの作成からモーダル経由でのポストの作成と一覧への反映の処理の流れ part2",
    "url" => "https://qiita.com/akiraarika932/items/b6152a213b8e6fb96034"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "cloudflare", "versions" => []},
      %{"name" => "bedrock", "versions" => []},
      %{"name" => "Livebook", "versions" => []},
      %{"name" => "AIGateway", "versions" => []}
    ],
    "title" => "Elixir Livebook から Cloudflare の AI Gateway 経由で Amazon Bedrock を呼んでみる",
    "url" => "https://qiita.com/RyoWakabayashi/items/92ec17c5c078c2342c02"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "paiza.IO", "versions" => []}
    ],
    "title" => "paiza.ioでelixir その309",
    "url" => "https://qiita.com/ohisama@github/items/7419f6e680e61626f3d1"
  }
]

これと同じ結果をMix.install/2を使用して得たいと思います

Mix.installとは

  • mix deps.getせずに依存関係をインストールして実行するMixコマンド

(余談)mixとは?

  • mixとは、Elixirのビルドツール
  • mixコマンドがあることで私はライブラリの依存関係や環境ごとのビルド周りを気にせずコーディングだけに集中できます
  • mix helpでmixコマンド一覧が見れます

使ってみた

iexを起動します。mix deps.getの時と異なりプロジェクト作成はしないので、ディレクトリはiexが起動できさえすればどこでも構いません。

bash
iex

iex上でMix.installを使用します。

iex
Mix.install(
  [
    {:httpoison, "~> 2.2"},
    {:jason, "~> 1.4"}
  ]
)

HTTPoisonとJasonのインストールと実行がなされました。

iex
:ok

iex上で「関数を追加」の節と同じ関数をべた書きして実行してみます。

iex
     "https://qiita.com/api/v2/items?query=elixir"
     |> HTTPoison.get!()
     |> Map.get(:body)
     |> Jason.decode!()
     |> Enum.map(fn map ->
       %{
         "title" => map["title"],
         "url" => map["url"],
         "tags" => map["tags"]
       }
       |> Enum.slice(0..4)
     end

下記のレスポンスが返ってきました。

iex
[
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "paiza.IO", "versions" => []}
    ],
    "title" => "paiza.ioでelixir その310",
    "url" => "https://qiita.com/ohisama@github/items/765c2f858c09ac7f8f16"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "CICD", "versions" => []},
      %{"name" => "Livebook", "versions" => []},
      %{"name" => "LivebookTeams", "versions" => []}
    ],
    "title" => "Livebook Teams で超簡単Webアプリ実装&リリース自動化",
    "url" => "https://qiita.com/RyoWakabayashi/items/8ef32cb58b339291ca5d"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "初心者向け", "versions" => []},
      %{"name" => "基礎", "versions" => []}
    ],
    "title" => "Phoenix Projectの作成からモーダル経由でのポストの作成と一覧への反映の処理の流れ part2",
    "url" => "https://qiita.com/akiraarika932/items/b6152a213b8e6fb96034"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "cloudflare", "versions" => []},
      %{"name" => "bedrock", "versions" => []},
      %{"name" => "Livebook", "versions" => []},
      %{"name" => "AIGateway", "versions" => []}
    ],
    "title" => "Elixir Livebook から Cloudflare の AI Gateway 経由で Amazon Bedrock を呼んでみる",
    "url" => "https://qiita.com/RyoWakabayashi/items/92ec17c5c078c2342c02"
  },
  %{
    "tags" => [
      %{"name" => "Elixir", "versions" => []},
      %{"name" => "paiza.IO", "versions" => []}
    ],
    "title" => "paiza.ioでelixir その309",
    "url" => "https://qiita.com/ohisama@github/items/7419f6e680e61626f3d1"
  }
]

念の為比較ツール(Winmerge)を使用してレスポンスを比較します。

image.png

Mix.installとmix deps.getで同じ結果を得ていることが確認できました(^▽^)/

まとめ

Mix.installとmix deps.getはライブラリのインストールの実行をするという機能は同じ。
一方で下記の違いがあることが分かりました。

プロジェクトを作る/作らない

  • Mix.installを使用する場合はmix new等でプロジェクトを作成せず、下記いずれかの方法をとります(他にも方法あれば教えていただければ幸いですm(_ _"m))
    • iex内に記述する(今回検証した方法はこちら)
    • .exsファイルを作成してファイル内部に記述する
    • Livebookのdependencies and setupブロック部分に記述する
  • mix deps.getを使用する場合は下記の方法をとります
    • mix new等でプロジェクトを作成後、mix.exsのdeps関数内に記述し、さらにmix deps.getする

感想

ライブラリの機能がどんなものかお試しする分にはMix.installを使用し、プロジェクト作成をする場合はmix deps.getを使用するという使い分けだと理解しました。

なお、今回の記事の執筆にあたって @torifukukaiouさんのこちらの記事を参考にさせていただきました。いつもAwesomeな記事をありがとうございます。

~Elixirの国のご案内~

↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。

We Are The Alchemists, my friends!:bouquet:1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2

  1. @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。

  2. @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中!

3
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?