狠狠撸

狠狠撸Share a Scribd company logo
UNICAST?ワークショップ



?業務で使っている技術を大公開?



  触って学ぶWebSocket
  作って游ぶ搁耻产测翱苍搁补颈濒蝉
まずはこちらをご覧下さい



{ tweet-search-stream へのリンク }
イマドキのWebサイトは、
「更新」ボタンなんて押させません。

       ↓
     非同期通信
こんなことをします。
前半...
 もうすぐ夜明け!
 新しい通信方式「WebSocket」について学ぶ


後半...
 あっという間にWebサービスを作れる!
 業界標準フレームワーク「RubyOnRails」を
 体感する
WebSocketってなに?
とってもスマートな通信方式です...

- 使うとこんなものができます -
?リアルタイムに表示内容が更新されるページ
?閲覧者全員にアクションを起こせるページ
掘り下げる前に...



予備知識を確認しておきましょう
そもそもページはどうやって見てるの?
ブラウザって?サーバって?

①リクエスト




③画面に反映       ②レスポンス
サーバって何だ!
下記のような仕事に特化したコンピュータ
+そこで動いているアプリです。

データ置き場だったり、
クライアントの呼びかけに答えたり、

大きなラックにびっしり詰まっていて
かっこよかったりします。
クライアントって何だ!
みなさんがお持ちのPC、
またはブラウザの事です。

弁護士に対する相談者?クライアント
医者に対する患者?クライアント(クランケ?)
サーバに対する皆さん?クライアント
やりとりされるデータ
リクエスト                                              レスポンス
GET /docs/sw/http-header.html HTTP/1.1             HTTP/1.1 200 OK

Host: www.kanzaki.com                              Date: Wed, 05 Sep 2001 06:06:19 GMT

Accept: text/html, text/plain, text/sgml, */*;q=0.01 Server: Apache/1.3.12

Accept-Encoding: gzip, compress                    Content-Location: http-header.html.ja

Accept-Language: ja,en                             Vary: negotiate,accept-language,accept-charset

If-Modified-Since: Sun, 2 Sep 2001 11:31:06 GMT TCN: choice

User-Agent: Lynx/2.8.2                             P3P: policyref="/w3c/p3p.xml",CP="NOI DSP COR ADM DEV OUR STP"

                                                   Last-Modified: Wed, 05 Sep 2001 06:02:09 GMT

                                                   Connection: close

                                                   Content-Type: text/html; charset=shift_jis

                                                   Content-Language: ja



                                                   +ページの内容
大事な事がひとつ
画像やら音声やらの数だけリクエストを送る




ページを1つ開くのにも、それなりの通信コス
トがかかっている
予備知識はこれくらいです。
  WebSocketのお話に移りましょう。
通信方法の違い?
いつもの通信
どんな通信方式?
WebSocket
いつもの通信は、ここがよくない!

●
    接続がいちいち切れてしまう。
    ?サーバから自発的にアクションを起こせない
    ?サーバで起こっていることを知るには、問い
     合わせなければならない。ハズれあり
●
    普通の問い合わせ方をすると、ページ全体が更
    新されてしまう
    ?無駄が多い
●
    サーバは呼びかけた人にしか応答しない
    ?つまらん(?ε?)
やりとりされるデータ
リクエスト                                              レスポンス
GET /docs/sw/http-header.html HTTP/1.1             HTTP/1.1 200 OK

Host: www.kanzaki.com                              Date: Wed, 05 Sep 2001 06:06:19 GMT

Accept: text/html, text/plain, text/sgml, */*;q=0.01 Server: Apache/1.3.12

Accept-Encoding: gzip, compress                    Content-Location: http-header.html.ja

Accept-Language: ja,en                             Vary: negotiate,accept-language,accept-charset

If-Modified-Since: Sun, 2 Sep 2001 11:31:06 GMT TCN: choice

User-Agent: Lynx/2.8.2                             P3P: policyref="/w3c/p3p.xml",CP="NOI DSP COR ADM DEV OUR STP"

                                                   Last-Modified: Wed, 05 Sep 2001 06:02:09 GMT

                                                   Connection: close

                                                   Content-Type: text/html; charset=shift_jis

                                                   Content-Language: ja



                                                   +ページの内容
でもWebSocketなら...

●
    通信開きっぱなし
    ?サーバは閲覧者の居場所がわかる
    ?好きなタイミングで通知できる
    ?閲覧者は何もしなくていい(通知を待つだけ)
    ?サーバは閲覧者全員の居場所がわかる
    ?閲覧者全員にメッセージを送れる
    ?やりとりするのは欲しいデータだけ
    ?無駄が少ない
このページはこんな感じで动いています。
サーバ
?問い合わせに応答。データ置き場にも

何かの役割に特化すると...
アプリケーションサーバ
?色々やるよ!提供したいサービス次第!
WebSocketサーバ
?メッセージをばら撒く事に生涯を捧げる
まろやかなまとめ
    WebSocketなら
●
    これまで不便だったものを解消します
    ?「更新」ボタンが無くなるかも?

●
    特性を生かした新しいサービスが生まれます
    (てます)。
    ?データ垂れ流し系アプリ(twitter)
    ?スライド進行具合のシンクロ(これ)
少しだけ业界人っぽい话をします。
ブラウザの違い、意識してますか?

「表示がはやーい」で、満足していませんか?

「見る」側と「作る」側では、
ブラウザに対する見方が大きく違います
代表的な例をひとつ。

  { 面白法人カヤックHP へのリンク }


InternetExprolerと、それ以外のブラウザで
見比べてみて下さい。
ブラウザごとに表示が違ってしまう事が、  
よくあります。

