SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
ElixirでCowboyを
使ってみる
自己紹介
名前:橘田 隼一
TwitterID:hayabusa333
興味:カーネル、GC、Erlang、Elixir
お仕事:派遣ウェッブプログラマ
所属:Joel教、翔鶴瑞鶴仲良し姉妹同盟
やっていること
・ElixirChanges
- Elixirの日々の変更点まとめ
・PhoenixChanges
- Phoenixの日々の変更点まとめ
・週刊Elixirライブラリ
- Elixirのライブラリの紹介
・CowboyのUserGuideの翻訳
- Coboyのことはじめ記事翻訳
Cowboyとは
・Erlangで書かれた高速なモジュラー
形式のHTTPサーバ
・HTTP1.1/Websocke 対応
・ErlangVMで動かすHTTPサーバだ
とCowboyが一強
・Plugを使えば、もっと簡単にでき
るけど、今日は直接さわるよー
Cowboyで静的ページを表示
http://d.hatena.ne.jp/hayabusa333/20150813/cowboy_elixir_static_pages
新規プロジェクトを作成
$ mix new static_hello_world ̶sup
# mix new Elixirの新規プロジェクトを作成します
# ̶sup をつけることによって supervision treeを含んだ
OTPアプリケーションで作成されます
# 通常のmix newではsupervisorがない状態なので注意が
必要です
mix.exsを記載
def application do
[applications: [:logger, :cowboy, :ranch],
mod: {StaticHelloWorld, []}]
end
# mod: {StaticHelloWorld, []} にてアプリケーションのコールバッ
クモジュールとして指定してます
# StaticHelloWorldはsupervison treeとして起動します
defp deps do
[{ :cowboy, "1.0.0" }]
end
supervisor.exを記載
defmodule StaticHelloWorld.Supervisor do
use Supervisor
# supervisiorモジュールを起動するため
def start_link(_) do
{:ok, sup} = Supervisor.start_link(__MODULE__, [],
name: :supervisor)
end
# supervisorモジュールを起動する際に init/1 を渡す必要がある
def init(_) do
processes = []
# one_for_oneは自分自身がダメになったら他人に影響されず
# 自分自身を再起動するという戦略です。
{:ok, {{:one_for_one, 10, 10}, processes}}
end
end
static_hello_world.exを記載
defmodule StaticHelloWorld do
def start(_type, _args) do
dispatch = :cowboy_router.compile([
{ :_, [
# http://localhost:8080/ でアクセスされた場合は
static_hello_world を使うと指定
{"/", :cowboy_static, {:priv_file, :static_hello_world,
index.html"}} ] }
])
# http通信にて使用する起動環境を設定します
{ :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env,
[{:dispatch, dispatch}]}])
end
end
priv/index.html を記載
適当に静的ページを記載
Cowboyを起動
$ mix deps.get
$ mix run --no-halt
デモ
Cowboyで動的ページを表示
新規プロジェクト作成から
supervisor.exを記載までは
ほぼ同じなためカット
dynamic_hello_world.exを記載
defmodule DynamicHelloWorld do
def start(_type, _args) do
dispatch = :cowboy_router.compile([
{ :_,
[
{"/", DynamicPageHandler, []}
]}
])
{ :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env,
[{:dispatch, dispatch}]}] )
end
end
dynamic_page_handler.exを記載
defmodule DynamicPageHandler do
def init(_type, req, []) do
{:ok, req, :no_state}
end
def handle(request, state) do
# Http通信にて返信する内容を自作する
dynamic = Dynamic"
{ :ok, reply } = :cowboy_req.reply( 200, [{"content-type", "text/html"}],
"#{dynamic} Hello World", request)
{:ok, reply, state}
end
def terminate(reason, request, state) do
:ok
end
end
デモ
ソースコード
https://github.com/hayabusa333/cowboy-elixir-example
今後
・動的ページを表示する方法をまとめる
・COOKIE情報を送信する方法を記載
・WebSocket通信を行う方法を記載
・HTTP2に対応したら記事を記載
ご静聴ありがとうございました

Contenu connexe

Tendances

Gunmaweb#13 enalica
Gunmaweb#13 enalicaGunmaweb#13 enalica
Gunmaweb#13 enalica
ivoryworks .
 

Tendances (20)

Build Dockferile with Haskell
Build Dockferile with HaskellBuild Dockferile with Haskell
Build Dockferile with Haskell
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加するWeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する
 
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
DeNA×マネーフォワード×Wantedly RailsエンジニアセミナーDeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かす
 
Real World PHP in pixiv
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixiv
 
