Caution: You are browsing the legacy symfony 1.x part of this website.

1日目: プロジェクトを立ち上げる

挑戦

symfonyアドベントカレンダーは、12月1日からクリスマスまで毎日発表される全24編のチュートリアルです。週末を含む毎日、新しいチュートリアルが発表されます。それぞれのチュートリアルは1時間未満ですが、Web 2.0の現在進行中の進化に関するあらゆることを知る機会になるでしょう。クリスマスには、できあがったアプリケーションはオンライン上で公開され、オープンソースのアプリケーションとして提供されます。このアプリケーションは、使いやすくて、面白く、便利で、かつ、楽しいものになるはずです。

1時間未満で24回ということは、合計しても1日未満です。それは、私たちが開発者がsymfonyを学ぶのに必要であると考えている時間そのものです。毎日、新機能がアプリケーションに追加されていきますが、私たちはこの開発を、symfonyを使ったWeb開発のよい練習素材とすると同時に、symfonyの機能性をどのように利用するかを示します。毎日、symfonyでWebアプリケーションを開発するのがどんなに速く・効率的であるかを実感するでしょう。そして、さらに知りたくなるにちがいありません。

たったそれだけではものたりないという割には、われわれが怠惰なせいもあって、21日目 - 冬の時間 - のためのプランが全くありません。みなさんが最も必要とする機能は、当日、準備なしでアプリケーションに追加されるでしょう。そして、私たちはそれうまくいかせるつもりです。それが、一日でsymfonyの第一人者を得るための日になるでしょう。

プロジェクト

設計されるアプリケーションはちょっとした「発表会」というようなアプリケーションで、TODOリスト、電話帳、または書店のようなものになるかもしれません。しかし、我々はsymfonyを、便利で、数多くの機能を持ち、有力な規模の独創的なプロジェクトで使いたいと考えています。その目的は、symofonyは、複雑な状況で、粋なプロフェッショナル・アプリケーションを少しの努力で開発するために使えるということを本当に証明することです。

symfony製のWebサイトが大きな負荷に耐えられるのを示すために、多くの人々が実際にアプリケーションを使ってくれることを願っています。それによって、このアプリケーションが、実際のサービスをもたらし、既存の必要性に答え、もしくは新しいものを生み出すことになるのです。Webサイトの立ち上げは実際の負荷テストになるでしょう; これは、サイトがどのくらいの訪問者を支えることができるかを確認するために、あなたのような謙虚な訪問者…そのサイトで議論し、ブックマークし、ブログで言及し、実際の生活で話をする…を必要としていることを意味します。

プロジェクトの内容は他の日のために秘密しておきます。私たちには、今日、完全装備のWeb 2.0のアプリケーションについて説明すること以外に、まだやらねばならないことが多くあります。他の前提について述べ、着手するためにあなたにもう少し時間が必要でしょう。とはいえ、私たちにはその呼び名が必要ですから、こう呼ぶことにします: askeet

本日の目的

今日の目的は、Webブラウザでアプリケーションのページを表示することと、プロの開発環境をセットアップすることです。これはsymfonyのインストール、アプリケーションの作成、Webサーバーの構成、およびソースコードのバージョン管理システムのセットアップを含んでいます。

それは、すでに以前のチュートリアルをやった人々にとっては簡単で、他の人にはそれほど困難ではありません。そして、皆、何か新しいものを学ぶでしょう。

Apache、MySQL、PHP 5がインストールされているUnix系システムを利用していることを想定しています。Windowsで動かしていても、慌てないでください: その環境でも十分機能しますし、コマンドプロンプトにおいて、いくつかのコマンドをタイプする必要があるだけです。

note

UnixシェルコマンドはWindows環境でも便利です。Windowsでtargzip、もしくはgrepを使いたければCygwinをインストールします。公式ドキュメントはまばらですが、良いインストールガイドはここで見つかります。冒険好きな方はMicrosoftのWindows Services for Unixを試すのもいいでしょう。

symfonyのインストール

symfonyをインストールする最も簡単な方法は PEARパッケージを使用することです。しかしながら、チャンネルを使用してsymfonyチャンネルにアクセスするには、PEAR1.4.0以上にアップグレードする必要があります(PEAR 1.4.5を含んでいるPHP 5.1.0を使っていれば必要ありません):

$ pear upgrade PEAR

note

PEARを使用している間に何か問題が生じたら、インストールの章を参照してください。

では、'symfony'のチャンネルを加えましょう:

$ pear channel-discover pear.symfony-project.com

これで、symfonyの最新の安定バージョンをすべての依存関係と共にインストールする準備ができました:

$ pear install symfony/symfony

symfonyのバージョンをチェックするコマンドを使用して、symfonyがインストールされているかチェックしてください:

$ symfony -V

