UNICAST・ワークショップ



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



  触って学ぶWebSocket
  作って遊ぶRubyOnRails
まずはこちらをご覧下さい



{ 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
ウェブサービスには何が必要?
簡単なお買い物サイトをイメージすると...
こんなの全部用意しなくちゃならないのか...
Railsに「アプリケーション作成っ!」と
お願いすると、こんなものが作られます。
アプリケーションフレームワーク?
⇒Webアプリケーションの枠組みを
 用意してくれるもの

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

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



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

    2.インストール用ツールを起動
    ⇒インストールの設定は特にい
     じらず、「次へ」ボタンを
     ぽちぽちしましょう。
「コマンドプロンプト」を使います
Railsの操作にはWindowsであれば
「コマンドプロンプト」を使います。
こんな画面が出てくればOKです
では、早速...
次のコマンドを入力してみて下さい
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の醍醐味

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

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



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



 お疲れさまでした。

UnicastWS vol.1