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

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

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

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

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

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【CPU】AMD EPYC 技術検証(PoC)サービス

【CPU】AMD EPYC 技術検証(PoC)サービス

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【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

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

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

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
1,624
facebook twitter はてなブックマーク

この記事をかいた人

About the author