Zend Framework を理解する パート 1: 基本

パーフェクト・リーダーの構築

逆説的に言えば、私たちプログラマーはとても怠け者です。 タスクを 5 分間ではなく30 秒間で完了するようにするためのものを作成するのに、何時間も、あるいは何日間も費やしています。そのため、このような目的で Zend Framework が作成されても、それほど驚くにはあたりません。Zend Framework についてまだ聞いたことがなくてもいですって?心配には及びません。この記事では、Zend Framework を概観し、その一般概念を説明し、この「ZendFramework を理解する」シリーズで学ぶ準備をします。このシリーズでは続いて、新しいオンラインRSS/Atom フィード・リーダーの作成を順を追っていくことによって、その詳細を説明していきます。この記事ではコーディング・サンプルをあまり示しませんが、このシリーズの次回からは、PHPについて精通しておくとよいでしょう。

Nicholas Chase (ibmquestions@nicholaschase.com), Consultant, Backstop Media

Nicholas Chase は、Lucent Technologies、Sun Microsystems、Oracle、および Tampa Bay Buccaneers などの会社の Web サイトの開発に携わってきました。 高校の物理教師であり、低レベル放射性物質の廃棄施設のマネージャー、オンライン SF マガジンの編集者、マルチメディア・エンジニア、Oracle インストラクター、およびインタラクティブ・コミュニケーション会社のチーフ・テクノロジー・オフィサーでもあります。 XML Primer Plus (Sams) を含む、いくつかの書籍があります。



2006年 6月 27日

Zend Framework

数年前までは、PHP が、強力で使いやすいスクリプト言語ヒープのトップの座にありました(少なくとも、その人気に関しては)。 PHP は、ほとんどの UNIX® およびLinux® ベースの Web サーバーにインストールされていました。 また、プログラマーであれば、PHPを使用できるホスティング・アカウントを得ることは容易でした。 一時期 Rubyが出回ったことがありますが、多くの人々がそれを使用したというわけではありません。ダイナミックに生成されたコンテンツを使用して Web サイトを構築したいが J2EEのようなアプリケーション・サーバーを使用するほどであるかどうか確信が持てないといった場合には、PHPを使用する可能性が高くなります。 PHP は、高速で、学習しやすく、便利であり、しかもPerl を学習する必要がありません。

さらに、突然と思われますが、情勢が変わりました。Ruby on Rails がプログラミングの世界に衝撃を与えました。オブジェクト指向で MVC (Model-View-Controller) パラダイムをベースにしたRuby on Rails は、すべての人がやりたいこと (事実上、努力せずに Web サイトを作成すること)を行う方法を提供してくれました。 もちろん、まだ 2 つの問題がありました。その 1 つは、新しいプログラミング言語を学習しなければならなかったことです。このことは、言語がなんであろうと、簡単な作業ではありません。 もう 1 つは、Rubyon Rails を実行できるホストが見つかればラッキーだったことです。 ほとんどの場合、そうではありませんでした。(筆者がそうであったように)同じアカウントを 10 年も担当すると、新しいプログラミング言語がないという理由だけで、新しいフレームワークへの切り替えを多少遅らせるということがあります。さらに、もちろん、何年にもわたって作成してきた、すべての既存の PHP コードの問題もありました。これらの既存のコードをすべて捨て、初めからコーディングしますか。 もちろん「ノー!」です。

積極的な PHP プログラマーなら、どうするでしょうか。 これらの新しい利点の多く取り入れた、新しいフレームワークを作成するというのが、その答えです。このようにして、Zend Framework が生まれました。

Zend Framework は、クリーンで安定した、おそらく最も重要だと思われますが、クリーンな知的所有権を備えたコードを提供します。PHP は企業のスペースに地盤を得ていますが、Fortune が選ぶ 500 社ランキングの企業であれば、他社が知的所有権を所持しているかもしれないリポジトリーに提供されたモジュールに手を出したくないでしょう。

それでは、Zend Framework とは正確に何でしょうか。 Zend Framework は、次のようなものです。

  • PHP をベースにしている。
  • オブジェクト指向である。
  • MVC パラダイムを使用している。
  • オープン・ソースの投稿者を持っている。
  • コードが他人の知的所有権を侵害することのないことに責任を持つ投稿者を持っている。

