はじめに
- 
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したいだけなのに面倒だなあ〜 とちょっぴりおもうようになってしまいました。記事をわかりやすくするために「面倒くさい」なんて書いてしまいましたが、言葉の綾です。 ↩
