add to hatena hatena.comment (2) add to del.icio.us (0) add to livedoor.clip (1) add to Yahoo!Bookmark (0) Total: 3

DAY1: プロジェクトの作成

symfonyではaskeetという24日間かけてsymfonyでQ&Aサイトを構築するチュートリアルがあり
「凝ってるなー」と新鮮味を感じていたのも過去の物。
というのも、symfonyのバージョンが1.1さらには1.2と移行されていくなかで
symfony1.0ベースのaskeetチュートリアルは、チュートリアルとして中途半端なものになっています。

というわけで、これからsymfony1.2をベースとして実際にaskeetを作成してみようと思います。
また、ただsymfony1.0版askeetを移植するだけでは面白くないので、
1.0系の解説とは異なる方法でアプリケーションを作っていきたいと思います。

symfonyって?

PHPでは有名なWebアプリケーション開発のためのフレームワークです。
数多くあるPHPフレームワークの中では多機能で複雑なフレームワークになっています。
そのため学習コストも高いですが、使い慣れるとその便利さに好きになると思います。(多分)

ref: symfony

他のフレームワークとの大きな違いはsymfonyそのものがかなりのソース量であるということ。
これは多機能であるという事と同時に、学習コストも高いということです。
テーブルが1つか2つ程度のアプリケーションであれば
CakePHPを選択することが正しいでしょう。

もし、画面数が多く、実装する機能も多い場合はsymfonyで開発することを検討してみるといいでしょう。

MVC構造

知っておかなければならないことはsymfonyはMVC構造であるということです。
詳しい説明はしません。簡単にまとめると以下のようなものだと認識しておくとよいでしょう。

M … モデル(データベースやロジック)
V … ビュー(HTMLなど見せる部分)
C … コントローラー(画面遷移部分の担当)

askeet1.2を始めるにあたって

さすがに本家のように24日間毎日詳細に書き続ける自信はありません。
全体の流れは本家のaskeetを実際に読んでみて、流れを理解しておいてください。

英語: http://www.symfony-project.org/askeet/1_0/en/
日本語: http://symfony.xrea.jp/1.0/askeet/1.html

環境の構築

まずは環境を用意しましょう。
another music of symfony(以下本チュートリアル)ではCentOS5で環境を構築します。

理由として、VPSや専用サーバーなどでCentOS5が選択できるところが多いため、
より実践的な内容で話が勧められるということです。

ローカルでCentOS5の環境を作成する場合はVMwareで構築してみると簡単にできるでしょう。
OSのインストールなどは本チュートリアルでは取り上げませんのでがんばって用意してください。

しかし、ここですでに挫折する可能性があります。
というのも、symfony1.2ではPHPのバージョンが5.2.3以上である必要があります。
CentOS5などのディストリビューションでは5.1.6のため、この時点で「どうするの?」ってなる人もいるでしょう。

「tarとってきてソースから入れてね」とヒトコトで終わってしまうものなんですが、
ソースで管理するのが面倒であったり、基本インストールアプリはyumで管理してるんだけ度という人もいるはずです。

もし、CentOSを使っている場合で、手っ取り早く手元に環境を作りたいのであれば
以下を参考にyumでPHP5.2.Xをインストールしてみてはいかがでしょうか?

ref: http://d.hatena.ne.jp/sotarok/20071115/vmware_centos5_10

手順はyumのリポジトリとしてUtter Ramblingsを追加し、そこからPHPをインストールします。

最初にGPGキーをインポートしておきます。

$ sudo rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

次にyumにリポジトリを追加します。

$ sudo vim /etc/yum.repos.d/utterramblings.repo

