Rocketeerは様々なコマンドを使えます。最も低レベルなもの(ディレクトリー変更やsymlinkなど)だが開発に必要な様々なツールをあなたのアプリケーションを生かし、テストしたりするために使っています。そのために使うラッパークラスをバイナリーと呼びます。
バイナリークラスはRocketeer\Abstracts\AbstractBinary
、内のクラスをextendしています。前述のクラスのコアのgetCommand
メソッドはビルドコマンドをすらすらと実行することを可能にし、3つの属性を持ちます:コマンドの呼び出し、属性、オプションです。
例:Gitバイナリークラス
$git->getCommand('clone', ['from', 'to'], ['--branch' => 'master']); // Yields `git clone from to --branch="master"
あなたはもっとスムーズなインターフェイスを持つための方法としてコマンドを使うことができます。
$git->clone(['from', 'to'], ['--branch' => 'master']); // Yields `git clone from to --branch="master"`
$git->clone('from to', '-b master') // Same result, you can pass array or strings interchangeably
デフォルトのバイナリークラスは定義済みでコマンドを返すものだけということはサードパーティーによって実行されたことを意味します。彼らはどこでも何も実行できず、彼らが何かbuildすると実行したということをあなたに返します。クラスのコンテキストの例として、これはどのようにgitコマンドを作成するとともに実行するかを示します:
$this->run(array(
$git->clone(['from', 'to'], ['--branch' => 'master'])
));
バイナリークラスは魔法のメソッドとともに来ることがありビルドコマンドを直接実行することが許されます。シンプルにrun*
メソッドのどれかをコールするとタスクを見つけます、バイナリーインスタンス内で直接。この2つの例は
結果が同じになります:
$this->runForCurrentRelease(array(
$git->clone(['from', 'to'], ['--branch' => 'master'])
));
// And
$git->runForCurrentRelease('clone', ['from', 'to'], ['--branch' => 'master']);
タスクかストラテジーのバイナリーのインスタンスを取得するには、シンプルにバイナリーメソッドを使います。そのバイナリにビルトインクラスが存在しない場合はAnonymousBinaryのインスタンスのどれかを返しますが、既にロケッティアに AbstractBinaryを拡張したクラスが存在する場合はそれを返します。
$grunt = $this->binary('grunt'); // Instance of Rocketeer\Binaries\AnonymousBinary
$grunt->run('assets');
$artisan = $this->binary('artisan'); // Instance of Rocketeer\Binaries\Artisan
$artisan->run('seed');
ビルトインバイナリーは特別なヘルパーメソッドを使用しており、たいてい長いコマンドのエイリアスです。例として、'PHP::extensions'バイナリーメソッドが返すPHPインスタンスで使用可能な全ての拡張を見てみましょう。
public function extensions()
{
return $this->getCommand(null, null, ['-m' => null]);
}
次のような操作が可能です。
$extensions = $this->binary('php')->run('extensions');
$extensions = explode(PHP_EOL, $extensions);
そして、利用可能な拡張機能の配列を取得します。
ロケッティアには、ビルトインバイナリを取得するためのいくつかのショートカットメソッドが付属しています。
$this->php() == $this->binary('php');
$this->artisan() == $this->binary('artisan');
// etc
時にはバイナリーは、他のバイナリーから実行されます。例えばArtisan CLIツールは、PHPにより実行される必要があります。そのためには、バイナリークラスにsetParentメソッドを使用します。それはAbstractBinaryまたは単純な文字列の両方のインスタンスを受け入れます。
$artisan = $this->artisan();
$artisan->setParent('php');
$artisan->migrate(); // Returns `php artisan migrate`
// Or
$artisan = $this->artisan();
$artisan->setParent($this->php());
$artisan->migrate(); // Returns `/usr/bin/php artisan migrate` per example
素のコマンドの代わりにバイナリークラスを使う利点は、すでにビルトインパスファインダーを内蔵していることです。もし単純に$this->run('php artisan migrate')
とする代わりに$this->artisan()->run('migrate')
とコールしても、ロケッティアはそのバイナリーとバイナリーがどこにあるかを分かっています。自動的にPHPセットの親への正しいパスやArtisanへの正しいパスなどを取得できます。
独自のバイナリを作成するのはかなり簡単です。そのコアにはRocketeer\Abstracts\AbstractBinary
を拡張する単純なクラスがあります。それらはメソッドを全く読み込みません、それはただキャンバスにそのエイリスおよび/または既知のパスを追加します。
バイナリの事前定義された既知のパスを設定するには、単にgetKnownPaths
メソッドを上書きします。それは2つの値を含む配列を返します。1つ目の値はwhich
をコールするもので、それが動作しない場合に第二のパスを使用します。2つ目の値はフォールバックパスです。
<?php
namespace Acme;
use Rocketeer\Abstracts\AbstractBinary;
class Grunt extends AbstractBinary
{
/**
* Get an array of default paths to look for
*
* @return string[]
*/
protected function getKnownPaths()
{
return array(
'grunt',
$this->releasesManager->getCurrentReleasePath('node_modules/.bin/grunt'),
);
}
}
それから、自由に何かメソッドを追加できるのは良いと思うでしょう。そしてそれを他のコマンドとしてを呼び出せます。
<?php
namespace Acme;
use Rocketeer\Abstracts\AbstractBinary;
class Grunt extends AbstractBinary
{
/**
* Get an array of default paths to look for
*
* @return string[]
*/
protected function getKnownPaths()
{
return array(
'grunt',
$this->releasesManager->getCurrentReleasePath('node_modules/.bin/grunt'),
);
}
public function forceAssets()
{
return $this->assets(null, '--force');
}
}
$grunt = $this->binary('Acme\Grunt');
$grunt->runForCurrentRelease('forceAssets');