SlideShare uma empresa Scribd logo
1 de 27
Hello WebApp,
Hello Phoenix
2016/8/31 tokyo.ex#5 おーはら
Agenda
自己紹介
|> 趣旨
|> Phoenixとは?
|> webアプリとは?
|> webアプリの構造
|> Phoenixの構造
|> Why 軽量
|> Why 高速
|> Why 安定
|> 周辺ツール/情報
|> 不足しているもの
|> まとめ
自己紹介
• おーはら@ohrdev
– 基盤技術部@ドリコム
• 仕事/技術スタック
– 広告サービスのお世話
– 全社基盤システムのお世話
– Elixir/Erlang/Ruby/Lisp/etc…
• Elixirアプリ: 本番稼動:2、開発/検証: 1
– Elixirアプリ: 運用1年半/v:1.0.0 -> 1.3.1(elixir)
– Phoenixアプリ: 運用1年/v:1.0.0 -> 1.2.0(phoenix)
趣旨
• ターゲット
– (Elixir is 何? な方)
– Webアプリ is 何? な方
– Phoenix is 何? な方
• ゴール
– Webアプリケーションの構造がわかる
– Phoenixとは何なのかがわかる
– Phoenixと他のWebアプリフレームワークの違い
がわかる
– Phoenixの周辺ライブラリ(何があるか)がわかる
Phoenixとは?
• Elixirで実装された
• MVCパターンの
• 高生産性、高パフォーマンスな
• Webアプリケーションフレームワーク
• リアルタイムweb(channel/websocket)を提供
この発表ではスコープ外とさせてください
Webアプリとは?
• インターネット/ネットワークを介して使用する
アプリケーション
– ここではwebブラウザ上で動作するとします
– Ex) wiki、blog、掲示板、ECサイト、etc
– 何らかのフレームワーク/ライブラリを利用して作
る事が多い
Webクライアント
(Webブラウザ)
Webサーバー
Request
Response
Webアプリとは?
Webサーバー
Webアプリ
HTTP
WebSocket
etcnginx
Apache
h2o
cowboy
etc
I/F定義
Python: WSGI
Perl: PSGI
Ruby: Rack
Clojure: Ring
Lisp: clack
Haskell: WAI
Scala: SSGI
Elixir: Plug
データベース
Python: Django
Perl: Catalyst
Ruby: Rails
Clojure: Compojure
Lisp: caveman2
Hskell: Yesold
Scala: Play
Elixir: Phoenix
DBドライバ/ORM
Python: -
Perl: -
Ruby: ActiveRecord
Clojure: java.jdbc
Lisp: CLSQL/CL-DBI
Hskell: HDBC
Scala: Slick
Elixir: Ecto
Webアプリの構造
Webサーバー
Controller
Router
Action
Model
Bussiness Logic
Database
View
Template
DB driverORM
WAF I/F
ControllerがModelの
情報をViewにPush
MVCモデルPush型
Phoenixの構造
cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
Plug.Conn
Plug.Conn
リクエスト/コネク
ションを抽象化した
構造体
複数のplugを
パイプライン
plug:
Plug.Connを入力して
Plug.Connを出力
function
(関数)
endpoint
router/pipeline
controller
Why 軽量
cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
コネクションを受ける(accept)毎に、それを処理するErlangプ
ロセス(軽量,OSのスレッド・プロセスではない)が生成される
Phoenixというより、cowboy/ranchが軽量
Phoenixはcowboy/plugの薄いハンドラー + ジェネレー
タ
ここの処理がOSのスレッド、プロセスだとHeavy
Phoenixの構造
cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
function
(関数)
View:
データをhtml/json/etcに変
換/renderするモジュール
Template:
マークアップ+埋め込み
Elixir/ループ/etc、eex
compile
データを入力して
マークアップを出力
Why 高速
cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
function
(関数)
compile
Linked List(データ)を使って、テンプレートをビルドする
(遅い・ボトルネックになる)文字列の連結は行わない
多くのWAFでテンプレートの
文字列連結処理がボトルネックになる
Elixirの文字列はイミュータブル
もっとも大きい文字列のコピーのみアプリ内に保持する
のでキャッシュが適切に動作する
view/template
Phoenixの構造
cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
Erlang VM上で動作するモ
ジュールという形体で提供
Why 安定
cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
OS
ErlangVM
OTP
cowboy Ecto Phoenix plug
障害耐性
監視、再起動、etc
並行プログラミング
の為のフレームワー
ク/パターン
周辺ツール/情報
• モジュール/プロジェクト管理
– mix
• ジェネレーター/タスク
周辺ツール/情報
• ディレクトリ構造
– 指標/レール
– 基本はmixベース
– MVC関連: web
– 静的ファイル:
• Input: web/static
• Output: priv
• brunch.io(等)を使って
アセットコンパイル(変
更可能)
不足しているもの
• 日本語の情報
– 「プログラミングElixir」
不足しているもの
• 日本語の情報
– 「プログラミングElixir」 !
• モジュール、ライブラリ
– http://www.modulecounts.com
不足しているもの
不足しているもの
モジュール/ライブラリ不足
モジュール/ライブラリ不足
まとめ
• Webアプリケーションの構造を紹介しました
• Phoenixの構造を紹介しました
• Phoenixの特徴を紹介しました
• 「プログラミング Elixir」発売おめでとうござい
ます
• 「プログラミングElixir」を読んで、みんなでライ
ブラリを書きましょう⭐️