[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

このリポジトリを使うときは –enablerepo=utterramblings をつけてyumを実行します。

$ sudo yum –enablerepo=utterramblings update php

DBはMySQLを、WEBサーバーはapache2を使います。
各バージョンは以下のようになりました。

$ php -v
PHP 5.2.6 (cli) (built: May 5 2008 10:32:59)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

$ mysql -V
mysql Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0

$ /usr/sbin/httpd -v
Server version: Apache/2.2.3
Server built: Jan 15 2008 20:33:30

ではさっそくsymfonyをインストールしてみましょう。

symfonyのインストール

次にsymfonyをインストールするのですが、本家ではpearコマンドで簡単!と書いていますが、
ここではsubversionのリポジトリからソースをチェックアウトしてくる方法にします。

理由は至って簡単で、
・複数のsymfonyのバージョンを同一サーバーにインストールすることができる
・アップグレードもsvn updateでできる
・pearをインストールしていなくてもよい

とくに、symfonyはpearが必須と思われがちですが
プラグインのインストールもsvnコマンドを使うようにすればpearは必須ではありません。
慣れの問題になるかもしれませんが、あえてここではpearを使いません。

インストール先は /usr/local/lib/symfony12 とします。
ディレクトリを作成し、そこにリポジトリからチェックアウトします。

$ sudo mkdir -p /usr/local/lib/symfony12
$ sudo svn co http://svn.symfony-project.com/branches/1.2 /usr/local/lib/symfony12/
A test
A test/unit
A test/unit/i18n
A test/unit/i18n/dataTest.php
A test/unit/i18n/sfChoiceFormatTest.php
….

インストールできたかを確認します。
それはチェックアウトしたsymfonyコマンドを叩くことで確認できます。

$ /usr/local/lib/symfony12/data/bin/symfony -V
symfony version 1.2.0-DEV (/usr/local/lib/symfony12/lib)

もうこれでインストールは完了です。

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

では最初にプロジェクトを作成していきます。
作業ディレクトリとして本家と統一しておきます。

ただし、sfprojectsユーザーはもともと存在しないので今回のために用意しておきます。

$ sudo mkdir -p /home/sfprojects/askeet
$ sudo chown maedaz:users /home/sfprojects/askeet

では、作成したaskeetディレクトリにaskeetアプリケーションを作成していきます。
最初はアプリケーションの初期化をgenerate:projectコマンドで作成します。

$ cd /home/sfprojects/askeet
$ /usr/local/lib/symfony12/data/bin/symfony generate:project askeet

>> dir+ /home/sfprojects/askeet/doc
>> dir+ /home/sfprojects/askeet/data
>> dir+ /home/sfprojects/askeet/web
>> dir+ /home/sfprojects/askeet/web/js
>> file+ /home/sfprojects/askeet/web/.htaccess
>> dir+ /home/sfprojects/askeet/web/css
>> file+ /home/sfprojects/askeet/web/css/main.css
>> dir+ /home/sfprojects/askeet/web/images
>> dir+ /home/sfprojects/askeet/web/uploads
>> dir+ /home/sfprojects/askeet/web/uploads/assets
>> file+ /home/sfprojects/askeet/web/robots.txt
>> dir+ /home/sfprojects/askeet/log
>> dir+ /home/sfprojects/askeet/apps
>> dir+ /home/sfprojects/askeet/config
>> file+ /home/sfprojects/askeet/config/databases.yml
>> file+ /home/sfprojects/askeet/config/ProjectConfiguration.class.php
>> file+ /home/sfprojects/askeet/config/rsync_exclude.txt
>> file+ /home/sfprojects/askeet/config/schema.yml
>> file+ /home/sfprojects/askeet/config/propel.ini
>> file+ /home/sfprojects/askeet/config/properties.ini
>> dir+ /home/sfprojects/askeet/plugins
>> dir+ /home/sfprojects/askeet/cache
>> dir+ /home/sfprojects/askeet/test
>> dir+ /home/sfprojects/askeet/test/functional
>> dir+ /home/sfprojects/askeet/test/bootstrap
>> file+ /home/sfprojects/askeet/test/bootstrap/unit.php
>> file+ /home/sfprojects/askeet/test/bootstrap/functional.php
>> dir+ /home/sfprojects/askeet/test/unit
>> file+ /home/sfprojects/askeet/symfony
>> dir+ /home/sfprojects/askeet/lib
>> tokens /home/sfprojects/askeet/config/propel.ini
>> tokens /home/sfprojects/askeet/config/properties.ini
>> tokens /home/sfprojects/askeet/config/ProjectConfiguration.class.php
>> chmod 777 /home/sfprojects/askeet/cache
>> chmod 777 /home/sfprojects/askeet/log
>> chmod 777 /home/sfprojects/askeet/web/uploads
>> chmod 777 /home/sfprojects/askeet/symfony
>> chmod 777 /home/sfprojects/askeet/web/uploads/assets

これで、askeetというプロジェクトの初期化が行われました。
今後このディレクトリ以下にアプリケーションなどのファイルを作成していくことになります。

つぎに、askeetプロジェクトににfrontendというアプリケーションを作成します。
frontendとは一般ユーザー向けの画面を表示するためのフロント側のアプリケーション名です。

ここからsymfonyコマンドはもうさきほどのような深い階層にある
/usr/local/lib/symfony12/data/bin/symfony
を叩かなくても初期かされたプロジェクト直下にあるsymfonyがエイリアスになっているので
このコマンドを叩けば大丈夫です。

そしてアプリケーションの初期化はgenerate:appコマンドになります。
では、さっそく実行してみます。

$ ./symfony generate:app frontend

>> dir+ /home/sfprojects/askeet/apps/frontend/templates
>> file+ /home/sfprojects/askeet/apps/frontend/templates/layout.php
>> dir+ /home/sfprojects/askeet/apps/frontend/modules
>> dir+ /home/sfprojects/askeet/apps/frontend/config
>> file+ /home/sfprojects/askeet/apps/frontend/config/filters.yml
>> file+ /home/sfprojects/askeet/apps/frontend/config/app.yml
>> file+ /home/sfprojects/askeet/apps/frontend/config/cache.yml
>> file+ /home/sfprojects/askeet/apps/frontend/config/security.yml
>> file+ /home/sfprojects/askeet/apps/frontend/config/settings.yml
>> file+ /home/sfprojects/askeet/apps/frontend/config/routing.yml
>> file+ /home/sfprojects/askeet/apps/fr…licationConfiguration.class.php
>> file+ /home/sfprojects/askeet/apps/frontend/config/view.yml
>> file+ /home/sfprojects/askeet/apps/frontend/config/factories.yml
>> dir+ /home/sfprojects/askeet/apps/frontend/i18n
>> dir+ /home/sfprojects/askeet/apps/frontend/lib
>> file+ /home/sfprojects/askeet/apps/frontend/lib/myUser.class.php
>> tokens /home/sfprojects/askeet/apps/frontend/config/settings.yml
>> file+ /home/sfprojects/askeet/web/index.php
>> file+ /home/sfprojects/askeet/web/frontend_dev.php
>> tokens /home/sfprojects/askeet/web/index.php
>> tokens /home/sfprojects/askeet/web/frontend_dev.php
>> rename /home/sfprojects/askeet/apps/fr…frontendConfiguration.class.php
>> tokens /home/sfprojects/askeet/apps/fr…frontendConfiguration.class.php
>> chmod 777 /home/sfprojects/askeet/cache
>> chmod 777 /home/sfprojects/askeet/log
>> chmod 777 /home/sfprojects/askeet/web/uploads
>> chmod 777 /home/sfprojects/askeet/symfony
>> chmod 777 /home/sfprojects/askeet/web/uploads/assets
>> dir+ /home/sfprojects/askeet/test/functional/frontend

これで空のfrontendアプリケーションが用意されました。
次にサーバーのセットアップを行います。

サーバーのセットアップ

サーバーとして今回はapacheを使います。
URLはどうしましょうか。
今回は
http://symfony.centos5.localhost/askeet/
にすることにします。

ここでドメイン(symfony.centos5.localhost)はhostsファイルで定義してあります。
ref: http://www.symfony-project.org/askeet/1_0/en/1#Declare%20the%20domain%20name

まず、現在のドキュメントルートが
/var/www/localhost/htdocs
ですでに存在しているとします。

本家ではサブドメインを用意して表示する方法を提案していますが、
今回はすでに存在しているドキュメントルート以下に設置する方法について考えます。

そして、/var/www/localhost/htdocs/askeet に設置したいとします。
まず、ディレクティブで
AllowOverride All
DirectoryIndex index.php
を設定しておきます。

必要があればPHPの設定も行っておきます。

$ sudo vim /etc/httpd/conf.d/symfony.conf
NameVirtualHost 172.16.203.4:80

ServerName symfony.centos5.localhost
DocumentRoot “/var/www/localhost/htdocs”

AllowOverride All
DirectoryIndex index.php
Allow from all

サーバーを再起動させます。

$ sudo /sbin/service httpd restart

コンテンツそのものはシンボリックリンクを貼ることで動作するようにします。
まず、askeetプロジェクトのwebディレクトリが実際にブラウザから呼び出される領域になります。

$ ln -s /home/sfprojects/askeet/web /var/www/localhost/htdocs/askeet

ではブラウザからアクセスしてみます。
http://symfony.centos5.localhost/askeet/

「Symfony Project Created」が表示されていればOKです!


でも、画像が表示されていませんね。
これは、symfonyをインストールしたsfディレクトリに標準の画像が用意されています。
なのでこれもシンボリックリンクを張っておきます。

$ ln -s /usr/local/lib/symfony12/data/web/sf /home/sfprojects/askeet/web/sf

さぁ、もう一度アクセスしてみましょう。
綺麗なsymfonyの画面が表示されました!


おつかれさまです。another music of symfonyの1日目が終わりました。

関連するその他の記事

Comments

Leave a Reply