11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

#NervesJPAdvent Calendar 2021

Day 21

banditをイゴかしてみる

Last updated at Posted at 2021-12-20

2021/12/21(水)の回です。

はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:
Bandit Hexの話をします。
@zacky1972 先生に、Banditのことを教えてもらいました。

Bandit is an HTTP server for Plug apps.
Bandit is still a young project, and much work remains before it is ready for production use.


Bandit is written entirely in Elixir and is built atop Thousand Island.


Thousand Island is a modern, pure Elixir socket server, inspired heavily by ranch.

論よりRun :rocket::rocket::rocket:

とにかくイゴかしてみます1
YouTube動画を用意してみました。
まずはこちらをご覧ください。

動画では簡単なHTTP PostとHTTP Getを受け取っている様子を収めています。
ローカルではLINEのbotやslackのbotを作って動かすことができました。
その話はまた別の記事にまとめます。

LINEボットの作例 (基本:interrobang:のオウム返しボット)

動画で行っていること

以下、動画で行っていることをまとめておきます。

プロジェクトの作成

$ mix new hello_world --sup
$ cd hello_world

mix.exsにHexを追加

mix.exs
  defp deps do
     [
       # {:dep_from_hexpm, "~> 0.3.0"},
       # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
+      {:bandit, "~> 0.4.5"}
     ]
   end
 end

mix deps.get

$ mix deps.get

Write

lib/hello_world/my_plug.ex
defmodule HelloWorld.MyPlug do
  import Plug.Conn

  def init(options) do
    # initialize options
    options
  end

  def call(conn, opts) do
    IO.puts("== conn ==")
    IO.inspect(conn)

    {:ok, body, conn} = Plug.Conn.read_body(conn, opts)
    IO.puts("== conn ==")
    IO.inspect(body)

    conn
    |> put_resp_content_type("application/json")
    |> send_resp(200, body)
  end
end
lib/hello_world/application.ex
     children = [
       # Starts a worker by calling: HelloWorld.Worker.start_link(arg)
       # {HelloWorld.Worker, arg}
+      {Bandit, plug: HelloWorld.MyPlug, scheme: :http, options: [port: 4000]}
     ]

Run

$ iex -S mix

別のターミナルでcurlコマンド

# HTTP Post
$ curl -X POST -H "Content-Type: application/json" -d '{"name":"awesome", "age":42}' http://localhost:4000/api/v1/users


# HTTP Get
$ curl http://localhost:4000/api/v1/users

参考リンク

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

Banditのイゴかし方を説明しました。

Bandit is still a young project

どこかで聞いたことありますよね:interrobang::interrobang::interrobang:
$\huge{young}$
$\huge{ヤング}$

そうです:bangbang::bangbang::bangbang:
Nervesはナウでヤングなcoolなすごいやつ
これで、#NervesJPアドベントカレンダーに居座ってもいい理由ができました。

Banditには、これからも注目していきます!!!
Enjoy Elixir:rocket::rocket::rocket:

新しい試み

動画:movie_camera:をつけてみました。
動画:movie_camera:で説明をして、文章はコマンド例、ソースコード例だけにして特に説明はしませんでした3
このフォーマットが好評であれば続けていきたいと思います。

以下、動画:movie_camera:ってどうやって作ったの?、Qiitaに埋め込んだの? をご存じない方のための情報です。

ツールはmacOSに標準で入っているソフトを使いました。

  • その他 > スクリーンショット: 動画撮影
  • iMovie: 動画編集

説明のしゃべりを入れる場合には、Zoomのレコーディング機能を使えば比較的少ない機材で撮影ができます。
ただ言い間違えたりなんたりしたときの編集が面倒なので、今回はしゃべりを入れずに小粋な音楽だけにしてみました。

動画は8倍速(箇所によっては20倍速)にしてYouTubeに公開しています。
まだ遅いと感じる方は、YouTubeのほうで倍速にしてください。

Qiita記事の動画の埋め込みは、YouTubeの動画を表示している画面にて「右クリック > 埋め込みコードをコピー」にてコピーしたものをそのまま貼り付けました。

  1. 「動かしてみます」の意。おそらく西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針2イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg=

  2. 大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。

  3. いつもろくに説明していないと言われそう……

11
1
2

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
11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?