Tender Surrender

Shindigを読み解く

以前インストール方法をご紹介した(Java版PHP版)Shindigですが、ようやくPHP版も使えるレベルになってきましたので、ソースを読み解いてみました。なお、Java版の方が実装は進んでいますが、今回はPHP版に限った話ですのでご注意ください。

Shindigとは何なのか

そもそも、の話です。

Shindigはひとことで言うと「OpenSocialコンテナのサンプル実装」です。これをダウンロードして動かすだけで、iGoogleガジェットとOpenSocialガジェットの動作テストを行うことができます。実際はOpenSocialを広く普及させるよう、数多あるSNSがShindigを参考に、もしくは流用してOpenSocialに対応することを目的にしています。

主なディレクトリ構成

  • config: コンテナ設定
  • features: 各種機能セット(JavaScriptコード)
  • java: Javaソースコード
  • javascript: HTML, JavaScriptコード
  • php: PHPソースコード

ディレクトリ解説

config

container.jsというファイルがコンテナのデフォルト設定となり、プロキシやOpenSocial APIのパス等の設定を行います。設定を変更したい場合はこのディレクトリにファイルを追加して、必要な部分のみをJSON形式で追記すれば、デフォルト設定が引き継がれます。なお、JSON形式なのは、PHPやJavaだけでなく、他の言語からも読み込むことを想定しているためと思われます。(Perl版やRuby版のShindigも開発される予定だそうです。)

features

ガジェットXMLに<Require features=””>という形式で記述される機能(features)をセットとして読み込みます。featuresディレクトリ内は機能セットごとにさらにディレクトリに分けられていて、各ディレクトリにあるfeatures.xmlファイルで必要なJavaScriptライブラリセットが指定されています。

php

PHPのソースコードはJava版を参考にしているためか、あまりPHPらしくない実装になっています。

まずMVC形式を取っていません。オブジェクトの分け方は色々な方法がありますが、ウェブアプリケーション的なものと言うよりは、Java的な方法で(?)機能や設定ごとに、非常に細かく分けられています。メンバ変数にいちいちget〜やset〜メソッドを用意しているのもJavaっぽい。

PHPへのリクエストはリライトされ(.htaccessファイルで指定)、すべてindex.phpに読み込まれます。index.phpはリクエストのパラメータに応じて処理を6種類のサーブレットに振り分けます。

  • 静的ファイル(/gadgets/files)
  • JavaScript(/gadgets/js)
  • プロキシ(/gadgets/proxy)
  • ガジェット(/gadgets/ifr)
  • メタデータ(/gadgets/metadata)
  • OpenSocial API(/social/data)

クラスのインクルードは__autoloadが使用されているため、ほとんど書かれていません。

config.phpには各種ファイルへのパスなど、設定が記述されています。(config/container.jsとは別物です)

なお、Shindigはデータベースを使っていないので、キャッシュは/tmpディレクトリ、設定はcookie、友達リストは静的XMLファイルでそれぞれ管理されます。

まとめ

ソースコードは一見シンプルですが、かなり複雑です。Java的な実装方法に加え、他言語版Shindigとの設定等の共有を想定した汎用化など、オプティマイズする余地はかなりありそう。PHP版Shindigを既存フレームワークに取り込むのは難しくはありませんが、あくまでも参考にする程度にした方がいいと思われます。

なお、今のところOpenSocialバージョン0.7対応ですが、まだまだバグも存在しています。バージョン0.8の機能仕様が出揃ってきたところですが、Shindigでの対応は時間差が出そう。

OpenSocial APIは実装されていますが、ShindigでOpenSocial機能が使えるようになったというには、まだまだ足りない感じ。あとはOAuthとか、RESTful APIとか、、、。

comments powered by Disqus