SlideShare a Scribd company logo
第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
> 流れを追った

More Related Content

PPTX
VMware Fusion と WiFi ネットワークでの注意点
PPTX
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
PDF
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
PDF
真Drone入門
PPTX
実は怖くないDevOps
PDF
Drone.io のご紹介
PDF
OSC 2014 Tokyo/Spring 「Zabbix 2.2を使ってみよう」
PPTX
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
VMware Fusion と WiFi ネットワークでの注意点
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
真Drone入門
実は怖くないDevOps
Drone.io のご紹介
OSC 2014 Tokyo/Spring 「Zabbix 2.2を使ってみよう」
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~

What's hot (16)

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

Viewers also liked (7)

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

Similar to Elixirだ 第6回 (7)

PPTX
Phoenixでblog作った
PDF
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
PPTX
Elixirハンズオン2
PPTX
hello waf, hello phoenix
PDF
Phoenix Framework
PPTX
2023-10-10_ElixirConf US 2023に参加してきました(レポート)
Phoenixでblog作った
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixirハンズオン2
hello waf, hello phoenix
Phoenix Framework
2023-10-10_ElixirConf US 2023に参加してきました(レポート)

More from Joe_noh (20)

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

Elixirだ 第6回