SlideShare a Scribd company logo
1 of 15
Download to read offline
Ruby/Sinatraで簡単に作る
     Facebookアプリ	
     NTTレゾナント	
  
       栗島聡哉
自己紹介	
•  どんな人物か	
  
  –  サーチエンジンの開発をずっとしていました	
  
  –  ここ最近はあまりコードを書かない仕事が多かったので、
     半分リハビリをかねて開発しています	
  
•  「予定をいれないスケジューラ」とは	
  
  –  h5p://yotesuke.jp	
  
  –  予定を入れるのではなくて暇を入れるスケジューラー	
  
  –  暇を入れるとイベント・アクションをおすすめしてくれます	
  
  –  NTTレゾナント主催のイベント(Challengers第一回)で発表	
  
    •  ベータサービスとして世に出すことに	
  
•  Facebookアプリとして実装しています	
  
  –  初めて作ったので色々とわからないことが多かったです	
  
「予定をいれないスケジューラー」	
  
   ってどんなサービス?
Facebookアプリってどんなもの?	
•  基本はWebサービス	
  
•  Facebookの情報を利用できる	
  
•  Facebookの機能が使える	
  

•  APIを叩いて上記機能が使える	
  
FacebookAPIを何に使うのか	
•  最初にこの部分をじっくり考えたほうがいいかも	
  
•  ログイン認証だけ使いたい	
  
 –  ユーザの特定だけに利用するのであれば、Facebook
    だけじゃなく、twi5er、googleなどのアカウントにも対
    応。逆に固有の機能は使いにくくなる	
  
•  Facebookのソーシャル情報の取得やwallに書き
   込みをして広げたい	
  
 –  ソーシャル的な機能を使うのであれば必要かも	
  
 –  ほんとにそのサービスにとってその機能が必要なの
    かじっくり考える必要があるかなと思います
sinatraとは?	
•  rubyのwebフレームワーク	
  
       –  簡単にwebアプリケーションが作れる	
  
  require	
  “sinatra”	
  
  get	
  ’/hello'	
  do	
  
  	
  	
  “hello”	
  
  end	