Gunmaweb#13 enalica
Gunmaweb#13 enalicaGunmaweb#13 enalica
Gunmaweb#13 enalica
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
Ppl
PplPpl
Ppl
 
Haskell Night: LT モナドで作る正規表現コンビネータライブラリ
Haskell Night: LT モナドで作る正規表現コンビネータライブラリHaskell Night: LT モナドで作る正規表現コンビネータライブラリ
Haskell Night: LT モナドで作る正規表現コンビネータライブラリ
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできること
 
Infrastructure as codeのススメ
Infrastructure as codeのススメInfrastructure as codeのススメ
Infrastructure as codeのススメ
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04
 
JavaScript ライブラリーを使い倒そう #buildinsider
JavaScript ライブラリーを使い倒そう #buildinsiderJavaScript ライブラリーを使い倒そう #buildinsider
JavaScript ライブラリーを使い倒そう #buildinsider
 
Ansible x softlayer Provisioning
Ansible x softlayer ProvisioningAnsible x softlayer Provisioning
Ansible x softlayer Provisioning
 
美乳とPHP7 on Docker - てきとうなさいと。べぇたばん
美乳とPHP7 on Docker - てきとうなさいと。べぇたばん美乳とPHP7 on Docker - てきとうなさいと。べぇたばん
美乳とPHP7 on Docker - てきとうなさいと。べぇたばん
 
Kotlinについて学んだコト
Kotlinについて学んだコトKotlinについて学んだコト
Kotlinについて学んだコト
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
 

En vedette

アイマスで分かるプログラマ
アイマスで分かるプログラマアイマスで分かるプログラマ
アイマスで分かるプログラマ
hayabusa333
 
Cbで解るjojo up
Cbで解るjojo upCbで解るjojo up
Cbで解るjojo up
hayabusa333
 
DevLove2012 懇親会LT
DevLove2012 懇親会LTDevLove2012 懇親会LT
DevLove2012 懇親会LT
hayabusa333
 
RubyでBLコマンド実装
RubyでBLコマンド実装RubyでBLコマンド実装
RubyでBLコマンド実装
hayabusa333
 
漏れのある抽象化の法則
漏れのある抽象化の法則漏れのある抽象化の法則
漏れのある抽象化の法則
hayabusa333
 

En vedette (20)

Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
 
自動化のその前に
自動化のその前に自動化のその前に
自動化のその前に
 
アイマスで分かるプログラマ
アイマスで分かるプログラマアイマスで分かるプログラマ
アイマスで分かるプログラマ
 
Cbで解るjojo up
Cbで解るjojo upCbで解るjojo up
Cbで解るjojo up
 
DevLove2012 懇親会LT
DevLove2012 懇親会LTDevLove2012 懇親会LT
DevLove2012 懇親会LT
 
RubyでBLコマンド実装
RubyでBLコマンド実装RubyでBLコマンド実装
RubyでBLコマンド実装
 
Jenkinsとidobataで幸せな生活
Jenkinsとidobataで幸せな生活Jenkinsとidobataで幸せな生活
Jenkinsとidobataで幸せな生活
 
漏れのある抽象化の法則
漏れのある抽象化の法則漏れのある抽象化の法則
漏れのある抽象化の法則
 
ブラックボックステスト技法
ブラックボックステスト技法ブラックボックステスト技法
ブラックボックステスト技法
 
ホワイトボックステスト技法
ホワイトボックステスト技法ホワイトボックステスト技法
ホワイトボックステスト技法
 
現場にsahaginを取り入れた話
現場にsahaginを取り入れた話現場にsahaginを取り入れた話
現場にsahaginを取り入れた話
 
IEXを学ぶ
IEXを学ぶIEXを学ぶ
IEXを学ぶ
 
Elixirのhoundを使ってみて
Elixirのhoundを使ってみてElixirのhoundを使ってみて
Elixirのhoundを使ってみて
 
Getting test world
Getting test worldGetting test world
Getting test world
 
E言語スタック
E言語スタックE言語スタック
E言語スタック
 
Erlang and Elixir
Erlang and ElixirErlang and Elixir
Erlang and Elixir
 
派遣社員が現場にRubyを取り入れるまで
派遣社員が現場にRubyを取り入れるまで派遣社員が現場にRubyを取り入れるまで
派遣社員が現場にRubyを取り入れるまで
 
Elixir v1.3 で入るかもしれない機能
Elixir v1.3 で入るかもしれない機能Elixir v1.3 で入るかもしれない機能
Elixir v1.3 で入るかもしれない機能
 
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ
 
Serverspecの本気をみるのです
Serverspecの本気をみるのですServerspecの本気をみるのです
Serverspecの本気をみるのです
 

Dernier

Dernier (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Cowboyとelixir