このプロジェクトではfuelphpにaws-sdk-phpとphpunitを組み込んだものをベースとしています。
使用しているバージョンは以下の通りです。
- fuelphp 1.6
- aws-sdk-php 2.0
- phpunit 3.7
- fluent-logger-php v0.3.7
fuelphpドキュメント1.6 (英語)
fuelphpドキュメント1.3 (日本語)
fuelphp (github)
aws-sdk-phpドキュメント2.0 (英語)
aws-sdk-php 2.0 (github)
phpunitドキュメント3.7 (日本語)
phpunit (github)
fluent-logger-php (github)
gitの基本チュートリアルは learnGit で実際に動かしながら動作を学べます。
リポジトリからローカルにチェックアウトするには以下のようにします。
$ git clone --recursive git@github.com:cloudpack/apppack.git
$ cd apppack
$ php composer.phar update
$ oil refine install
githubにコミットするには自分の環境のssh鍵をgithubに登録する必要があります。
publicディレクトリがドキュメントルートになります。
プロジェクトをホスティングするにはいくつか方法がありますが、最も簡単なのはpublicディレクトリを/var/www/htmlからリンクすることです。
# mv /var/www/html /var/www/html.org
# ln -s public /var/www/html
この場合、リンクを辿れるように、またpublicディレクトリ直下の.htaccessを使用できるようにwebサーバーの設定ファイルを書き換えます。
Options Indexes FollowSymLinks
#AllowOverride None
AllowOverride All
fuelphpについての基本的な項目を記します。
fuelphpはphp製の軽量MVCフレームワークです。
Railsライクな構成で、composerなどモダンPHPのエコシステムを取り入れています。
fuelphpではいくつものジェネレータがあります。
- コントローラ
- モデル
- ビューモデル
- マイグレーション
- スキャフォルド
- タスク
- 設定ファイル
詳細はoil generateを参照
fuelphpでは設定ファイルをfuel/app/config/配下に配置します。
localhostディレクトリはローカル開発用に追加したものです。コミットに含まれないようになっています。
aws.phpはAWSを使用するプロジェクト用に追加したものです。
ローカルで開発する場合は、localhostディレクトリ内にaws.phpをコピーして自分のcredentialを使用するなどしてください
fuel/app/config/
├── aws.php
├── config.php
├── db.php
├── development // 開発サーバー用設定
├── localhost // ローカル開発用設定
├── production // 本番用設定
├── routes.php
├── staging // ステージング用設定
└── test // テスト用設定
詳細はconfigを参照
fuel/app/confgの設定ファイルは環境ごとに切り替えることができます。
環境変数FUEL_ENVの値に一致したサブディレクトリの設定が有効になります。
有効になったサブディレクトリにある設定ファイルはconfig直下の同名の設定ファイルより優先されます。
// httpdでの設定
SetEnv FUEL_ENV localhost
// バッチ(oil)時の設定
env FUEL_ENV=localhost php oil -v
//ユニットテスト実行時の設定(fuel/app/phpunit.xml)
<server name="FUEL_ENV" value="localhost"/>
各設定をコード内で取得するには以下のようにします。
//設定ファイル
aws.php
return array(
'credential' => array(
'key' => 'xxxxxxxx',
'secret' => 'yyyyyyyyyy',
),
);
//awsファイル名のcredentialのkeyを取得
$key = Config::get('aws.credential.key');
//配列のまま取得することも可能
$credential = Config::get('aws.credential');詳細はenvironmentを参照
コントローラはモデルメソッドの呼び出しを行い、遷移の分岐や、表示するビューの設定を行います。
oil g controller コマンドでコントローラのひな形を作ることができます。
クラスは fuel/app/classes/controller配下に配置します。
コントローラでは1つのメソッドは1つのリクエストを受け付けます。
コントローラにはいくつか種類があります。
- 通常のコントローラ
- テンプレートコントローラ: 表示するビューにヘッダフッタなど共通部品をつけて返します
- RESTコントローラ: JSON、XMLなどの形式で返します
- ハイブリッドコントローラ: RESTコントローラとテンプレートをメソッドごとに使い分けられます
詳細はcontrollerを参照
モデルはDB処理や演算/ロジックなど、業務ロジックに関する処理とデータモデルの管理などを行います。
Orm\Modelを継承するとRDBMSを利用する場合にORMapperとして動作します。
oil g modelコマンドでモデルのひな形を作ることもできます。
モデルは主にコントローラやタスクから呼び出されます。
AWSは主にモデル階層で利用することになります。
詳細はmodelを参照
ビューはWEBアプリケーションのプレゼンテーション層です。 基本はPHPでラップしたHTMLファイルもしくはその一部です。 コントローラでView::forgeされたときの第2引数の連想配列の各要素を変数として扱うことができます。
詳細はviewを参照
ルーティングとはURLとコントローラの各アクションメソッドへのマッピングです。 基本的には
http://www.yoursite.com/example/hoge/moge
というURLはexampleコントローラのhogeメソッドにmogeというパラメータを渡します。
この基本ルールを変更することもできます。
特別な設定をするにはfuel/app/config/routes.phpで設定したり、コントローラにハードコーディングを行います。
詳細はroutingを参照
アプリケーションログはfuel/app/logs/yyyy/mm/dd配下に出力されます。
Log::error(print_r($data, true));詳細はlogを参照
fluent-logger-phpを利用する場合は、unixドメインソケットを利用します。
use Fluent\Logger\FluentLogger;
$logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock");
$logger->post("fluentd.test.follow", array("from"=>"userA", "to"=>"userB"));詳細はusing-fluent-logger-phpを参照
fuelphpではバッチのことをタスクと呼びます。
タスクはfuel/app/task/配下にコードを置きます。
実行にはoil refineコマンドを使用します。
fuel/app/tasks/
└── sample.php
//sample.php runメソッド(デフォルト)を実行する場合
$ oil refine sample
//sample.php hogeメソッドをパラメータを渡して実行する場合
$ oil refine sample:hoge moge
詳細はoil refineを参照
管理画面にはログイン機能とヘッダフッタなどのテンプレートをつけたCRUD画面、ログイン認証つきのコントローラなどの1CRUDセットを生成するスキャフォルド拡張のoil g adminコマンドを使用することができます。
oil g admin blog title:string article:text
この機能はundocumentedです。
できる限りテストファーストで開発することをお勧めします。
fuelphpではphpunitの実行トリガをサポートしています。 テストコードはfuel/app/tests配下に配置します。
//fuelphp本体のテストを含めた全テストを実行
oil test
//アノテーションを指定して実行
oil test --group=app
上の2番目の例では、@appのアノテーションがあるテストだけを実行します。
各環境でのテスト実行
デフォルトでoil testはtest環境で実行されます。
FUEL_ENV=localhostで実行したい場合には以下のように行います。
$ cp fuel/core/phpunit.xml fuel/app/
$ vim fuel/app/phpunit.xml
---------
<server name="FUEL_ENV" value="test"/>
↓
<server name="FUEL_ENV" value="localhost"/>
---------
oil test --group=app
詳細はunit testingを参照
このプロジェクトではライブラリの追加は全てcomposerを利用して下さい。 composer.jsonを編集して
php composer.phar update
でライブラリがインストールされます。
WEBページとタスクにサンプルを一つずつ用意してあります。
//webページ
http://hostname/sample/upper/aiueo
//タスク
oil refine sample
//ユニットテスト
oil test --group=app
ここに記載した情報は全て基本的な内容で、他にも機能は沢山あります。詳細は各資料を参照してください。