Your SlideShare is downloading. ×
0
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Elixirだ 第6回
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Elixirだ 第6回

107

Published on

社内Elixir勉強会 第5回の資料

社内Elixir勉強会 第5回の資料

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
107
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×