FQL利用でグラフAPIのパフォーマンスを向上 - 新世代Web制作テクニック総特集 | デザインってオモシロイ -MdN Design Interactive-

FQL利用でグラフAPIのパフォーマンスを向上 - 新世代Web制作テクニック総特集

2024.4.29 MON

【サイトリニューアル!】新サイトはこちらMdNについて
web creators特別号
スマートフォン・ソーシャルメディア・WordPress
Web制作テクニック総特集

ソーシャルメディア 09
FQL利用でグラフAPIのパフォーマンスを向上

canvasを使ってグラフを描く

Facebookプログラミングにおいて実務的に必要となる問い合わせ言語FQL 。ここではFQLがどのようなものであり、何ができるのか、そしてなぜ使う必要があるのを紹介する。

解説/制作・文/井形 信(株式会社ルクス)



FQLの概要

FQLは「Facebook Query Languageの略で、名前からご想像の通りSQLに似た文法で記述される、グラフAPIのデータを問い合わせ可能な言語である。FQLの最もシンプルな文系はSQL と同様「SELECT [fields] FROM [table] WHERE[conditions]」で表され、単純な加減乗除の計算、me()やstrlen()などの関数、真偽値、AND・NOTなどの倫理演算子、ORDERBY句やLIMIT句をFQLの中で使うことができる。一方、SQLと異なる点はJOIN句によるテーブルの結合ができない点だ。

FQLの中で指定できるテーブル名やフィールドは【01】を参照してほしい。なお、FQLのフィールドはオブジェクトやコネクションのフィールドとは名称が多少異なるので注意が必要だ。

【01】https://developers.facebook.com/docs/reference/fql/
【01】https://developers.facebook.com/docs/reference/fql/


FQL実行によるデータの表示

FQLを実行してみよう。なお現在では、FQLについてはグラフAPI経由で呼び出す方法が推奨されている。

今回はFB.api関数を使ってFQLを実行する。FQLでは各テーブルのドキュメントにてインデックス可能なフィールドを問い合わせのキーとして指定できる。たとえば、userテーブル(【05】参照)であればuid、username、name、third_party_idの4つが指定できる【03】。データは【04】のコードにて取得している。通常のグラフAPIと同じく、フィールドを指定して取得する。この表示結果は【05】となる。

【02】https://developers.facebook.com/docs/reference/fql/user/
【02】https://developers.facebook.com/docs/reference/fql/user/

【03】グラフAPIの引数に'/fql'を指定しクエリを記述する。
【03】グラフAPIの引数に'/fql'を指定しクエリを記述する。

【04】レスポンスに対し、クエリで指定したフィードのデータを取得する。
【04】レスポンスに対し、クエリで指定したフィードのデータを取得する。

【05】FQLでソーシャルグラフを表示する。
【05】FQLでソーシャルグラフを表示する。


複数テーブルからの情報取得

JOIN句を使って複数のテーブルを指定することはできないが、IN句によってサブクエリを使ってより多くのデータを引き出すことは可能だ。

今回のサンプルでは実際にサブクエリを使ってみる。使用するFQL「SELECT uid, name, pic_square FROM user WHERE uid = me() OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())」は自分のIDと自分の友人のIDで絞り込まれた結果セットから自分と友人のID、名前、プロフィール写真を表示するクエリで、me()はOAuthで認証したユーザーのユーザーIDを表示する関数である【06】。このサンプルコードの表示結果は【07】となる。

【06】サブクエリによって複数テープルの情報を表示する。
【06】サブクエリによって複数テープルの情報を表示する。

【07】パーミッションを得て、FQL経由でグラフAPIの情報を表示する。
【07】パーミッションを得て、FQL経由でグラフAPIの情報を表示する。


グラフAPIとFQLの比較

ここまで読んで、FQLでもグラフAPIを使うのなら、直接コネクションやオブジェクトを指定すればよいのではないかと思った方もいるだろう。では、なぜFQLを使うのか、それは次の理由からである。

(1)サブクエリの活用で、APIへのアクセスが一度で済む

【06】サンプルを、FQLを使わずに表現すると【08】のようになる。"/me"オブジェクトと"/me/friedns"コネクションにアクセスする必要があるため、グラフAPIの形式に合わせて2度リクエストすることが必要になる。FQLであれば通信の発生が一度で済むため、当然パフォーマンスは向上する。

(2)通信するデータ量が少なくなる

FQLによる結果セットの取得であれば、WHERE句で絞り込んだ上での必要なレコードと必要なフィールドのみ指定する形となる。そのため、指定したオブジェクトやコネクションの形式に合わせてすべての結果が返って来る直接指定に比べて、結果セットの通信量が大幅に小さくなる。

細かいポイントではあるが、スマートフォンなどのモバイル端末でも使用される可能性が高いため、効率の観点からもFQLを活用したほうがよいだろう。

【08】グラフAPIから直接指定し、複数テーブルの機能を取得する。
【08】グラフAPIから直接指定し、複数テーブルの機能を取得する。


[目次に戻る]

【本記事について】
2012年7月28日発売のweb creators特別号「新世代Web制作テクニック総特集」から、毎週記事をピックアップしてご紹介! スマートフォンサイト特集ではデザインのルールとコーディングのポイント、ソーシャルメディア特集では従来のWebサイトとの違いと有効な活用方法、WordPress特集ではサイト構築に必要な機能と役立つプラグインなど、基本的な知識と必須テクニックを網羅した内容になっています。

※本記事はweb creators特別号『新世代Web制作テクニック総特集』からの転載です。この記事は誌面でも読むことができます。

twitter facebook このエントリーをはてなブックマークに追加 RSS
【サイトリニューアル!】新サイトはこちらMdNについて

この連載のすべての記事

アクセスランキング

8.30-9.5

MdN BOOKS|デザインの本

Pick upコンテンツ

現在