Your SlideShare is downloading. ×
ruby、sinatraで作るfacebookアプリ
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

ruby、sinatraで作るfacebookアプリ

3,310
views

Published on

チャレンジャーズにおいてリリースした【予定を入れないスケジューラー】の開発において、facebookアプリの作り方、苦労した点や注意点などを紹介します。

チャレンジャーズにおいてリリースした【予定を入れないスケジューラー】の開発において、facebookアプリの作り方、苦労した点や注意点などを紹介します。


0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,310
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
4
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. Ruby/Sinatraで簡単に作る Facebookアプリ NTTレゾナント   栗島聡哉
  • 2. 自己紹介 •  どんな人物か   –  サーチエンジンの開発をずっとしていました   –  ここ最近はあまりコードを書かない仕事が多かったので、 半分リハビリをかねて開発しています  •  「予定をいれないスケジューラ」とは   –  h5p://yotesuke.jp   –  予定を入れるのではなくて暇を入れるスケジューラー   –  暇を入れるとイベント・アクションをおすすめしてくれます   –  NTTレゾナント主催のイベント(Challengers第一回)で発表   •  ベータサービスとして世に出すことに  •  Facebookアプリとして実装しています   –  初めて作ったので色々とわからないことが多かったです  
  • 3. 「予定をいれないスケジューラー」   ってどんなサービス?
  • 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 までご連絡を