LoginSignup
4
8

More than 5 years have passed since last update.

お手軽簡単PHPでバッチ用フレームワークを作ってみた

Last updated at Posted at 2017-07-07

はじめに

  • 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);

全ページリンク

4
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8