LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Organization

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

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

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」から着想を得て、模倣いたしました。

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
What you can do with signing up
0