SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
第6回 - Phoenixだ -
GMO Pepabo, Inc.
Joe Honzawa
2015/6/25 Elixir勉強会
Elixirだ
前回やったこと
> Mix
> ドキュメンテーション
> タスクを作ろう
> Dialyzerで型チェック
今回の内容
> Phoenixをちょっと飛ばす
> インストールとプロジェクト作成
> ファイルを眺める
> PhoenixのWebSocket
> 実装
v0.13.1 使います
ゴール
リアルタイム通信できるWebアプリを
Phoenixでつくる
Phoenix
> Elixirで1番イケてるWAF
> Railsに強く影響されてる
> もちろんMVC
> Plugベース
> WebSocket標準装備
作者のChris McCord
Plug
> コネクションの抽象化
> Rubyで言うところのRack
> Plug.Conn構造体
RailsでRackを触る頻度よりも、
PhoenixでPlugを触る頻度のほうが高い
インストール
まずは公式
www.phoenixframework.org
TOP > GUIDES > Installation
インストール
$ mix archive.install 
https://…/phoenix_new-0.X.Y.ez
archive.install
> $HOME/.mix/archivesに入る
> どこでもタスクが使えるようになる
> どこでもphoenix.newし放題
New!!
$ mix phoenix.new my_app
$ cd ./my_app
$ mix phoenix.server
ファイルを眺める
いっぱーい
!"" README.md
!"" brunch-config.js
!"" config
!"" deps
!"" lib
!"" mix.exs
!"" mix.lock
!"" node_modules
!"" package.json
!"" priv
!"" test
#"" web rails new したときの気分だぜ
大事なディレクトリ
web
!"" channels ← for WebSocket
!"" controllers
!"" models
!"" router.ex
!"" static ← sassやjs(ES6 OK)
!"" templates ← .html.eex files
!"" views ← templatesをレンダ
#"" web.ex ← みんなこれをuseする
設定
config
!"" config.exs
!"" dev.exs
!"" prod.exs
!"" prod.secret.exs
#"" test.exs
共通設定と各環境設定
.gitignore済
priv
priv
!"" repo
$   #"" migrations
#"" static
!"" css
!"" images
!"" js
#"" robots.txt
web/staticから
生成されるので
.gitignore済
フロント周り
!"" brunch-config.js
!"" node_modules
#"" package.json
デフォルトでbrunchが使われる
Phoenixの
WebSocket
ソ
ケ
ッ
ト
チ
ャ
ン
ネ
ル
チ
ャ
ン
ネ
ル
チ
ャ
ン
ネ
ル
サーバ
ざっくり
クライアント(JavaScript)
サーバ
ざっくり
クライアント(JavaScript)
handle_out/3handle_in/3
chan.pushで送信 chan.onで受信
broadcast/3 push/3
実装
今日のレシピ
https://github.com/Joe-noh/shout
Pull Request #1
コミットを順に見ていきます
コードとスライドをキョロキョロしてね
※1 今回はecto無し
$ mix phoenix.new shout --no-ecto
> Ecto
> DBラッパー
> 言語組み込みのクエリ言語
> デフォルトは要PostgreSQL
※2 テスト
> 一応書いてありますが
> 参考程度に
> 「へー」って感じで
入力フォームを設置
> RootRouteのTemplateを編集
> web
> templates
> page
> index.html.eex
WebSocket接続確立
> サーバ側
> channel “topic:*”, …
> ワイルドカード
> join/3
> OKなら{:ok, socket}を返す
> ダメなら{:error, msg}
WebSocket接続確立
> クライアント側
> socket = new Socket(“/ws”)
> socket.connect()
> WebSocketに接続
> chan = socket.chan(…)
> chan.join
> チャンネルに接続
jQueryを読む
> そのまんま
> application.html.eexに書いとく
クライアントの発言を…
> クライアント側
> chan.push(id, msg)
> C→Sへメッセージを送る
クライアントの発言を…
> サーバ側
> handle_in/3
> C→Sのメッセージを処理
> {:reply, rep, socket}
> {:noreply, socket}
> {:stop, why, socket}
> {:stop, why, rep, socket}
クライアントの発言を…
> サーバ側
> broadcast!/3
> 接続済みの全クライアントに送信
> ここでのIDは ”bc:msg”
サーバからのbroadcastを…
> クライアント側
> chan.on(“bc:msg”, callback)
> “bc:msg”受信時に発火
handle_outで発言に…
> handle_out/3
> 送信されるメッセージをイジれる
> フィルタリングなど
> ここでは”bc:msg”を処理
> body末尾に”!!!!”を追加
サーバ
ざっくり(再)
クライアント(JavaScript)
handle_out/3handle_in/3
chan.pushで送信 chan.onで受信
broadcast/3 push/3
今回やったこと
> Phoenixをちょっと飛ばした
> インストールとプロジェクト作成
> ファイルを眺める
> PhoenixにおけるWebSocket
> 流れを追った

