Facebook開発者向けドキュメントの日本語訳とTips

http://developers.facebook.com/docs/ に記載されているdocumentationの和訳と、調べていて分かったノウハウを紹介します。
Life is tough, so are we.
ドキュメント全体の目次はこちら
Facebook関連情報はFacebookページで共有しています。

廃止されたシェアボタンのたぶん正しい代替手段

廃止されてしまったシェアボタンの代わりに使われている/sharer/sharer.phpのドキュメントが削除されたので、ついにシェアボタンの代替手段まで使えなくなるかもしれないという話を昨日紹介しました。そこで、今回はFeed Dialogを利用してシェアを実装する手段を紹介します。sharer.phpのドキュメントが削除された後はFeed Dialogのドキュメントへとリダイレクトされるようになりましたから、シェアの代替手段としてはこれが推奨されているようです。

現状

よく使われている代替手段は、以下のようなリンクでシェア用ダイアログページを表示し、そこからシェアさせるというものです。
<a href="https://www.facebook.com/sharer/sharer.php?u=http://facebook-docs.oklahome.net/archives/52065629.html" target="_blank"><img src="share_icon_hogehoge.png"></a>

ダイアログを表示したところ

別ウィンドウでダイアログが開きます。
c6bc4e8ff7df5218f09f5ba4c816bfc2

タイムライン上での表示

テストユーザを作成し、そのユーザでシェアしてみた結果です。テストユーザの作成方法はテストユーザのドキュメント日本語訳をご覧ください。テストの為に連投する場合などは、スパム認定されない為にもテストユーザを利用するのが吉です。
シェア内容の表示は、廃止されたシェアボタンと同じです。
7d0c1e49bd7c49210ede425f62474433

ニュースフィード上での表示

テストユーザを2つ作成し、友達関係を作ってニュースフィードへの流れ方を見ることができます。好きな映画の登場人物の性格を元にテストユーザを使い分けるとちょっと楽しいですね。
d2f83d09ad0c9745b997befe08d161f0

Feed Dialogで実装

Feed Dialogドキュメントで紹介されているコードをコピペして、appIdの部分とパラメータだけ変更してlinkにシェアしたいページURLを指定します。実際にはsharer.phpと同様、location.hrefを指定するケースが多そうです。
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:fb="https://www.facebook.com/2008/fbml">
  <head>
    <title>My Feed Dialog Page</title>
  </head>
  <body>
    <div id='fb-root'></div>
    <script src='http://connect.facebook.net/ja_JP/all.js'></script>
    <p><a onclick='postToFeed(); return false;'>シェア</a></p>
    <p id='msg'></p>

    <script>
      FB.init({appId: 127497087322461, status: true, cookie: true});

      function postToFeed() {

        // calling the API ...
        var obj = {
          method: 'feed',
          link: 'http://facebook-docs.oklahome.net/archives/52065629.html',
          picture: '',
          name: '',
          caption: '',
          description: ''
        };

        function callback(response) {
          document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
        }

        FB.ui(obj, callback);
      }
           
    </script>
  </body>
</html>

ダイアログを表示したところ

ダイアログを使う場合でもユーザ自身が操作してサブミットすることになるので、特にパーミッションは必要ありません。ユーザによるアプリの認証など無しにすぐ使えます。
sharer.phpへのリンクの場合と違ってページ遷移しないところがちょっと便利ですね。文言も「シェア」なので分かりやすいです。
0920f5046c0a410875d463fef1886c67

タイムライン上での表示

sharer.phpからのシェアと違って、サムネイル画像と説明文の所が薄いグレーで縁取りされていません。自分のコメントとの境界が曖昧になってしまっている感じが若干します。
1f3bb9821d3253fac8921f05f9aacbb0

ニュースフィード上での表示

こちらでも同様に縁取りはありません。ただし、「フェイスブック開発者向けドキュメントの日本語とTipsより」という風にブログのタイトルが表示されています。ブログ管理用のアプリを作成し、そのアプリ名をブログタイトルと同じものにしている為で、ここをクリックするとブログトップ画面へと遷移します。記事タイトルをクリックした場合はsharer.phpと同様、共有した記事へと飛びます。
eb31c872f011516c52967e39d760c49b

