Skip to content

Latest commit

 

History

History
153 lines (116 loc) · 9.48 KB

Strategies.md

File metadata and controls

153 lines (116 loc) · 9.48 KB

ストラタジー

イントロダクション

Rocketeerはデプロイする人が想像するだろう基本タスクは、あらかじめ全て備えています——新しいリリースの作成、そのテスト、データベースのマイグレーション、など。ほとんどのタスクは一通りのやり方しかありませんが、いくつかの基本タスクには、目的を達成するのにいくつかの方法が存在しています。それがストラタジーです。

ストラタジーを利用する一番重要なタスクは、デプロイと更新です。デフォルトでは、あなたのSCM(Git, Svnなど)を使ってクリーンな新しいリリースをサーバからクローンしますが、それがストラタジーとして利用可能な全てではではありません。rocketeer strategiesコマンドで、どのタスクがストラタジーを利用しているか、どのオプションが利用可能かを確認することができます。コマンドは、次のような表を出力します。

ストラタジー 実装 説明
check Php サーバがPHPアプリケーションを受け取り可能か確認
check Ruby サーバがRubyアプリケーションを受け取り可能か確認Checks
deploy Clone SCMでリポジトリの新しいインスタンスをクローン
deploy Copy リポジトリのクローン済みインスタンスを複製して、アップデート
deploy Sync ローカルファイルからrsyncを使って作成または更新
test Phpunit PHPUnitでテストを実行
migrate Artisan データベースをLaravelのArtisan CLIでマイグレート
dependencies Composer Composerで依存パッケージをインストール
dependencies Bundler Bundlerで依存パッケージをインストール
dependencies Npm NPMで依存パッケージをインストール
dependencies Bower Bowerで依存パッケージをインストール
dependencies Polyglot 上記のパッケージマネージャを必要に応じて実行

どのタスクがどのストラタジーを使用するかは、設定フォルダ内のstrategies.phpファイルで設定することが可能です。

独自のストラタジーを追加する

Rocketeerには、それぞれのストラタジーに利用可能ないくつかの実装がありますが、組み込まれていない特定のツールや手順を使いたいこともあります。独自のストラタジーを追加することは非常に簡単で、そこには本当に2つのステップしかありません。例として、Nodeアプリケーションを使うケースで、PHPunitのかわりにGruntを使いたいとしましょう。

最初に、Rocketeer\Abstracts\AbstractStrategyを拡張してクラスを作成します。もし、RocketeerがComposerの依存モジュールとしてプロジェクトにロードされているなら、クラスは自動ロードされる限りどきにども置けます。そうでなければ、.rocketeer/strategies以下に作成する必要があります:

<?php
namespace Acme;

use Rocketeer\Abstracts\Strategies\AbstractStrategy;

class GruntStrategy extends AbstractStrategy
{
  // ...
}

次に、どのストラタジー該当するのか定義する必要があります。そのために、関係するインターフェースをRocketeer\Interfaces\Strategies名前空間から実装するでしょう。私たちの場合であれば、TestStrategyInterfaceは次のようになります:

<?php
namespace Acme;

use Rocketeer\Abstracts\Strategies\AbstractStrategy;
use Rocketeer\Interfaces\Strategies\TestStrategyInterface;

class GruntStrategy extends AbstractStrategy implements TestStrategyInterface
{
  public function test()
  {
    // ...
  }
}

あと残るのは、ビジネスロジックを書くことだけです。ストラタジーはタスクというより、同じ特徴(トレイト)を実装するので、通常のすべてのツール、特にバイナリを使うことができます。(より詳しい情報は、関連するドキュメントのセクションを見てください)

<?php
namespace Acme;

use Rocketeer\Abstracts\Strategies\AbstractStrategy;
use Rocketeer\Strategies\Interfaces\TestStrategyInterface;

class GruntStrategy extends AbstractStrategy implements TestStrategyInterface
{
  public function test()
  {
    return $this->binary('grunt')->runForCurrentRelease('test');
  }
}

これは、設定された接続において、grunt testを実行します。残る作業は、Rocketeerをそのストラタジーを使うように設定することです。strategies.phpファイルを次のように書きます:

// Which strategy to use to test your application
'test'         => 'Acme\Grunt',

もう一度、作ったクラスがどこかにロードされているか確認しましょう。もし、.rocketeer/strategiesにあるならRocketeerは自分自身でロードするでしょう。もし、Rocketeerがあなたのアプリケーションの依存モジュールになっているなら、クラスがComposerによってロードされているか確認しましょう。