Mais conteúdo relacionado

Mais procurados

iOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトiOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクト
Shuichi Tsutsumi
 

Mais procurados (14)

パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
 
Cowboyとelixir
CowboyとelixirCowboyとelixir
Cowboyとelixir
 
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!
 
iOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトiOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクト
 
SoftLayerにゅうもん(2016/03/04 SoftLayer勉強会)
SoftLayerにゅうもん(2016/03/04 SoftLayer勉強会)SoftLayerにゅうもん(2016/03/04 SoftLayer勉強会)
SoftLayerにゅうもん(2016/03/04 SoftLayer勉強会)
 
すこやかRails
すこやかRailsすこやかRails
すこやかRails
 
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
 
[jjug] Java と Benchmark
[jjug] Java と Benchmark[jjug] Java と Benchmark
[jjug] Java と Benchmark
 
COOKPAD tab 勉強会 2014.04.24
COOKPAD tab 勉強会 2014.04.24COOKPAD tab 勉強会 2014.04.24
COOKPAD tab 勉強会 2014.04.24
 
いま OS X アプリがアツい
いま OS X アプリがアツいいま OS X アプリがアツい
いま OS X アプリがアツい
 
iOSエンジニアの最近 株式会社マネーフォワード
iOSエンジニアの最近 株式会社マネーフォワードiOSエンジニアの最近 株式会社マネーフォワード
iOSエンジニアの最近 株式会社マネーフォワード
 
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
 
iOSアプリエンジニアの最近
iOSアプリエンジニアの最近iOSアプリエンジニアの最近
iOSアプリエンジニアの最近
 
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
Raspberry Piで撮った写真を共有するアプリ on SoftLayerRaspberry Piで撮った写真を共有するアプリ on SoftLayer
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
 

Destaque

Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya Okano
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
Shinya Okano
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
Shinya Okano
 

Destaque (20)

軽量のススメ
軽量のススメ軽量のススメ
軽量のススメ
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
Python勉強会資料(MessageBoard作成)
Python勉強会資料(MessageBoard作成)Python勉強会資料(MessageBoard作成)
Python勉強会資料(MessageBoard作成)
 
kay-jpmobile
kay-jpmobilekay-jpmobile
kay-jpmobile
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
 
Biblnk
BiblnkBiblnk
Biblnk
 
Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013
 
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
 
Cowboyとphoenixの速度比較
Cowboyとphoenixの速度比較Cowboyとphoenixの速度比較
Cowboyとphoenixの速度比較
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
 
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HAGunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
 