まとめ

Feed Dialogを使う利点

  • 別ウィンドウでsharer.phpを開くよりも遷移がすっきりしている
  • アプリ名とリンクが表示されるので、記事本体へのリンクとサイトトップへのリンクを両方出せる
  • captionパラメータに文字列を指定するとキャプション付きでシェアされ、記事タイトル下にURLの代わりに表示される

sharer.phpを使う利点

  • 先日廃止されたシェアボタンと全く同じようにシェアされ、ニュースフィード上でもタイムライン上でも同じように表示されて違和感が無い
  • ちゃんとシェアとしてカウントされるので、いいね!ボタン横の数値に反映される

シェアボタンの代替手段(sharer.php)も許されなくなる

今年の7/18あたりにシェアボタンが廃止されました。この時の対処法として、ドキュメントで公式に紹介されている代替方法を紹介しましたが、以下の抜粋の通り、どこまでサポートされるか分からない不確かなものでした。

ただし、公式ドキュメントのどのページからも、このドキュメントへの導線はありません。リンク全部をごっそり持ってきて管理しているFBDocsで見つからなかったくらい。。
なので、どこまでサポートが続けられるのかは分かりません。この方法を使う場合は気をつけてください。
今日、いいね!ボタンやシェアボタンの動作について質問されて確認してみたら、ついに該当するドキュメントが消されて、フィードダイアログの解説ページ(日本語訳ページ)へとリダイレクトされるようになっていました。どうやら、シェアさせたいならlinkパラメータを指定したウォール投稿を使え、ということのようです。ダイアログならパーミッション無しで実装できるので、確かに代替案としては良さそうですね。
これで、7月のシェアボタン廃止に加え、https://facebook.com/sharer/sharer.phpを使った代替方法も廃止に近づいてしまったようです。(とはいえ、いいね!ボタンとシェアボタンの統合が発表されて以降も2年以上ボタンが機能したこと、ボタンが無効化されてもなお、代替案を使ってシェアを実装しているサイトが相当数あることを考えると、当分の間は動作する気はしますが。)

ただ、シェアボタンが廃止されて以降も、シェアボタンの機能をいいね!ボタンが引き継ぐような改修は続いていて、つい先日もいいね!を押した後のコメント欄表示に改修がありました。
0c7db09e369db6be3e767e71621bf407
これにより、以前はXFBML版、もしくは横幅400px以上でlayout=standard指定されているiframe版いいね!ボタンでのみ、クリック後にコメント欄がポップアップ表示されていた仕様から、横幅制限が無くなりました。
いいね!とシェアの統合発表以降、いいね!でもシェアと同じようにサムネイル表示でニュースフィード上に流れるなど、いいね!ボタンがシェアの機能を踏襲してきましたが、共有時にコメントを追加するというシェア本来の機能の踏襲も進んでいるように見えます。
それにしても、私がシェアボタンの後継に当たると思っている送信(send)ボタンは全然普及しませんね。

Facebook側のIPアドレス範囲一覧

いいね!ボタンを設置したりOpen GraphアクションReal-time Update APIを利用したりすればFacebookのスクレイパーがアクセスしてくるので、外部からアクセスされたくない開発環境であってもFacebookのIPアドレスのみアクセスを許可したい場合があります。
IPアドレスの範囲一覧は公式ドキュメントで公開されていて、その一覧は以下の通りです。

31.13.24.0/21
31.13.64.0/18
66.220.144.0/20
69.63.176.0/20
69.171.224.0/19
74.119.76.0/22
103.4.96.0/22
173.252.64.0/18
204.15.20.0/22

2401:db00::/32
2620:0:1c00::/40
2a03:2880::/32
ただし、これは頻繁に変わりうるので、定期的に最新の一覧を取得することが推奨されています。
以下のようにして一覧を取得するよう書かれていますが、実行してみると、上記の一覧はだいぶ古くなっていることが分かります。
whois -h whois.radb.net -- '-i origin AS32934' | grep ^route
3748cfb680b2c4953df926a6b00135c7

