【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

[FuelPHP 1.7] タスクからタスクを実行する

開発チームの日下部です。

早速ですがFuelPHPのタスクを作成しているときに、タスクからタスクを実行したいと考えたことはないでしょうか。そのへんのお話を書きます。

タスクからタスクを実行

次のような、実行するとsugoiと表示するタスクがあるとします。

taskone.php

<?php
namespace Fuel\Tasks;

class TaskOne
{
	public static function run()
	{
		\Cli::write('sugoi');
		return 0;
	}
}

このTaskOneを別のタスク内から実行することを考えます。
TaskOneを呼び出すタスクをTheTaskとして定義します。

ディレクトリ構成は

 fuel
  └app
   └tasks
     ├taskone.php
     └thetask.php

であるとします。

thetask.php

<?php
namespace Fuel\Tasks;

class TheTask
{
	public static function run()
	{
		TaskOne::run();
		return 0;
	}
}

これでいけると思いませんか。TheTaskを実行してみましょう。

$ oil refine TheTask
Fatal Error - Class 'Fuel\Tasks\TaskOne' not found in APPPATH/tasks/thetask.php on line 8

だめです。TaskOneクラスが見つかりません。
同じ名前空間のクラスなので、オートローダが気を利かせて読み込んでくれそうな気がしますが、そんなことはありませんでした。こちらで読み込みを指示しなければなりません。

タスクのロード

やるべきことはtaskone.phpの読み込みです。

[非推奨]

require_once '/path/fuel/app/tasks/taskone.php';

こうすれば目的のファイルを読み込めますが、ソースにファイルのパスを直接書くのは避けたいですよね。
動的にパスを取得する方法を考えます。
Oilコマンドの実装(fuel/packages/oil/classes/command.php)を参考に、次のようにするとよいでしょう。

[推奨]

<?php
namespace Fuel\Tasks;

class TheTask
{
	public static function run()
	{
		# tasksディレクトリの中からTaskOneに対応するファイルを探し、そのパスを取得
		$file = \Finder::search('tasks', strtolower('TaskOne'));

		# TaskOneのファイルをロード
		require_once $file;

		# TaskOneを実行
		TaskOne::run();

		return 0;
	}
}

実行してみます。

$ oil refine TheTask
sugoi

できましたね。以上となります。

次回はもう少し複雑な、モジュール内のタスクをタスク内から呼び出す方法を考えます。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
1
読み込み中...
1 票, 平均: 1.00 / 11
2,774
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author