Contenu connexe

Tendances

Nagios大好きさんが喋るzabbixとAWS連携の話
Nagios大好きさんが喋るzabbixとAWS連携の話Nagios大好きさんが喋るzabbixとAWS連携の話
Nagios大好きさんが喋るzabbixとAWS連携の話
Takayuki Saito
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 

Tendances (16)

Nagios大好きさんが喋るzabbixとAWS連携の話
Nagios大好きさんが喋るzabbixとAWS連携の話Nagios大好きさんが喋るzabbixとAWS連携の話
Nagios大好きさんが喋るzabbixとAWS連携の話
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
Bot Framework v4 開発 Tips 2018-11
Bot Framework v4  開発 Tips 2018-11Bot Framework v4  開発 Tips 2018-11
Bot Framework v4 開発 Tips 2018-11
 
Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19
 
120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
Firefox FAQ
Firefox FAQFirefox FAQ
Firefox FAQ
 
Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201
 
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyPHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
 
Windowsを踏台にしてSSH接続
Windowsを踏台にしてSSH接続Windowsを踏台にしてSSH接続
Windowsを踏台にしてSSH接続
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
Create android app can send SMS and Email by React Natice
Create android app can send SMS and Email by React NaticeCreate android app can send SMS and Email by React Natice
Create android app can send SMS and Email by React Natice
 
Firefox5+HTML5×5
Firefox5+HTML5×5Firefox5+HTML5×5
Firefox5+HTML5×5
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 

En vedette (7)

elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバ
 
Elixirだ 第4回
Elixirだ 第4回Elixirだ 第4回
Elixirだ 第4回
 
Elixirだ 第5回
Elixirだ 第5回Elixirだ 第5回
Elixirだ 第5回
 
Elixirだ 第3回
Elixirだ 第3回Elixirだ 第3回
Elixirだ 第3回
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 

Similaire à Elixirだ 第6回 (8)

Phoenix Framework
Phoenix FrameworkPhoenix Framework
Phoenix Framework
 
Seleniumまとめ
SeleniumまとめSeleniumまとめ
Seleniumまとめ
 
Rselenium Dockerとの接続
Rselenium Dockerとの接続Rselenium Dockerとの接続
Rselenium Dockerとの接続
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
cordova/electronの構造を知る
cordova/electronの構造を知るcordova/electronの構造を知る
cordova/electronの構造を知る
 
Firefox mobile for android internals
Firefox mobile for android internalsFirefox mobile for android internals
Firefox mobile for android internals
 
WEBがネイティブに勝つために - kaumoCTOMeetup(いっちマン)
WEBがネイティブに勝つために - kaumoCTOMeetup(いっちマン)WEBがネイティブに勝つために - kaumoCTOMeetup(いっちマン)
WEBがネイティブに勝つために - kaumoCTOMeetup(いっちマン)
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
 

Plus de Joe_noh

やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
Joe_noh
 

Plus de Joe_noh (20)

パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことパフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったこと
 
Vue.jsのユニットテスト
Vue.jsのユニットテストVue.jsのユニットテスト
Vue.jsのユニットテスト
 
Vuexと入力フォーム
Vuexと入力フォームVuexと入力フォーム
Vuexと入力フォーム
 
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後
 
サイクルOJTイントロダクション
サイクルOJTイントロダクションサイクルOJTイントロダクション
サイクルOJTイントロダクション
 
お産ウィークイントロダクション
お産ウィークイントロダクションお産ウィークイントロダクション
お産ウィークイントロダクション
 
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションモバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクション
 
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクションWebオペレーション研修イントロダクション
Webオペレーション研修イントロダクション
 
Web開発研修イントロダクション
Web開発研修イントロダクションWeb開発研修イントロダクション
Web開発研修イントロダクション
 
リーンキャンバス
リーンキャンバスリーンキャンバス
リーンキャンバス
 
もっとgit
もっとgitもっとgit
もっとgit
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注
 
DBにseedするライブラリつくった
DBにseedするライブラリつくったDBにseedするライブラリつくった
DBにseedするライブラリつくった
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
 
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)
 
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語いつかどこかで使えそうな英語
いつかどこかで使えそうな英語
 
NUTハッカソン2014成果報告
NUTハッカソン2014成果報告NUTハッカソン2014成果報告
NUTハッカソン2014成果報告
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術
 

Elixirだ 第6回