Django learning Part2
Django learning Part2Django learning Part2
Django learning Part2
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96
 
ゲームインフラとGoogle Cloud Platformと酒!
ゲームインフラとGoogle Cloud Platformと酒!ゲームインフラとGoogle Cloud Platformと酒!
ゲームインフラとGoogle Cloud Platformと酒!
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
 
Django 1.9
Django 1.9Django 1.9
Django 1.9
 

Semelhante a hello waf, hello phoenix

PHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexPHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 Silex
Masao Maeda
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Noritada Shimizu
 

Semelhante a hello waf, hello phoenix (20)

Elixirハンズオン2
Elixirハンズオン2Elixirハンズオン2
Elixirハンズオン2
 
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
 
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
Swimming in the Sea of ELF - AV Tokyo 2015 Workshop #MalwareMustDie
Swimming in the Sea of ELF - AV Tokyo 2015 Workshop #MalwareMustDieSwimming in the Sea of ELF - AV Tokyo 2015 Workshop #MalwareMustDie
Swimming in the Sea of ELF - AV Tokyo 2015 Workshop #MalwareMustDie
 
PHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexPHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 Silex
 
20140629 firefoxos-devenv
20140629 firefoxos-devenv20140629 firefoxos-devenv
20140629 firefoxos-devenv
 
関東Firefox OS勉強会6th「Firefox OS」
関東Firefox OS勉強会6th「Firefox OS」関東Firefox OS勉強会6th「Firefox OS」
関東Firefox OS勉強会6th「Firefox OS」
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
Selenium WebDriver,Cypress,TestCafeの違いを調べてみました
Selenium WebDriver,Cypress,TestCafeの違いを調べてみましたSelenium WebDriver,Cypress,TestCafeの違いを調べてみました
Selenium WebDriver,Cypress,TestCafeの違いを調べてみました
 
開発中のiOSアプリ紹介 #okamoba
開発中のiOSアプリ紹介 #okamoba開発中のiOSアプリ紹介 #okamoba
開発中のiOSアプリ紹介 #okamoba
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
Elixir言語紹介
Elixir言語紹介Elixir言語紹介
Elixir言語紹介
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
 
サービスを日々運用し続けながら最新版のRailsに追従させる極意
サービスを日々運用し続けながら最新版のRailsに追従させる極意サービスを日々運用し続けながら最新版のRailsに追従させる極意
サービスを日々運用し続けながら最新版のRailsに追従させる極意
 
Spring tools4
Spring tools4Spring tools4
Spring tools4
 
Silverlight+COMにチャレンジ
Silverlight+COMにチャレンジSilverlight+COMにチャレンジ
Silverlight+COMにチャレンジ
 
FirefoxOS勉強会#7 カメラアプリの作り方
FirefoxOS勉強会#7 カメラアプリの作り方FirefoxOS勉強会#7 カメラアプリの作り方
FirefoxOS勉強会#7 カメラアプリの作り方
 
Fn project爆誕
Fn project爆誕Fn project爆誕
Fn project爆誕
 
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
 

Mais de Tsunenori Oohara

失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
Tsunenori Oohara
 

Mais de Tsunenori Oohara (15)

meguro.rb LT
meguro.rb LTmeguro.rb LT
meguro.rb LT
 
Elixir解答
Elixir解答Elixir解答
Elixir解答
 
パンチラに関する考察
パンチラに関する考察パンチラに関する考察
パンチラに関する考察
 
how-to-learn-elixir
how-to-learn-elixirhow-to-learn-elixir
how-to-learn-elixir
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LTRe:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
 
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
 
tokyo.ex3 LT
tokyo.ex3 LTtokyo.ex3 LT
tokyo.ex3 LT
 
Elixir lang bootstrap
Elixir lang bootstrapElixir lang bootstrap
Elixir lang bootstrap
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2
 
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
 
elixir in production
elixir in productionelixir in production
elixir in production
 
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
 
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 

Último

Último (7)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

hello waf, hello phoenix