•  起動確認	
  
	
   ruby	
  hello.rb	
  19:27:09]	
  INFO	
  	
  WEBrick	
  1.3.1	
  
     [2012-­‐07-­‐10	
  
     [2012-­‐07-­‐10	
  19:27:09]	
  INFO	
  	
  ruby	
  1.9.3	
  (2012-­‐04-­‐20)	
  [x86_64-­‐darwin11.3.0]	
  
	
==	
  Sinatra/1.3.2	
  has	
  taken	
  the	
  stage	
  on	
  4567	
  for	
  development	
  with	
  backup	
  from	
  WEBrick	
  
  [2012-­‐07-­‐10	
  19:27:09]	
  INFO	
  	
  WEBrick::HTTPServer#start:	
  pid=16952	
  port=4567	
  
システム構成	
•  開発環境	
  
     –  初期段階ではVaioZ上で仮
        想環境構築	
  
     –  現状はMBAのVB上で動か
        しています	
  
•  AWS	
  
     –  本番環境 smallインスタン
        ス * 2	
  
     –  ステージング環境 microイ
        ンスタンス	
  
システム環境について	
•    AWS	
  
      –  実行環境としてはAWSを選択	
  
      –  Smallインスタンスの2ノードを使用	
  
      –  OSはUbuntu10.04	
  serverを選択。12.04はまだ出ていなかったので	
  
•    Nginx	
  
      –  とりあえず最近流行りなので	
  
•    Ruby	
  
      –  1.9.3を選択。今までは1.8系を使っていたが最新のものも使ってみようかと。RVMで環境構築	
  
•    Unicorn	
  
      –  流行っているようなので	
  
•    Sinatra	
  
      –  RoRはあまり慣れていないので、使い慣れているSinatraを選択	
  
•    FacebookAPI	
  
      –  Oauthはomniauth	
  
      –  APIへの接続はkoala	
  
•    CoffeeScript	
  
      –  JSを書くのは苦手なので、rubyっぽい書き方が出来るCoffeeScriptを使っています	
  
•    Twi5er	
  bootstrap	
  
      –  デザインを作るのは苦手なので。Cssも苦手なのでSassを使っています(ほとんど書いてない
         ですが)	
  
Facebookアプリを作る	
•  developers.facebook.comにてアプリの登録	
  
  –  まずは普段のfacebookアカウントから、携帯電話、ク
     レジットカードなどの認証処理を行う	
  
  –  詳細はWebで探せばすぐに見つかると思います	
  
•  AppIDとシークレットキーを取得	
  
  –  developersページから取得します	
  
Facebookのログイン認証	
•  ログイン認証をなぜ使うのか	
  
  –  アカウント管理はめんどくさい	
  
         •  アカウントを登録して、管理して、設定して、削除して、云々する機能は作りたくない	
  
         •  ID/PWの情報はなるべく持ちたくない	
  
         •  けどユーザは特定したい	
  
•  omniauthを利用したアカウント認証	
  
  –  ライブラリをrequireすると下記pathを追記	
  
  –  /auth/facebook	
  
         •  上記pathへアクセスすると認証ページへredirectしてcallback	
  
         •  callbackのpathで認証処理を行う。下記の例では認証情報をsessionに保存しています	
  
  require	
  "omniauth"	
  
  require	
  "omniauth-­‐facebook”	
  
  get	
  '/auth/:name/callback'	
  do	
  
  	
  	
  auth	
  =	
  request.env['omniauth.auth’]	
  
  	
  	
  session[“provider”]	
  =	
  auth["provider”]	
  
  	
  	
  session[“userid”]	
  =	
  auth["uid”]	
  
  	
  	
  session["token"]	
  =	
  auth["credenkals"]["token"]	
  
  	
  	
  session["expires_at"]	
  =	
  auth["credenkals"]["expires_at"]	
  
  	
  	
  redirect	
  '/'	
  
  end
Facebookから/それ以外のアクセス	
•  Facebookアプリと普通のWebページ	
  
 –  FacebookアプリはFacebook上からはcanvas?
    iframeを通して見えます。	
  
 –  その場合は認証情報をparseすることで
    access_tokenが取得できます	
  
•  普通のページからだと、OAuth後にtokenが取
   得できます	
  
 –  sessionなどの保存しておきますが、2時間程度で
    使えなくなります
FacebookAPIを使ったデータ取得	
•  公開されていない情報にアクセスする場合はaccess_tokenが必要	
  
•  access_tokenの取得方法	
  
  –  Facebookページからのアクセス	
  
          •  signed_requestをparseすれば取得可	
  
  –  OAuthによる認証の場合	
  
          •  ログイン後に取得できるのでsessionで保存しておく	
  
•  koalaモジュールを使った友達一覧の取得方法	
  
  –  tokenがあればすぐにできます	
  
  –  下記FacebooAPIのgraphAPIを叩いてデータを取得しています	
  
  –  h5ps://graph.facebook.com/me/friends?access_token=hoge	
  
  require	
  "koala”	
  
  	
  
  get	
  ‘get_friendlist’	
  
  	
  	
  token	
  =	
  	
  session["token"]	
  	
  
  	
  	
  graph	
  =	
  Koala::Facebook::API.new(token)	
  
  	
  	
  friend_list	
  =	
  graph.get_conneckons("me","friends",{:locale	
  =>	
  "ja_JP",:limit	
  =>	
  5000})	
  
  end	
  
  	
  
FacebookAPIを使わない/使えない	
  
          機能について	
•  APIで使える機能使えない機能がある	
  
  –  Wallへの書き込みや、データの取得などはAPIで取得可
     能	
  
  –  アプリからのメッセージ送信はそのままでは出来ない	
  
  –  あまり使い慣れていないので正直どこまで出来るのか、
     出来ないのかは調査不足です	
  
•  アプリからのメッセージ送信	
  
  –  	
  下記URLへのリンク、redirectを行う	
  
  –  h5p://www.facebook.com/dialog/apprequests?
     app_id=#{app_id}&#{opt}	
  
  –  オプション仕様はこちら	
  
     •  h5ps://developers.facebook.com/docs/reference/dialogs/
        requests/	
  
Facebookアプリでのデバッグ	
•  テスト用にアカウントを作ると怒られる	
  
•  テスト用アカウント作成APIよりアカウント作成	




 test_users	
  =	
  Koala::Facebook::TestUsers.new(:app_id	
  =>	
  appid,	
  :secret	
  =>	
  secret)	
  
 test_users.create(true,	
  “publish_stream”,	
  {:name	
  =>	
  “tes5est”})	
  
 	
  
チームの課題	
•  3人よれば文殊の知恵	
  
 –  チームは偶数より奇数の方がいい	
  
 –  二人だと決定まで時間がかかる?	
  
•  リソースが足りない	
  
 –  人、時間が足りないのは基本	
  
•  申し訳程度の募集	
  
 –  いまよてスケチームでは一緒に開発してくれる人
    を募集しております	
  
 –  興味が有る方がいれば @kuribone までご連絡を	
  

More Related Content

What's hot

レスポンシブWebデザイン@マカベンvol.5
レスポンシブWebデザイン@マカベンvol.5レスポンシブWebデザイン@マカベンvol.5
レスポンシブWebデザイン@マカベンvol.5Shogo Tamura
 
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworksYAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworksNaoto Koshikawa
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowlerTakuro Sasaki
 
WordPressってブログじゃないの?
WordPressってブログじゃないの?WordPressってブログじゃないの?
WordPressってブログじゃないの?tokumotonahoko
 
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!Toshio Ehara
 
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングRubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングTakuro Sasaki
 
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜Toshio Ehara
 
サーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみたサーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみたryutakatori
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersTakeshi Arabiki
 
JAWS-UG初心者支部第4回 Simple Front 53
JAWS-UG初心者支部第4回 Simple Front 53JAWS-UG初心者支部第4回 Simple Front 53
JAWS-UG初心者支部第4回 Simple Front 53Tetsuya Mase
 
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみてHiroyuki Hiki
 
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介schoowebcampus
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方Yusuke Wada
 
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Takuro Sasaki
 
Webっちゃ vol.01 [Wordpressでできること]
Webっちゃ vol.01 [Wordpressでできること]Webっちゃ vol.01 [Wordpressでできること]
Webっちゃ vol.01 [Wordpressでできること]Yoshifumi Nishimoto
 
Perl and eMail at Kansai.pm #13 Meeting in Kyoto
Perl and eMail at Kansai.pm #13 Meeting in KyotoPerl and eMail at Kansai.pm #13 Meeting in Kyoto
Perl and eMail at Kansai.pm #13 Meeting in Kyotoazumakuniyuki 🐈
 
僕が作ってきたWebサービス追悼式 #NGK2012B
僕が作ってきたWebサービス追悼式 #NGK2012B僕が作ってきたWebサービス追悼式 #NGK2012B
僕が作ってきたWebサービス追悼式 #NGK2012Bryuichiro ryuichiro
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnativeTakuro Sasaki
 

What's hot (20)

レスポンシブWebデザイン@マカベンvol.5
レスポンシブWebデザイン@マカベンvol.5レスポンシブWebデザイン@マカベンvol.5
レスポンシブWebデザイン@マカベンvol.5
 
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworksYAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowler
 
WordPressってブログじゃないの?
WordPressってブログじゃないの?WordPressってブログじゃないの?
WordPressってブログじゃないの?
 
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
 
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングRubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
 
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
 
サーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみたサーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみた
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
 
JAWS-UG初心者支部第4回 Simple Front 53
JAWS-UG初心者支部第4回 Simple Front 53JAWS-UG初心者支部第4回 Simple Front 53
JAWS-UG初心者支部第4回 Simple Front 53
 
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
 
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
 
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会
 
Webっちゃ vol.01 [Wordpressでできること]
Webっちゃ vol.01 [Wordpressでできること]Webっちゃ vol.01 [Wordpressでできること]
Webっちゃ vol.01 [Wordpressでできること]
 
Perl and eMail at Kansai.pm #13 Meeting in Kyoto
Perl and eMail at Kansai.pm #13 Meeting in KyotoPerl and eMail at Kansai.pm #13 Meeting in Kyoto
Perl and eMail at Kansai.pm #13 Meeting in Kyoto
 
僕が作ってきたWebサービス追悼式 #NGK2012B
僕が作ってきたWebサービス追悼式 #NGK2012B僕が作ってきたWebサービス追悼式 #NGK2012B
僕が作ってきたWebサービス追悼式 #NGK2012B
 
20150704cmsdou
20150704cmsdou20150704cmsdou
20150704cmsdou
 
Firebase0901
Firebase0901Firebase0901
Firebase0901
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnative
 

Similar to ruby、sinatraで作るfacebookアプリ

Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト健一 辰濱
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション土岐 孝平
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Yusuke Wada
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Tokuhiro Matsuno
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
あじゅーるのつかいかた:WebAPI+Azure->UWP
あじゅーるのつかいかた:WebAPI+Azure->UWPあじゅーるのつかいかた:WebAPI+Azure->UWP
あじゅーるのつかいかた:WebAPI+Azure->UWPc-mitsuba
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクションTakahiro Okumura
 
最近作ったもの
最近作ったもの最近作ったもの
最近作ったものonozaty
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方Yusuke Wada
 
Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料Shohei Kobayashi
 
第45回PHP勉強会(里洋平)
第45回PHP勉強会(里洋平)第45回PHP勉強会(里洋平)
第45回PHP勉強会(里洋平)Yohei Sato
 
a-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazakia-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in OkazakiEtsushi Ishii
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト健一 辰濱
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会Yuki Okada
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方健一 辰濱
 
MF GeeksNight pplogの話
MF GeeksNight pplogの話MF GeeksNight pplogの話
MF GeeksNight pplogの話Naoto Koshikawa
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018Ryu Shindo
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
 

Similar to ruby、sinatraで作るfacebookアプリ (20)

Twitter API
Twitter APITwitter API
Twitter API
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
あじゅーるのつかいかた:WebAPI+Azure->UWP
あじゅーるのつかいかた:WebAPI+Azure->UWPあじゅーるのつかいかた:WebAPI+Azure->UWP
あじゅーるのつかいかた:WebAPI+Azure->UWP
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
最近作ったもの
最近作ったもの最近作ったもの
最近作ったもの
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料
 
第45回PHP勉強会(里洋平)
第45回PHP勉強会(里洋平)第45回PHP勉強会(里洋平)
第45回PHP勉強会(里洋平)
 
Openshift 20191216
Openshift 20191216Openshift 20191216
Openshift 20191216
 
a-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazakia-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazaki
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
MF GeeksNight pplogの話
MF GeeksNight pplogの話MF GeeksNight pplogの話
MF GeeksNight pplogの話
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 

ruby、sinatraで作るfacebookアプリ

  • 1. Ruby/Sinatraで簡単に作る Facebookアプリ NTTレゾナント   栗島聡哉
  • 2. 自己紹介 •  どんな人物か   –  サーチエンジンの開発をずっとしていました   –  ここ最近はあまりコードを書かない仕事が多かったので、 半分リハビリをかねて開発しています   •  「予定をいれないスケジューラ」とは   –  h5p://yotesuke.jp   –  予定を入れるのではなくて暇を入れるスケジューラー   –  暇を入れるとイベント・アクションをおすすめしてくれます   –  NTTレゾナント主催のイベント(Challengers第一回)で発表   •  ベータサービスとして世に出すことに   •  Facebookアプリとして実装しています   –  初めて作ったので色々とわからないことが多かったです  
  • 4. Facebookアプリってどんなもの? •  基本はWebサービス   •  Facebookの情報を利用できる   •  Facebookの機能が使える   •  APIを叩いて上記機能が使える  
  • 5. FacebookAPIを何に使うのか •  最初にこの部分をじっくり考えたほうがいいかも   •  ログイン認証だけ使いたい   –  ユーザの特定だけに利用するのであれば、Facebook だけじゃなく、twi5er、googleなどのアカウントにも対 応。逆に固有の機能は使いにくくなる   •  Facebookのソーシャル情報の取得やwallに書き 込みをして広げたい   –  ソーシャル的な機能を使うのであれば必要かも   –  ほんとにそのサービスにとってその機能が必要なの かじっくり考える必要があるかなと思います
  • 6. sinatraとは? •  rubyのwebフレームワーク   –  簡単にwebアプリケーションが作れる   require  “sinatra”   get  ’/hello'  do      “hello”   end •  起動確認     ruby  hello.rb  19:27:09]  INFO    WEBrick  1.3.1   [2012-­‐07-­‐10   [2012-­‐07-­‐10  19:27:09]  INFO    ruby  1.9.3  (2012-­‐04-­‐20)  [x86_64-­‐darwin11.3.0]   ==  Sinatra/1.3.2  has  taken  the  stage  on  4567  for  development  with  backup  from  WEBrick   [2012-­‐07-­‐10  19:27:09]  INFO    WEBrick::HTTPServer#start:  pid=16952  port=4567  
  • 7. システム構成 •  開発環境   –  初期段階ではVaioZ上で仮 想環境構築   –  現状はMBAのVB上で動か しています   •  AWS   –  本番環境 smallインスタン ス * 2   –  ステージング環境 microイ ンスタンス  
  • 8. システム環境について •  AWS   –  実行環境としてはAWSを選択   –  Smallインスタンスの2ノードを使用   –  OSはUbuntu10.04  serverを選択。12.04はまだ出ていなかったので   •  Nginx   –  とりあえず最近流行りなので   •  Ruby   –  1.9.3を選択。今までは1.8系を使っていたが最新のものも使ってみようかと。RVMで環境構築   •  Unicorn   –  流行っているようなので   •  Sinatra   –  RoRはあまり慣れていないので、使い慣れているSinatraを選択   •  FacebookAPI   –  Oauthはomniauth   –  APIへの接続はkoala   •  CoffeeScript   –  JSを書くのは苦手なので、rubyっぽい書き方が出来るCoffeeScriptを使っています   •  Twi5er  bootstrap   –  デザインを作るのは苦手なので。Cssも苦手なのでSassを使っています(ほとんど書いてない ですが)  
  • 9. Facebookアプリを作る •  developers.facebook.comにてアプリの登録   –  まずは普段のfacebookアカウントから、携帯電話、ク レジットカードなどの認証処理を行う   –  詳細はWebで探せばすぐに見つかると思います   •  AppIDとシークレットキーを取得   –  developersページから取得します  
  • 10. Facebookのログイン認証 •  ログイン認証をなぜ使うのか   –  アカウント管理はめんどくさい   •  アカウントを登録して、管理して、設定して、削除して、云々する機能は作りたくない   •  ID/PWの情報はなるべく持ちたくない   •  けどユーザは特定したい   •  omniauthを利用したアカウント認証   –  ライブラリをrequireすると下記pathを追記   –  /auth/facebook   •  上記pathへアクセスすると認証ページへredirectしてcallback   •  callbackのpathで認証処理を行う。下記の例では認証情報をsessionに保存しています   require  "omniauth"   require  "omniauth-­‐facebook”   get  '/auth/:name/callback'  do      auth  =  request.env['omniauth.auth’]      session[“provider”]  =  auth["provider”]      session[“userid”]  =  auth["uid”]      session["token"]  =  auth["credenkals"]["token"]      session["expires_at"]  =  auth["credenkals"]["expires_at"]      redirect  '/'   end
  • 11. Facebookから/それ以外のアクセス •  Facebookアプリと普通のWebページ   –  FacebookアプリはFacebook上からはcanvas? iframeを通して見えます。   –  その場合は認証情報をparseすることで access_tokenが取得できます   •  普通のページからだと、OAuth後にtokenが取 得できます   –  sessionなどの保存しておきますが、2時間程度で 使えなくなります
  • 12. FacebookAPIを使ったデータ取得 •  公開されていない情報にアクセスする場合はaccess_tokenが必要   •  access_tokenの取得方法   –  Facebookページからのアクセス   •  signed_requestをparseすれば取得可   –  OAuthによる認証の場合   •  ログイン後に取得できるのでsessionで保存しておく   •  koalaモジュールを使った友達一覧の取得方法   –  tokenがあればすぐにできます   –  下記FacebooAPIのgraphAPIを叩いてデータを取得しています   –  h5ps://graph.facebook.com/me/friends?access_token=hoge   require  "koala”     get  ‘get_friendlist’      token  =    session["token"]        graph  =  Koala::Facebook::API.new(token)      friend_list  =  graph.get_conneckons("me","friends",{:locale  =>  "ja_JP",:limit  =>  5000})   end    
  • 13. FacebookAPIを使わない/使えない   機能について •  APIで使える機能使えない機能がある   –  Wallへの書き込みや、データの取得などはAPIで取得可 能   –  アプリからのメッセージ送信はそのままでは出来ない   –  あまり使い慣れていないので正直どこまで出来るのか、 出来ないのかは調査不足です   •  アプリからのメッセージ送信   –   下記URLへのリンク、redirectを行う   –  h5p://www.facebook.com/dialog/apprequests? app_id=#{app_id}&#{opt}   –  オプション仕様はこちら   •  h5ps://developers.facebook.com/docs/reference/dialogs/ requests/  
  • 14. Facebookアプリでのデバッグ •  テスト用にアカウントを作ると怒られる   •  テスト用アカウント作成APIよりアカウント作成 test_users  =  Koala::Facebook::TestUsers.new(:app_id  =>  appid,  :secret  =>  secret)   test_users.create(true,  “publish_stream”,  {:name  =>  “tes5est”})    
  • 15. チームの課題 •  3人よれば文殊の知恵   –  チームは偶数より奇数の方がいい   –  二人だと決定まで時間がかかる?   •  リソースが足りない   –  人、時間が足りないのは基本   •  申し訳程度の募集   –  いまよてスケチームでは一緒に開発してくれる人 を募集しております   –  興味が有る方がいれば @kuribone までご連絡を