LoginSignup
3
0

More than 1 year has passed since last update.

mix_install_examplesからbandit.exsの紹介です(Elixir)

Last updated at Posted at 2022-03-12

吹くからに秋の草木のしをるればむべ山風を嵐と言ふらむ

Advent Calendar 2022 71日目1の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私のAdvent Calendar 2022 一覧


はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

Mix.install/2のサンプル集であるmix_install_examplesからbanditを紹介します。

What's Mix.install/2 ?

Mix.install/2は、Elixir 1.12から追加されました。
Elixirでライブラリ(Hex)を追加するのは、1.11まではmix newでプロジェクトを作らないといけないなど、ひと手間必要でした。
Mix.install/2を使うことで、ちょっとした1ファイルで収まるようなスクリプトを書く際に.exsのみで完結できるようになりました。

具体例

具体例です。
私がよく使ういつものサンプルです。

Qiita APIを使わせていただいて、Elixirタグがついた最新の記事を20件取得しています

Mix.install [{:req, "~> 0.2.1"}]

"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))

Qiitaさん、いつもありがとうございます!!!


bandit.exs

おもしろそうなサンプルってことで、今日はbanditを楽しんでみます。

What's bandit ?

Bandit is an HTTP server for Plug apps.

作者によるElixirConfの発表ビデオが公開されています。

Run

それでは、bandit.exsを動かしてみます。

以下、そのまま掲載します。

bandit.exs
Mix.install([
  {:bandit, ">= 0.0.0"}
])

defmodule Router do
  use Plug.Router
  plug(Plug.Logger)
  plug(:match)
  plug(:dispatch)

  get "/" do
    send_resp(conn, 200, "Hello, World!")
  end

  match _ do
    send_resp(conn, 404, "not found")
  end
end

bandit = {Bandit, plug: Router, scheme: :http, port: 4000}
require Logger
Logger.info("starting #{inspect(bandit)}")
{:ok, _} = Supervisor.start_link([bandit], strategy: :one_for_one)

# unless running from IEx, sleep idenfinitely so we can serve requests
unless IEx.started?() do
  Process.sleep(:infinity)
end

実行

git clone https://github.com/wojtekmach/mix_install_examples.git
cd mix_install_examples
elixir bandit.exs

結果

ブラウザで、 http://127.0.0.1:4000/ にアクセスしてみてください。
Hello, World!と表示されます。

スクリーンショット 2022-03-12 23.40.07.png

ブラウザで、 http://127.0.0.1:4000/bad にアクセスしてみてください。
not foundと表示されます。
レスポンスは、404を返しています。


Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Enjoy Elixir:bangbang::bangbang::bangbang:
$\huge{Enjoy\ Elixir🚀}$

今回は、mix_install_examplesの中から、bandit.exsをご紹介をしました。
banditを利用するとLINEアプリやSlackアプリを簡単に作れます。

開発を楽しめます。

今後も他のサンプルをご紹介していきます。
また、シンプルでいい例をおもいついたら、プルリクを送ってみるのはいいかもしれません。
私は、おもいついた場合には、プルリクを送ってみる気でいます :rocket::rocket::rocket:

以上です。


I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.

We Are The Alchemists, my friends!

  1. @kaizen_nagoya さんの「「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 1日目 Most Breakthrough Generator」から着想を得て、模倣いたしました。

3
0
0

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
0