こんにちは!
プログラミング未経験文系出身、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を使用した方法との差分を理解したい
前提
前回の記事の結果が長すぎるため、下記の条件でさらに絞り込みをします。
- Qiitaの記事一覧に対して"Elixir"で検索をかける(これは前回の記事と同じ)
- 1.の結果について、記事ごとの"title"と"url"と”tags”だけに絞り込む(←new!)
- 2.の結果について、先頭5件だけ表示する (←new!)
関数を追加
Mixプロジェクト内の関数のパイプにEnum.map/2
と、Enum.slice/2
を追加します
"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を起動します
iex -S mix
iex上で追加した関数を使用します
GetQiitaArticles.index
下記のレスポンスが返ってきました
[
%{
"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が起動できさえすればどこでも構いません。
iex
iex上でMix.installを使用します。
Mix.install(
[
{:httpoison, "~> 2.2"},
{:jason, "~> 1.4"}
]
)
HTTPoisonとJasonのインストールと実行がなされました。
:ok
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
下記のレスポンスが返ってきました。
[
%{
"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)を使用してレスポンスを比較します。
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 new等でプロジェクトを作成後、mix.exsのdeps関数内に記述し、さらに
感想
ライブラリの機能がどんなものかお試しする分にはMix.install
を使用し、プロジェクト作成をする場合はmix deps.get
を使用するという使い分けだと理解しました。
なお、今回の記事の執筆にあたって @torifukukaiouさんのこちらの記事を参考にさせていただきました。いつもAwesomeな記事をありがとうございます。
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