あなたがこの新しいコマンドラインツールを使ってできることに興味があるなら、symfony -Tを入力して、利用可能なオプションを表示してください。また、tgzアーカイブやsvnレポジトリからsymfonyをインストールする方法を見るには インストールの章を読んでみてください。コミュニティの貢献によって、公式サイトのwikiでもPEARを使わないインストール方法が詳しく説明されています。

プロジェクトのセットアップ

symfonyでは、同じデータモデルを共有する アプリケーション(application)プロジェクト(project)に再編成されています。askeetプロジェクトのために、フロントエンドとバックエンドがあるという事実を明らかにすることができます: それは2つのアプリケーションを作ります。プロジェクトがアプリケーションの外郭構造で、まずはじめに作られなければなりません。そのために必要なのは、ひとつのディレクトリとsymfony init-projectコマンドだけです:

$ mkdir /home/sfprojects/askeet
$ cd /home/sfprojects/askeet
$ symfony init-project askeet

ではsymfony init-appコマンドを使って frontendアプリケーションを作成しましょう:

$ symfony init-app frontend

おお、速い。

note

Windowsユーザーは、スペースを含まないパスで、symfonyを実行したり、新しいプロジェクトをセットアップしたりする必要があります(これはDocuments and Setting ディレクトリも含みます)。 訳注: 同様に日本語を含むディレクトリも避けたほうがよいかもしれません。

Webサービスのセットアップ

Webサーバー構成

新しいアプリケーションをアクセスしやすくするように、Apacheの設定を変更しましょう。プロの間では、バーチャルホストとして新しいアプリケーションをセットアップするほうがやりやすく、ここで説明します。しかしながら、エイリアスとしてそれを加えるのを好むなら、Webサーバーの設定の章でその方法を見つけてください。

Apache/conf/ディレクトリのhttpd.confファイルを開いて、最後の行に次のコードを追加してください:

NameVirtualHost 127.0.0.1:80

<VirtualHost 127.0.0.1:80>
  ServerName askeet
  DocumentRoot "/home/sfprojects/askeet/web"
  DirectoryIndex index.php
  Alias /sf /usr/local/lib/php/data/symfony/web/sf

  <Directory "/home/sfprojects/askeet/web">
   AllowOverride All
  </Directory>
</VirtualHost>

note

/sfエイリアスはPEARのdataディレクトリにsymfonyのフォルダを指定しなければなりません。これを調べるには、pear config-showを入力してください。symfonyアプリケーションは、WebデバッグツールバーとAJAXヘルパーを動かすのに必要な画像とJavaScriptファイルを得るためにこのフォルダにアクセスできる必要があります。

Windowsでは、Aliasの行を次のように置き換える必要があります。

Alias /sf "C:\php\pear\data\symfony\web\sf"

上記の方法でうまくゆかない場合、エイリアスを設定した/sfディレクトリ用にパーミッションを指定する必要があります。次のコードはWindowsのWAMPで動作します:

NameVirtualHost 127.0.0.1:80

<VirtualHost 127.0.0.1:80>
  ServerName askeet
  DocumentRoot "C:/sfprojects/askeet/web"
  DirectoryIndex index.php
  Alias /sf "C:/wamp/php/PEAR/data/symfony/web/sf"
  <Directory "C:/sfprojects/askeet/web">
   AllowOverride All
   Allow from All
  </Directory>
  <Directory "C:/wamp/php/PEAR/data/symfony/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

ドメイン名を宣言

ドメイン名askeetがローカルで宣言されなければなりません。

Linux系OSを利用しているのであれば、/etc/hostsの中で宣言しなければなりません。Windows XPを使っているなら、このファイルはC:\Windows\system32\driver\etc\ディレクトリにあります。

以下の行を追加してください:

127.0.0.1         askeet

note

この作業には管理者権限を持っている必要があります。