「私がFacebookで働いていて嫌いな10個のこと」が面白い

15日の14時過ぎにFacebookの開発ディレクターが「現役社員がこんなことを書くなんて信じられない」というコメント付きでシェアしていた「Ten Things I Hate About Working at Facebook(私がFacebookで働いていて嫌いな10個のこと)」という記事が面白かったので共有です。


いきなりニュースフィードに流れてきたので、IPO後の初業績報告だとかIPO以来の幹部入れ替わりが話題になってるから社内はピリピリしてんのかなぁ、まだエイプリルフールじゃないしなぁと思いつつ帰宅してジックリ読んだわけですが、読んでみて納得です。考えてみたら、本当にマズい内容だったら開発ディレクターが拡散したりしませんよね。


以下、本文和訳です。


Facebookで働いているこの2年間は完全な悪夢で、自分のキャリアで二度と繰り返したくはない類のものだ。この感情を長く胸にとどめすぎていた。Facebookでの勤続2年祝いということで言わせてもらうけど、ここで働くことに関して嫌いなことはゴマンとある。簡潔にする為に、ここでは私の持っている不満のトップ10をまとめてみた。

  1. commit/shipされるコードが多い   過去2年で、Facebookの従業員は2倍以上になり、それに比例してソースコードのコミット率も増えている。これはFred Brooksが40年近くも前に「人月の神話」で確立した法則を破っている。これこそが人月計算の何たるか、すなわち神話なのだ。私の周りのエンジニアは四六時中コードをコミットし、毎週新機能をリリースしている。私はそれを見ながらほくそ笑んでいるのだ。幸せな、幸せな愚か者達だ。
  2. ミーティングが少なすぎる.  これは実際のところ一個目と関連があって、おそらくは一個目の主要な原因だ。水曜はミーティング無しというミームさえある程で、あなたもこれをコミュニケーション破綻という自殺願望と呼ぶかもしれない。ソフトウェアというものは、話され、議論されなくてはならず、ただ書けば良いというものではない。間接的に影響を受ける幅広い集団の代表達で議論すること無く、代わりに凄まじい速さでコーディングしshipしている様は狂気だ。
  3. ザック(ザッカーバーグ)が干渉しすぎる  今となっては公開企業なのだから、CEOの仕事は外部(主に主要株主、アナリスト、評論家)と接することのはずだ。ザックは未だに今後の製品について計画を立て、エンジニアと会話し、戦略を立てている。完璧に時間の無駄だ。彼の仕事は株価を上げるべきで、ものを作るべきじゃない。
  4. 短期収益への注力が足りない  これは3番目にも関係してくる。素晴らしい製品を作るという、ザックの無邪気とも言える理想主義は、確かな長期収益に繋がってくるだろう。だけど、株価はこの四半期で値下がりしている。我々は今や公開企業なのだから次の四半期の収益を絞り出すべきで、クールなものを作っている場合じゃない。私には他の主要なウェブサイトよりも広告が小さく表示されているように見える。バナータイプの広告を出すべきだし、ユーザデータをサードパーティに対して売るべきだ。社内では誰一人としてこういったビジネス戦略を提案していなくて、ビジネス感覚のなさがハッキリと分かる。
  5. 飯が良すぎる 飯が美味くて何がマズい?多すぎるんだ。一日三食。無料。受賞歴のあるシェフの調理。それから、選択肢も多すぎる。サラダ、エントリー、デザート、ベジタリアンフード、スープ、全粒穀物、大体の場合は2つ目のデザート、有機なんとか、バーベキュー、アイスクリーム、絞りたてのオレンジジュース。私のように食に関して自制心の効かない人間には、この"ご利益"だか"福利厚生"は完全な災難だ。食品医薬品局が踏み込まない理由が分からない。
  6. エンジニアの決定が多すぎる  とくに、そのプロダクトチームに関わるエンジニアによる決定だ。Facebookの誰一人として、組織の階層構造には理由があるということ(上層部の人間なら気に入らない決定を覆せるなど)を理解していないらしい。エンジニア一人によって決断された場面を見たこともある。エンジニアとデザイナーのランチがランチを食いつつ決断する場面も。インターンによる場合さえある。しかも彼ら自身の上長に知らせることさえ無い。この種の自律的な決断は、企業がどのように働くべきかの理解が全くないことを示していて、役職付きで幅広いマネージメントの責任を持つ人々を無視している。私はよりシンプルなアプローチ、ザックに最も近い人物の意見を聞くというものを勧めている。もしくは、そこにいる中で一番多くの人間を管理している人物だ。だけど誰も聞きやしない。
  7. ハッカソンで作り出されるアイディアが多すぎる  これは6個目の直接的な結果だ。ハッカソンのプロジェクトのうち70%がサイトに組み込まれると聞いたことがある。少人数のエンジニアグループが夢見て1日で実装した機能なのにだ。私は創造性と"権限委譲"を信じているが、正式に計画されず、上級幹部の承認を得ずに実行されることが多すぎる。幹部がいるのには理由があるんだ。彼らが何を作るべきかを指示するべきだ。それ以外の方法ではない。企業は独裁的であるべきで、民主的ではない。ただ自分たちが面白いものを何でも作れば良いってのか?リーダーシップはどこへ行ったんだ。
  8. モバイルとプラットフォームの注力方針が完璧に間違っている  この点について長々と論じてあなたの知性をけなす気はないから、長くは語らない。言いたいのは、モバイルデバイスが全く重要でないのは自明だし、サードパーティにソーシャルグラフを提供するなんてバカバカしい。
  9. ニューヨークのオフィスには浴槽があり、そこで採用面接が行われる  Twitterで写真を見るまでは信じられなかったが、プレッシャー下での志望者の回復力を試す為という名目で私へ請求が来た。これが使われることは稀で、特に優秀な志望者の根性を試す場合のみ使うと聞いている。これまで聞いた中でプロフェッショナルらしさが最も感じられないし、いくつかの州の法律に触れると思っている。(これがもっともらしいと思われたとしたら、それは間違いだ。私はシアトルのFacebook支社のカンファレンスルームに浴槽を設置したが、そこで採用面接をしたことは無い。)
  10. 社内での信頼関係が過剰  Facebook社内の人々は通常、冗談抜きに、まだ一緒に働いたことも無い従業員が業務内容に長けていて、勤勉で、約束を守るものと考えている。この種の理想主義ははっきり言って吐き気がする。実際のところ、社内政治と相互不信こそがダイナミズムとドラマを作り出し、仕事を価値あるものにするのだ。これらが無かったら、もう単にコードを書いて書いて書いて、ship、ship、shipするだけじゃないか。考えるだけで疲れてくる。

あなたがソフトウェアエンジニアなら警告として受け取ってくれ。私は自分が見たようにしか言わない。


本文中で飯について触れていますが、Facebook Culinary Teamを見てみると雰囲気が伝わってきます。またハッカソン発の機能についても触れられていますが、いいね!もハッカソンで作られた機能ですね。いいね!ボタンの歴史で紹介しています。

続報:いいね!ボタンに大きめの仕様変更

LIKE

いいね!ボタンに大きめの仕様変更で紹介した通り、いいね!ボタンに仕様変更があります。今がその移行期間に当たるわけですが、先週、移行時のオプションが1つ追加されました。


移行が完了するといいね!ボタンに紐づいていた管理ページが無くなってしまい、いいね!したユーザのニュースフィードに更新通知を流すことなどができなくなってしまうと上記エントリで紹介しました。ただし、今回追加されたオプションにより、管理ページを通常のFacebookページへと移行してそこを通じてユーザと交流したり更新通知を流せるようになります。いいね!の数もそれまでの数が引き継がれます。

いいね!ボタンに大きめの仕様変更後半部分でドキュメントの該当箇所を赤字追記してありますので、詳しくはそちらをご覧ください。
記事検索