Zend Framework はまた、MVC パターンを制定することによって、一般的なことだけでなく、データベースのアクセスやPDF ファイルへの出力など、常に行うような特定のことについても、プログラマーの作業を容易にすることも目指しています。(確かにみなさんは、PDF ファイルへの出力をいつでも行うわけではないかもしれません。しかし、もっと簡単であれば、間違いなくそれを行うでしょう。)

Zend Framework のコンポーネントには、次のものがあります。

Zend_Controller
このモジュールは、アプリケーションの全体的な制御を行います。 要求を特定のアクションに変換し、そのアクションが実行されたことを確認します。
Zend_Db
PDO (PHP Data Objects) をベースにして、汎用的な方法でデータベースにアクセスします。
Zend_Feed
RSS フィードと Atom フィードのコンシュームを容易にします。
Zend_Filter
isEmail() および getAlpha() などのストリング・フィルタリング関数を提供します。
Zend_InputFilter
Zend_Filter のために、フォームの入力などの配列とともに動作するよう設計されています。
Zend_HttpClient
HTTP 要求を簡単に実行できるようにします。
Zend_Json
PHP オブジェクトを JavaScript Object Notation に、あるいはその逆に、簡単に変換できます。
Zend_Log
汎用のロギング機能を提供します。
Zend_Mail
テキストおよびマルチパート MIME の E メールを送信できます。
Zend_Mime
MIME メッセージをデコードする際に Zend_Mail によって使用されます。
Zend_Pdf
新規 PDF 文書の作成、および既存の PDF 文書のロードと編集ができます。
Zend_Search
独自のテキストの複雑なサーチを実行できます。 例えば、関連性やその他の要因に基づいて結果を戻す、検索エンジンを作成することができます。
Zend_Service_Amazon, Zend_Service_Flickr, and Zend_Service_Yahoo

これらの Web サービス API に対する簡易アクセスを提供します。

Zend_View
MVC パターンの「ビュー」部分を処理します。
Zend_XmlRpc
XML-RPC クライアントを容易に作成できます。 (将来、サーバー機能が計画されています。)

それでは次に、私たちはどこに行こうとしているのか、および何をしようとしているのかについて見ていきます。


プロジェクト

Zend Framework のすべての出入りを示すには、多くの領域をカバーするプロジェクトが必要です。筆者の好みのプロジェクトは、まだオンライン・フィード・リーダーなので、このプロジェクトが良いでしょう。なぜかと言えば、筆者はまだ実際に自分が希望するものを見つけていないからです。新しいテクノロジーが手に入るたびに、以前に使用していたものより良いものを作ろうとします。そのため、新しいオンライン RSS/Atom フィード・リーダー・サービスを作成しようとしています。

世界は、本当に別のオンライン・フィード・リーダーを必要としているのでしょうか。おそらく、その通りでしょう。 しかし、それを使用するのが筆者だけであるかどうかはどうでも良いことで、それが核心です。Zend Framework は、数十万ドルという価値の研究を正当化したからプロジェクトを行うのではなく、単に自分が希望するからという理由だけで、プロジェクトを行うことができるほど、物事を単純化することを目指しています。それでは、このすばらしいニュースマスターとなるものを使って何をすべきでしょうか。現在のところ、それは次のことです。

  • フィードまたは購読のセットをユーザーが保管できるようにする。
  • フィードと個別のアイテムをユーザーが読み取れるようにする。
  • 個別のポストをユーザーが保管できるようにする。
  • 特定のテキストの保管済みエントリーをユーザーがサーチできるようにする。
  • RSS フィードを持たないページをユーザーが容易に読めるようにする。
  • ポスティングの集合をユーザーが印刷できるようにする。

このシリーズのコースを通して、これらすべてを Zend Framework を使用して行う方法について説明します。シリーズは、次のようになります。

