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

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

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

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

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

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

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

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

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

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

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

タスクからタスクを実行

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

taskone.php

1
2
3
4
5
6
7
8
9
10
11
<?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

1
2
3
4
5
6
7
8
9
10
11
<?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)を参考に、次のようにするとよいでしょう。

[推奨]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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
3,359
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author