はじめに
- PHP開発をする際には、フレームワークにはTaskクラス系の名前で備わっていますが、バッチだけ必要としている場合、あまりフレームワークの恩恵を受けないなぁと感じていたので、実際に簡易フレームワークを作ってみました。
- フレームワークといっても基本構成と起動プログラムだけです。
- 実はお手軽簡単シリーズの総集編みたい雰囲気にはなってます。
ディレクトリ構成
{プロジェクト名}
└ src - リポジトリ管理のしやすさのため、一階層増やしてます。
├ configure
│ ├ app
│ │ ├ config - 設定ファイルを格納します。
│ │ ├ class - 各種クラス群を格納します。
│ │ │ ├ controller
│ │ │ └ ...
│ │ └ task - 各バッチクラスを格納します。
│ ├ bin
│ │ └ {プロジェクト名}.php - バッチの起動プログラムです。
│ ├ lib - ライブラリ群を格納します。
│ │ ├ util
│ │ └ ...
│ ├ tests - PHPUnitなどのテストフレームワークを格納します。
│ └ vendor - Composerからインストールしたライブラリ群を格納します。
└ docroot - ドキュメントルートです。
├ image
└ ...
実行イメージ
オプションや引数与えて各バッチを実行するみたいな
php {プロジェクト名}.php SampleTask.php sample --env=prod
バッチ起動プログラム
{プロジェクト名}.php
<?php
/**
* タスクを起動します
*/
error_reporting(-1);
ini_set('display_errors', true);
ini_set('memory_limit', '512M');
// タイムゾーンの設定
date_default_timezone_set('Asia/Tokyo');
// ルートディレクトリ
define('ROOT_DIR', __DIR__);
// Composerのライブラリをオートロードします。
require_once ROOT_DIR . '/vendor/autoload.php';
// http://qiita.com/neriai/items/ba6e3126c33132907080
require_once ROOT_DIR . '/libs/AutoLoader.php';
$autoLoader = (new AutoLoader())->register();
// 設定ファイルのロード
// http://qiita.com/neriai/items/1614e3c41def7bfa72cf
HogeLib\Config::setConfigDirectory(ROOT_DIR . '/config');
if (!isset($argv[1])) {
echo '必要なパラメータが不足しています';
exit(1);
}
$arguments = array();
$options = array();
// 必須パラメータとオプションパラメータを振り分ける
foreach ($argv as $key => $value) {
if ($key > 1 && isset($value)) {
if (preg_match('/^--[a-zA-Z0-9]+=[a-zA-Z0-9]+$/', $value)) {
$params = explode('=', $value);
$name = str_replace('--', '', $params[0]);
$options[$name] = $params[1];
} else {
$arguments[] = $value;
}
}
}
// 指定されたタスククラスを実行
$namespace = 'Hoge\\Task\\' . $argv[1];
$class = new $namespace();
$class->execute($arguments, $options);