SlideShare a Scribd company logo
1 of 20
Download to read offline
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に対応したら記事を記載
ご静聴ありがとうございました

More Related Content

What's hot

Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加するWeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する裕士 常田
 
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
DeNA×マネーフォワード×Wantedly RailsエンジニアセミナーDeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
DeNA×マネーフォワード×Wantedly RailsエンジニアセミナーNao Minami
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かすyy yank
 
Real World PHP in pixiv
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixivKenta USAMI
 
Gunmaweb#13 enalica
Gunmaweb#13 enalicaGunmaweb#13 enalica
Gunmaweb#13 enalicaivoryworks .
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術Hiromi Ishii
 
Haskell Night: LT モナドで作る正規表現コンビネータライブラリ
Haskell Night: LT モナドで作る正規表現コンビネータライブラリHaskell Night: LT モナドで作る正規表現コンビネータライブラリ
Haskell Night: LT モナドで作る正規表現コンビネータライブラリAkihiro Harai
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできることkamiyam .
 
Infrastructure as codeのススメ
Infrastructure as codeのススメInfrastructure as codeのススメ
Infrastructure as codeのススメkanji htmt
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04敦志 金谷
 
JavaScript ライブラリーを使い倒そう #buildinsider
JavaScript ライブラリーを使い倒そう #buildinsiderJavaScript ライブラリーを使い倒そう #buildinsider
JavaScript ライブラリーを使い倒そう #buildinsiderTsuyoshi Yasunishi
 
Ansible x softlayer Provisioning
Ansible x softlayer ProvisioningAnsible x softlayer Provisioning
Ansible x softlayer Provisioningsoftlayerjp
 
美乳とPHP7 on Docker - てきとうなさいと。べぇたばん
美乳とPHP7 on Docker - てきとうなさいと。べぇたばん美乳とPHP7 on Docker - てきとうなさいと。べぇたばん
美乳とPHP7 on Docker - てきとうなさいと。べぇたばん侑弥 濱田
 
Kotlinについて学んだコト
Kotlinについて学んだコトKotlinについて学んだコト
Kotlinについて学んだコトiPride Co., Ltd.
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype IntroductionTeppei Sato
 

What's hot (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
 

Viewers also liked

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

Viewers also liked (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の本気をみるのです
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (8)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Cowboyとelixir