?何かが表示されない
?使えない機能がある
?レイアウトが崩れたりする(致命的)
でも...
Chromeの方が早いし、
いやSafariの方が軽いし、

IE使ってる人なんていないんじゃないの?
そんなことはありません。

     スマホ→

↓PC




               (2012年5月)
●
    ブラウザには違いがある
    ?見た目の違い
    ?新技術への対応度

●
    どのブラウザもいい感じにシェアがあるので、
    無視する訳にもいかない。

●
    ブラウザの対応を待つか、
    気合いで実装するか、あきらめるか (-_-)
少し先進的なWebSocket
ブラウザごとの対応状況は...?
IE10と共に来る夜明け!
しかし足を引っ張り続ける7,8,9...
おしまい!



次はRubyOnRailsのお話です。
ひとまず休憩をとりましょう。
まずはインストール
  1.リンク先で、
   左のボタンをクリック
  ?ダウンロード

  2.インストール用ツールを起動
  ?インストールの設定は特にい
   じらず、「次へ」ボタンを
   ぽちぽちしましょう。
RubyOnRailsってなに?



MVCアーキテクチャに基づいた
 Webアプリケーションフレームワーク???
アプリケーション?
?「アプリ」の相性でおなじみ
 コンピュータの上で動作して、嬉しいサービ
 スを提供してくれます

Webアプリケーション?
?「アプリ」がネットの向こう側にあるだけ
 Webサービスと言い換えてもOK
ウェブサービスには何が必要?
簡単なお買い物サイトをイメージすると...
UnicastWS vol.1
こんなの全部用意しなくちゃならないのか...
Railsに「アプリケーション作成っ!」と
お願いすると、こんなものが作られます。
アプリケーションフレームワーク?
?Webアプリケーションの枠組みを
 用意してくれるもの

Webアプリケーション?
?ネットの向こう側でコンピュータが
 頑張ってくれているサービス
MVCアーキテクチャってなんぞ?
M:モデル(データ)
V:ビュー(ページの表示内容)
C:コントローラ(呼びかけに対して
         どんな反応をするか)
UnicastWS vol.1
MVCアーキテクチャってなんぞ?
M:モデル(データ)
V:ビュー(ページの表示内容)
C:コントローラ(呼びかけに対して
         どんな反応をするか)

「役割ごとに資源を分別して扱いましょう」
 という考え方。
Railsの良いところ



手を動かしながら、話をしながら
           体感してみましょう。
インストールはお済みですか?
    1.リンク先で、
     左のボタンをクリック
    ?ダウンロード

    2.インストール用ツールを起動
    ?インストールの設定は特にい
     じらず、「次へ」ボタンを
     ぽちぽちしましょう。
「コマンドプロンプト」を使います
Railsの操作にはWindowsであれば
「コマンドプロンプト」を使います。
こんな画面が出てくれば翱碍です
では、早速...
次のコマンドを入力してみて下さい
rails new myapp
cd myapp
rails s


入力が終わりましたら、下のリンクを
開いてみましょう
実は既に、あなたのコンピュータにサーバが 
建っています

先ほどのコマンドで、こんな事をしていました

rails new myapp
?アプリを作る
cd myapp
?作ったアプリに移動
rails s
?サーバ起動
rails new コマンドひとつで、枠組みを用意して
くれます。
ショッピングサイトを作ってみよう
枠組みはRailsが用意してくれました
何が必要になりそうですか?
まずはモデルから攻めよう
    コマンドで一発作成する事ができます。

    rails g scaffold item name:string price:integer detail:text image:string

    rails g scaffold モデル名 中身①:種類 中身②:種類


●
    中身の種類は色々あります
    string ?短めの文章(名前やパスワード)
    text?長めの文章(商品説明)
    integer?数字(価格)
コマンドを入力する前に...
サーバ起動中はコマンドを入力できません

一旦サーバを停止させる必要があります

本来コマンドプロンプトでCtrl+Cを入力すると
停止するはずなんですが、Windowsだと操作
が効かない事が多いようです。
↓
コマンドプロンプト自体を再起動しましょう。
面倒だけど多めにみてね (;?Д`)
scaffoldでモデルを追加したら、次のコマンド
を入力して下さい

rake db:migrate


実際にデータを管理している部品に、モデルの
定義が変更されたことを教えてあげます

後はうまいこと、彼がなんとかしてくれます
rails g scaffoldの威力
    rails s コマンドでサーバを起動したら    
    こちらをご覧下さい
    { localhost:3000/items へのリンク}



    ひとつのコマンドで、ここまでしてくれます
●
    モデルを作ってくれます
●
    モデルを「一覧表示、詳細表示、追加、変更、
    削除」するページを作ってくれます
●
    アドレスを入力したら、ちゃんとそのページに
    飛べるようにしておいてくれます
商品に画像を付けてみましょう
次のファイルをいじります
User/ユーザ名/myapp/app/views/items/index.html.erb


  <td><%= item.name %></td>
  <td><%= item.price %></td>
  <td><%= item.detail %></td>
  <td><%= item.image %></td>



item.image の前に image_tag を書きます
  <td><%= image_tag item.image %></td>
         ↑スペースはちゃんと空けよう!
ファイルの変更は
これだけです。

{ localhost:3000/items/new へのリンク}

{ localhost:3000/items へのリンク}



にアクセスして、
画像にURLを設定しましょう。




        ここ→
やったね!
RubyOnRailsの醍醐味

●
    お決まりの操作はコマンドで楽々!

●
    やりたい事が、直感的にできる!



              体感して頂けましたか?
本日はここまで!



 お疲れさまでした。

More Related Content

UnicastWS vol.1