【CakePHP】「Media Plugin」の概要と構成

cake-logo先の記事で「Media Plugin for CakePHP」のセッションスライドを紹介させていただいたのですが、実際にソースを調べたりして分かったことをまとめてみることにしました。

まずは序章ということで、概要とプラグインの構成を紹介させていただきます。
そして、実際に利用する手順などを後の記事で紹介させていただく予定です。

概要

「Media Plugin for CakePHP」は、画像や動画などのいわゆる「メディアファイル」を始めとした、ファイルアップロード及びそれらの管理を簡単かつ安全にに行うためのプログラム群です。プラグイン形式で提供されているため、プログラム管理がしやすく、またこれらを部品として利用することが出来るため、カスタマイズ性に優れています。

構成

Media Pluginは、大きく分けて次のパートから構成されています。

■Transfer Behavior
ファイルを「外部から持ってくる」ためのビヘイビアで、「ファイルバリデーション」と指定ディレクトリへの「ファイル転送」を担当します。
「ファイルバリデーション」は、一般的な「容量」「ファイル形式」といったチェックだけでなく、不正ファイルを検査するための強力なチェック機能を提供します。MIME Typeと拡張子、ファイル内容を相互的にチェックすることで、そのファイルが信頼性あるものかを調べます。また、画像サイズや送信元の場所(ディレクトリやURL)、パーミッションなども調べます。
「ファイル転送」は、実際にファイルを読み込んで指定ディレクトリへ保存します。転送はには、PHPのアップロード関数ではなく、Cake標準のソケット機能を使用しているようです。

■Media Behavior
Transfer Behaviorはファイルそのものを「持ってくる」動作を担当していますが、Media Behaviorではそれ以降の「持ってきたファイルの取り扱い」を担当します。
中でも興味深いのは「バージョン」という概念です。一つのアップロードファイルからいろいろな加工を行い、それを一元管理する機能を有しています。例えば、画像ファイルを1つアップロードしただけで大中小の画像を作り、それを実際のサイトで扱うことが出来ます。画像だけでなく、他のファイルでも面白い機能を持っています。例えば、JavaScriptやCSSでは、ソースの中身を圧縮して難読化することも出来たり、ビデオ映像からサムネイル画像を作りだすことも出来るようです(未確認)。

■Polymorphic Behavior(2009/07/18追記)
このビヘイビアは、メディア関連に限らず、いろいろなモデルに適用できる大変に便利なものです。
取り付けたモデルのフィールドに、関連づけたいモデルとそのIDを用意すると、自動でその記述モデルのアソシエーションを設定し、データを引っ張ってきて検索結果に取り付けます。
唯一残念な点は、このビヘイビアは「belongsTo」として他のモデルを取ってくる点です。つまり、1つのデータしか関連づけできません。このビヘイビアは、拡張してhasManyでも適用できるようにすると、更に便利なビヘイビアになりそうです。
一応、このビヘイビアを使う問題点もあります。データレベルで付け替えが出来てしまうため、セキュリティ的に不安な点があります(ぶっちゃけ、Userモデルを引っ張ってくる悪用が出来てしまう)。柔軟に対処するために、このビヘイビアで入手したデータを丸ごと表示するような利用は危険ですが、データを限定して利用するような方法なら便利に活用できることでしょう。

[200/907/19追記]
このビヘイビアが「belongsTo」である理由は、純粋に「Attachmentモデル(もしくはそれに相当するモデル)から動的に親モデルをたどるため」に作ったようで、まあつまり汎用的な設計ではないのでしょう。

■Attachment Model
上記3つのビヘイビアの導入をテンプレート化したモデルです。
特にこだわりが無いのであれば、このモデルを利用すれば簡単にファイル管理が行えます。
もしくは、このモデルを加工して自分のモデルを作成するのも良いかもしれません。

■Medium Helper
管理しているファイルを実際にサイト上で表示したりリンクを生成したりするヘルパーです。
例えばフラッシュやムービー、オーディオ、PDF等の埋め込みHTMLの生成を行ったり、リンクをつけたりすることが出来ます。
また、「バージョン」管理をしている場合でも適切な画像を呼び出します。

■Medium
メディアファイル管理の実体要素、オブジェクトクラスです。実際には、各ファイルタイプ別にオブジェクトクラスがあります。

■Adapter
各ファイルの固有の操作を統一化して扱うためのカプセルで、datasourceのような働きをします。例えばgdを用いて物理的に画像情報を入手したり、画像のフィッティングを行ったりするのはアダプター(gdアダプター)で行います。

■その他
その他、ファイルの格納場所を生成・管理するするコンソールがあります。


“【CakePHP】「Media Plugin」の概要と構成” への2件の返信

  1. 非常に多くの話の日本語翻訳を提供していただきありがとうございます。

    Thank you very much for providing a japanese translation of the talk!

  2. Same here, David!
    Media Plugin is a much wanted suite for CakePHP users. I think it can solve many problems when handle mediums.
    Now I’m trying to install and use this plugin. At first trial, I couldn’t perform it. It didn’t store an attachment file to expected directory in transfer process. But I never give up. I’m gonna report it, and use it for my future works!

コメントは受け付けていません。