パート 1: 基本
一般的なプロジェクトおよび Zend Framework を説明している、この記事です。
パート 2: データベースを追加する
このチュートリアルは、Zend_DB モジュールを使用して、購読情報 (ならびに、保管されたエントリーおよびその他の情報)の保管に使用される、中央データベースの作成および操作の方法を示します。
パート 3: フィード
ここでは、等式にフィードを追加して、アカウントの作成、特定のフィードの購読、およびこれらのフィードの表示をユーザーが行えるようにします。このチュートリアルでは、Zend_Feed モジュールと Zend_Inputfilter モジュールを使用しますが、Zend_Inputfilterモジュールは、E メール・アドレスの検査とフィード・エントリーから HTML タグを除去するのに使用されます。
パート 4: フィードがない場合: Zend_HTTPClient
すべてのサイトにフィードがあるとはかぎりませんが、それでも 1 つの場所ですべてを追跡するのは便利です。この記事では、Zend_HTTPClient モジュールを使用して、フィード・リーダー・インターフェースにデータをプルするためのプロキシーを作成する方法を示します。
パート 5: PDF ファイルを作成する
このチュートリアルでは、Zend_PDF モジュールを使用して、保管された記事、イメージ、およびサーチ結果をカスタマイズしたPDF をユーザーが作成できるようにする方法を説明します。
パート 6: E メールを送信する
この記事では、Zend_Mail モジュールを使用して、新しいポストおよび購読しているフィードをユーザーにアラートし、さらにこれらのポストをHTML の E メールを使用して送信する方法について説明します。
パート 7: サーチ
この記事では、Zend_Search モジュールを使用して、既存の現行および保管されたブログ・エントリーで特定のサーチ用語をサーチして、ランク付けされた結果を戻す方法について説明します。
パート 8: 関連する情報および関連サービスを追加する
このチュートリアルは、Zend_Service モジュールを使用して、他のサービス (具体的には、Amazon、Flickr、およびYahoo!) から情報をプルする方法について説明します。 現在のブログ・エントリーまたはユーザーがクリックしたサーチ用語から、本、写真、およびサーチ結果をプルするためのインターフェースにはAjax を使用します。
パート 9: Ajax を追加する
Zend Framework では、ネイティブ PHP オブジェクトと JSON (JavaScript ObjectNotation) 相互間で自動的に変換を行うことにより、アプリケーションに Ajax(Asynchronous JavaScript + XML) の対話を追加するのを容易にしています。この記事では、この機能をフィード・リーダーに追加する方法を示します。 また、JSONの基本的な説明も含まれています。

セットアップ

Zend Framework は特別のインストールは必要ありませんが、いくつかの要件に留意する必要があります。Zend Framework は PHP V5 を必要とします。 これは V5.0.4 以上と互換性があるためV5.1 も使用できますが、必須ではありません。 ただし、library ディレクトリー(フレームワークは、そのファイルのすべてがここにあるものと想定しています)が include_path に含まれていることを確認する必要があります。 これを行うには、以下のようにphp.ini ファイルに設定されていることを確認してください。

; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;e:\sw\zendframework\library"

このとおりです。


MVC パターン

グラフィック・デザインとなると、筆者はまったくお手上げです。 それは、筆者にはうまくできないことです。しかし、その才能がある人が一緒になってデザインすれば、筆者は、ご要望にあわせてどのようにでもインターフェースを作成できます。そのため、Web ベースのアプリケーションのデザインに関係する作業を、デザイナーができること、コーダーができること、およびDBA ができることを分割できれば、非常に便利です。 これが、プロジェクトを3 つの層に分解するという、MVC パターンのエッセンスです。

Model-View-Controller を定義する

定義によれば、パターンとは、問題に対するすぐれたソリューションであるために、何年にもわたって発展してきたことを行う方法です。MVC (Model-View-Controller) パターンもその例外ではありません。 このパターンを作成したときの他の基本的な方法から、その定義に差があることに気が付くことがあります。例えば、ある MVC パターンの定義では、コントローラーの役割を、単に、モデル層のすべてのビジネス・ロジックを使用して状態を変更するものとして定義されます。結局、それが重要である唯一のことは、最も効率的に行ってほしいことをアプリケーションが実行してくれることです。

モデル層は、実データの表現からなります。 例えば、フィード・リーダー・プロジェクトには、ユーザー、フィード、およびフィード・エントリーがあります。これらのデータベース内での表現はその構造を概念的に「モデル化」し、モデル層を構成します。

ビュー層は、データをどのように表示するかを実際に定義するロジックからなります。この層は、表示されるデータが何であるかは決定せず、どのように表示されるかだけを決定します。このテンプレートにはロジックを含まないのが理想的です。 単純に、与えられた情報を使用して表示するだけです。