新しいホストをセットアップしたくないなら、別のポートでWebサイトを配信できるように`Listen ステートメントを加えてください。これで、localhostドメインが利用できます。

新しい設定をテストする

Apacheを再起動して、新しいアプリケーションにアクセスできるか確認してください:

http://askeet/ 

初期ページ

note

symfonyは、URLの/index.php/部分を取り除くのにmod_rewriteモジュールが使えます。 もし、これを使いたくない、またはWebサーバーが同等な設備を持っていないなら、web/ディレクトリに位置する.htaccessファイルを取り除いてください。 もしApacheがmod_rewriteを含まずにコンパイルされているなら、mod_rewriteのDSOがインストールされていて、httpd.confに次の行があるかを確認してください:

AddModule mod_rewrite.c LoadModule rewrite_module modules/mod_rewrite.so

ルーティングの章において、smart URLs に関してさらに学ぶこともできます。

また、開発環境におけるアプリケーションにアクセスしましょう。以下のURLを入力してください:

http://askeet/frontend_dev.php/ 

Webデバッグツールバーは先頭の右隅に表示されます。それは、Alias sf/の設定が正しいと立証する小さいアイコンを含んでいます。

Webデバッグツールバー

再度いいますが、Windows環境でIISサーバーを実行する場合は、セットアップは少し異なっています。関連チュートリアルにて設定方法を確かめてください。

Subversion

ずぼらな人のための良い原則の1つは既存のコードを壊すことに悩まなくてよいこと。ソースコードのバージョン管理ツールで次のことが実現できます:

  • 速く作業ができる
  • 修正が効率的ではない場合以前のバージョンに差し戻しできる
  • プロジェクトに複数の人が取り組める
  • アプリケーションの日常のすべてのバージョンにアクセスできる

この目的のためにSubversionを使います。SubversionサーバーをインストールしたもしくはSubversionサーバーにアクセスする権限があることを前提とします。

最初に、askeetプロジェクト用に新しいリポジトリを作成します:

$ svnadmin create $SVNREP_DIR/askeet
$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/askeet/trunk file:///$SVNREP_DIR/askeet/tags file:///$SVNREP_DIR/askeet/branches

note

Subversionが初めての方に。これら2つの行ではSubveresionリポジトリを作成しています。2番目の行ではリポジトリのディレクトリ構造を作成しています。メインのすべての開発コードはtrunkディレクトリでバージョン管理します。tagsはバージョン1、バージョン2などのコードのメジャーリリースのコピーを維持します。branchesはメインの開発コードとは大幅に異なる開発コードのために存在します。想定される通常の用途ではbranchesは最終的にtrunkにマージし直されます。たとえばbranchで新しい機能が徹底的にテストされ修正される間もメインのtrunk開発は継続されます。完結したbranchコードがtrunkにマージされると分岐以降の新しい変降が行われます。SVNはこのプロセスを手助けする強力なツールを提供します。

次に、cathe/log/にある一時ファイルを除いて、最初の取り込みをしなければなりません:

$ cd /home/sfprojects/askeet
$ rm -rf cache/*
$ rm -rf log/*
$ svn import -m "initial import" . file:///$SVNREP_DIR/askeet/trunk

今度は、初期状態のアプリケーションがあるディレクトリを取り除き、SVNバージョンのチェックアウトを使用してください:

$ cd /home/sfprojects
$ mv askeet askeet.origin
$ svn co file:///$SVNREP_DIR/askeet/trunk/ askeet/
$ ls askeet

すべてがうまくいったら、インポートに使用したオリジナルのディレクトリは不要になったので、削除します:

$ rm -rf askeet.origin

note

Subversionに初めての方に。trunkコードは作業ディレクトリのaskeet/に存在します。これは修正したり開発を行うコードです。SVNの用語では"作業コピー"と呼ばれます。SVNはリポジトリにコードがコミットされるときのコードへの変更を追跡します。

1つセットアップするものが残っています。リポジトリにあなたの作業ディレクトリをコミットするなら、プロジェクトのcache/log/ディレクトリにあるような、いくつかの不要なファイルをコピーしてしまうかもしれません。したがって、このプロジェクトのSVNへの無視リストを指定する必要があります。

$ cd /home/sfprojects/askeet
$ svn propedit svn:ignore cache

SVNのために設定されたデフォルトのテキストエディタが立ち上がるはずです。コミットするときSVNが無視するcache/のサブディレクトリを加えてください:

*

保存して、終了ください。これで終わりです。

log/ディレクトリのために同じ手順を繰り返してください:

$ svn propedit svn:ignore log

以下のように入力するだけです:

*

そして、cachelogディレクトリに対して、Webサーバーがそれらに上書きできるようにコマンドラインで適切なレベルの書き込み権限をセットしてください:

$ chmod 777 cache
$ chmod 777 log

note

Windowsユーザーは、Subversionリポジトリを管理するのにすばらしいTortoiseSVNクライアントが使えます。通常のWindows Explorerコマンドを使用してディレクトリを削除しないようにしてください。代わりにSVNが理解できるようにAlt-Click Tortoise-Delete(もしくはRename)を使います。さもなければコミットできなくなりTortoise-Updateを使用して最新バージョンのコードに差し戻すはめになります。

バージョン管理に関してさらに知りたいなら、symfony bookでプロジェクト作成の章を確認してください。

note

askeetのSVNリポジトリは公開されています。次のURLからアクセスできます。

  http://svn.askeet.com/

さぁどうぞ。チェックアウトしてください。

今日のコードはすでにコミットされていますから、release_day_1タグが見つかります:

  $ svn co http://svn.askeet.com/tags/release_day_1/ askeet/

それではまた明日

さて、すでに1時間が経過しました。私たちは、たくさん話をしましたが、symfonyのアーリーアダプターには、何も新しいことを示しませんでした。しかし、symfonyアドベントカレンダーの2日目に明らかにされるものを見てください:

  • このアプリケーションで何をするか
  • データモデルを構築し、O/Rマッピングを作成する
  • 足場となるモジュールを作成する

その間、最新のaskeetニュースを受け取りたいなら、askeet mailing-listに加入するか、専用のフォーラムにてどうぞ。

また、きっと明日!