はじめに
- Elixir 楽しんでいますか
- HTTPクライアントライブラリHTTPoison、すんごい速いJSONライブラリJason等、Elixirには便利なものがHexと呼ばれる形で提供されています
-
Hexを使う際にはこれまでは、
mix new hello_world
って感じでプロジェクトを作って、mix.exs
に依存関係を書いて、mix deps.get
でインストールするという手順が必要です - これって面倒くさくないですか1
- 朗報です
- Mix.install/2というものが、Elixir 1.12から追加されます
- これを使うことにより、ちょっとしたお試し用
.exs
ファイルでお手軽にElixirプログラムをイゴかすことができます - 本記事は、2021/04/15(木)19:00 〜 21:00に開催されたOkazaKirin.beam #49での成果です
- @pojiro さん、ありがとうございます!
Elixirをインストールする
- https://qiita.com/torifukukaiou/items/aecb1297672163f7d5f4#how-to-install-elixir
- 2021/04/15現在、
1.12.0-rc.0
をインストールしてください
ソースコードを書く!
awesome.exs
Mix.install([{:jason, "~> 1.2"}, {:httpoison, "~> 1.8"}])
"https://qiita.com/api/v2/items?query=elixir"
|> HTTPoison.get!()
|> Map.get(:body)
|> Jason.decode!()
|> Enum.map(& Map.take(&1, ["title", "url"]))
|> IO.inspect()
実行する
$ elixir awesome.exs
[
%{
"title" => "Livebookを動かす (Elixir)",
"url" => "https://qiita.com/torifukukaiou/items/3847c68293ed9b94ba2d"
},
%{
"title" => "②Elixirユーザ認証ライブラリ「phx_gen_auth」の本番向け改造点:バリデーションのカスタマイズ",
"url" => "https://qiita.com/piacerex/items/5f11e33db748830c7636"
},
%{
"title" => "Nx,Axonで始めるゼロから作るディープラーニング 7章畳み込みニューラルネットワーク",
"url" => "https://qiita.com/the_haigo/items/a4be7812b97bdddd6c1c"
},
%{
"title" => "Elixirのコレクションとマップについて",
"url" => "https://qiita.com/Gsann/items/82c1b41939d9319a0219"
},
%{
"title" => "[javascript] ダブルタップでブラウザが拡大するのを防ぐ",
"url" => "https://qiita.com/ELIXIR/items/1d007313c09489738e26"
},
%{
"title" => "初心者(2年ぶり3度目)がブラウザ上からFirebaseにHello Worldをホストする",
"url" => "https://qiita.com/ELIXIR/items/37d8a4139ec5d346e1ac"
},
%{
"title" => "【毎日自動更新】Java開発者のためのAzure入門(2021/4/6–2021/5/9) LGTMランキング!",
"url" => "https://qiita.com/torifukukaiou/items/9cfefb20ec347514576b"
},
%{
"title" => "①Elixirユーザ認証ライブラリ「phx_gen_auth」の本番向け改造点:ユーザ登録時等のメール通知追加",
"url" => "https://qiita.com/piacerex/items/35dc7ee8129b9a1deb9d"
},
%{
"title" => "Elixir, Phoenix, LiveView & PubSubでリアルタイムにページ更新",
"url" => "https://qiita.com/mnishiguchi/items/b528dccde6c531206eb9"
},
%{
"title" => "PhoenixのAPIサーバー向け簡易トークン認証",
"url" => "https://qiita.com/mnishiguchi/items/2a447f9138c5b61e1147"
},
%{
"title" => "Elixir/PhoenixアプリをGitHub ActionsでGigalixirに継続的デプロイする",
"url" => "https://qiita.com/mokichi/items/efe4e87763bfdf589d28"
},
%{
"title" => "clubhouseを用いた画像の送受信",
"url" => "https://qiita.com/ELIXIR/items/01e4a4336243c8195a6e"
},
%{
"title" => "Microsoft Ignite Keynoteとtogetherしようぜ with Elixir",
"url" => "https://qiita.com/torifukukaiou/items/64616a2999f8628a10ed"
},
%{
"title" => "Nx,Exla GPUをdockerでビルドしbenchを回してみた",
"url" => "https://qiita.com/the_haigo/items/d1d1b62bfb9fd2013c17"
},
%{
"title" => "[Arduino]短間隔におけるdeep sleepの有効性",
"url" => "https://qiita.com/ELIXIR/items/a38337ea83ddc318e8ad"
},
%{
"title" => "Nxで始めるゼロから作るディープラーニング Nx.Defn.Kernel.gradを読む",
"url" => "https://qiita.com/the_haigo/items/593926922a1d72591c3d"
},
%{
"title" => "PlatformIOでRaspberry Pi Pico を動かす(Windows,Arduinoフレームワーク)",
"url" => "https://qiita.com/ELIXIR/items/8a7a24f6aa64972ec819"
},
%{
"title" => "Phoenixで Error: Node Sass does not yet support your current environmentになった話",
"url" => "https://qiita.com/daiki04752/items/208dc5e44ee6a0349368"
},
%{
"title" => "Nxで始めるゼロから作るディープラーニング 5章誤差逆伝播法",
"url" => "https://qiita.com/the_haigo/items/f273a9c687302507d79d"
},
%{
"title" => "paiza.IO の API を優しく触ってみる",
"url" => "https://qiita.com/Gart/items/9ed028ffecdbf9ecaf2a"
}
]
Hexたちはどこにインストールされたの?
- https://github.com/elixir-lang/elixir/blob/fe4d5468a1ca4b5699802aecc568e178bd4219ed/lib/mix/lib/mix.ex#L538-L540
- 環境変数
MIX_INSTALL_DIR
で設定された場所か、Path.join(Mix.Utils.mix_cache(), "installs")
です -
Path.join(Mix.Utils.mix_cache(), "installs")
を評価すると、macOSの場合/Users/<username>/Library/Caches/mix/installs
- でした
installs_root =
System.get_env("MIX_INSTALL_DIR") ||
Path.join(Mix.Utils.mix_cache(), "installs")
Wrapping up
- Elixir 1.12の正式リリースが待ち遠しいですね
- I can't wait.
- Enjoy Elixir
-
まあ、本格的に何かを作る時には
mix new
するものなので、気にはしてなかったのですが、Mix.install/2なんてものがでると聞くと、ただちょっとHTTP GETしたいだけなのに面倒だなあ〜 とちょっぴりおもうようになってしまいました。記事をわかりやすくするために「面倒くさい」なんて書いてしまいましたが、言葉の綾です。 ↩