コントローラーは、データが何であるかを実際に定義するものです。 実際には、コントローラーにすべてのロジックが存在します。Zend Framework では、この層は実行するアクションを制御します。 例えば、1つのフィード・アイテム・オブジェクトを表示したい場合、その責任範囲は、次のように解析されます。フィード・アイテム・オブジェクトには、表示アクションが呼び出されたときに何が起こるかを定義するコントローラーがあります。そのアクションは、希望するデータをモデル (つまり、データベースまたは他の永続ストア)から取り出し、それらのフィールド (タイトル、コンテンツ、permalink など)を、単純にブラウザー内で表示するビューにフィードする操作を呼び出すものです。

たしかに、これがほとんどの PHP プログラマーの出発点です。 PHP は、オブジェクトは存在しますが、常に手続き型言語でした。それにもかかわらず、必ずトレードオフをする価値はあります。 MVC パターンへの構築は、すべてがごちゃごちゃに混ざっているアプリケーションを構築するよりもずっと簡単です。

それでは、何が期待されるかを見ていきましょう。


コーディング・ガイドライン

Zend Framework に対するコーディングをするか、または Zend Framework を使用するコーディングをする場合には、特定のガイドラインに従う必要があります。これらのガイドラインは、グループ・プロジェクトを容易にするようデザインされています。つまり、コーディング規約を定義することによって、後で発生する問題が回避されるだけでなく、他の人がコードを読むのを容易にします。Zend Framework のドキュメンテーションには、次のような、ガイドラインのページが含まれています。

  • ファイルがクリーンであることを確認します。 つまり、Web サーバーを呼び出して、ヘッダー、4スペースの標準インデントなどの前に、予期せずにコンテンツを送信してしまうような先行スペースまたは後続スペースがないようにします。
  • フレームワークを使用するだけのアプリケーションではなく、 Zend Framework自身の一部となることを意図した場合にのみ、クラス名を Zend_ で開始します。
  • アンダースコアーは、関数名には禁止されています。 代わりに、(getTodaysDate()のように) camel-style の小文字を使用してください。
  • 変数名は、private または protected の場合のみアンダースコアーで開始します。
  • すべての変数は private、protected、または public として宣言し、var を使用しないでください。
  • <?php ?> のように、短縮形 (<? ?>) ではなく、標準的な PHP タグを使用します。
  • コードが読みやすいか確認します。 つまり、テキストを連結するためにピリオド(.) を使用する場合、読みやすくするために、ピリオドの前後にスペースを必ず入れるようにしてください。同様に、配列を宣言するときは、コンマの後にスペースを追加してください。
  • 参照渡しをする必要がある場合は、関数の宣言の中でのみ行うようにします。呼び出し時点の参照渡しは、禁止されています。
  • すべての PHP ファイルには、PhpDocumentor が読むことができるドキュメンテーションを組み込む必要があります。コーディング・ガイドラインでは、このドキュメンテーションに最低限必要な特定のタグを指定します。

もちろん、上記はガイドラインの完全なリストではありませんが、ガイドラインに要求されることについてのアイディアを与えてくれるものです。完全なリストでドキュメンテーションをチェックすれば、作成したコードを PHPプロジェクトで簡単に共用できるようにするための決まりごとを容易に満たすことができます。


まとめ

Zend Framework は、PHP アプリケーションを作成するための、新しい IP による確実な方法を提供してくれます。そこでは、ユーザーの PHP のコーディング経験を向上させることを目標としてます。このシリーズでは、RSS/Atom フィード・リーダーを構築するために Zend Frameworkを使用します。 このシリーズの後続のパートでは、データ・アクセス、サーチ、Webサービス、およびフレームワークのその他の部分についてカバーしていきます。パート 2 では、ログイン・システムを作成して、データベースの構築を開始します。

参考文献

学ぶために

製品や技術を入手するために

  • Zend Technologies から Zend Framework をダウンロードしてください。
  • PHP.net から PHP V5.x をダウンロードしてください。
  • 次期オープンソース開発プロジェクトを、IBM trial softwareを使って構築してください。ダウンロード、あるいはDVDで入手することができます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=237185
ArticleTitle=Zend Framework を理解する パート 1: 基本
publish-date=06272006