Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

II-コンセプト/タスク #16

Merged
merged 2 commits into from
Mar 20, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 68 additions & 47 deletions II-Concepts/Tasks.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,62 @@
[translation here]
# タスク

<!--original
# Tasks
-->

[translation here]
タスクはRocketeerの重要なコンセプトの一つです。これまであなたが見てきたコマンドのほとんどは、裏では事前に定義されたタスクを使っています。**Rocketeer\Tasks\Setup** や **Rocketeer\Tasks\Deploy** のようにです。それらの多くはRocketeerによってすでに定義されていますが、Rocketeerに、同じようにあなたのサーバーでカスタムした動作をさせるタスクをあなた自身で追加できます。

<!--original
An important concept in Rocketeer are Tasks. Most of the commands you see right above are using predefined Tasks underneath, like **Rocketeer\Tasks\Setup** or **Rocketeer\Tasks\Deploy**. A lot of those are already defined by Rocketeer but you can add your own tasks to Rocketeer to execute custom actions on your server too.
-->

[translation here]
一つのタスクは以下の三つから一つのことができます。

<!--original
A task can be one of a three things:
-->

[translation here]
- 最新リリースフォルダで動作する単純な一行のコマンド。`composer install`や一行コマンドを寄せ集めたコマンドなど.
- より高度な動作を許容するRocketeerのコアヘルパへのアクセスを与えるクロージャー。
- そして、最後は完全に快適なコントロールが与えられる`Rocketeer\Abstracts\AbstractTask`を継承したクラス。すべてのカスタムメイドのタスクは少なくとも一つ`execute`メソッドを保つ必要があります。以上です。

<!--original
- A simple one-line command which will be executed in the latest release's folder. Like `composer install` or an array of one-line commands.
- A closure, giving you access to Rocketeer's core helpers which allow you to perform more advanced actions.
- And finally a class, extending the `Rocketeer\Abstracts\AbstractTask` class, giving you full at-home control. All custom-made Tasks must have at least an `execute` method. And that's all.
-->

[translation here]
_これは意図的にですが、_レベルごとに、あとちょっとのコントロールと快適さをあなたに与えてくれます。もしあなたがクロージャーが与えてくれるものよりもコントロールを必要とするならば、多分クラスが必要なのです。

<!--original
Each level gives you a little more control and comfort - _this is intentional_. If you need more control than what Closures give you then you probably need a class.
-->

[translation here]
-----

<!--original
-----
-->

[translation here]
## Rocketeerのタスク内でのフック

<!--original
## Hooking into Rocketeer's Tasks
-->

[translation here]
多くのユーザーがやるであろうことは、すでにあるRocketeerのタスクに、フックをすることです。Rocketeerは、- 最低限 -タスク実行の前と後に実行可能なビルトインのイベントシステムを提供しています。

<!--original
What most users will do is to hook into existing Rocketeer's Tasks. Rocketeer provides a built-in event system that allows you - at minimum - to execute actions before or after a Task's execution.
-->

[translation here]
### 設定ファイルへのタスクの定義

<!--original
### Defining Tasks in the config file
-->

[translation here]
Rocketeerの設定ファイルの`hooks.php`ファイルで、任意のタスクにフックすることができます。その書式はとっても簡単です。以下に、上で述べた三つのタイプのタスクでの例を示します。

<!--original
You can hook into any task via the `hooks.php` file in Rocketeer's config file. The syntax is pretty straightforward. Below you can see an example of three types of Tasks mentioned above:
Expand Down Expand Up @@ -87,19 +89,19 @@ You can hook into any task via the `hooks.php` file in Rocketeer's config file.
?>
```

[translation here]
### ファサードを用いたタスクの定義

<!--original
### Defining Tasks using the facade
-->

[translation here]
Rocketeerは、また、あなたが使えるファサードも提供します。これは、クロージャーを使うと汚れてしまうなどの、設定ファイルに何かを入れたくない時に、特に有用です。

<!--original
Rocketeer also provides you with a facade you can use. It's especially useful if you don't want to put stuff in the config file, as it can get dirty when using closures.
-->

[translation here]
Rocketeerは、次の2つのことを許容します。すべてのフックを含んだ`.rocketeer/events.php`ファイルの作成。または、複数のクラスでクラスごとに1ファイルにするなど多数のファイルがあるならば、単純に`.rocketeer/events/`フォルダを作成して、各々のタスクを中にいれると、Rocketeerは自動的にロードします。

<!--original
Rocketeer allows two things: creating a `.rocketeer/events.php` file where all your hooks are contained or if you have more files like classes and want one file per task, you can simply create a `.rocketeer/events/` folder and every task you put in it will automatically be loaded by Rocketeer.
Expand All @@ -122,25 +124,25 @@ Rocketeer::after('deploy', 'MyClass');
?>
```

[translation here]
第一引数には、作用させたいタスク名(または、タスク名の配列)を与え、つづいてあなたのタスクを指定します。再度になりますが、あなたは、3つのタイプのタスクを使えます。文字列、クロージャ、クラスです。

<!--original
As a first argument you give the name of a Task (or an array of names) you'd like to act on and then your task. Again, you can use the three types of tasks: strings, closures or classes.
-->

[translation here]
## 独自タスクを定義する

<!--original
## Defining your own Tasks
-->

[translation here]
Rocketeerはまた、タスクランニングシステムとあわせて独自タスクの作成、管理、実行も提供します。これらは、`.rocketeer/tasks.php`ファイルに入れるか、もし多数ある場合には、それらが自動的にロードされる`./rocketeer/tasks/`フォルダに入れることができます。

<!--original
Rocketeer also provides you with a task-running system to create, manage and run your own tasks. You can put those either in a `.rocketeer/tasks.php` file or - if you have a lot of them - in a `./rocketeer/tasks/` folder which will load all the files in it.
-->

[translation here]
### ファサードを使う

<!--original
### Via the facade
Expand All @@ -161,13 +163,14 @@ Rocketeer::task('phpunit', function ($task) {
?>
```

[translation here]
`task` メソッドは3つの引数をとります。タスク名、実行内容(1行コマンド, クロージャ, クラス)、そして、何をするかの説明です。


<!--original
The `task` method takes three arguments: name of the task, its execution (one-line command, closure, class) and a description of what it does.
-->

[translation here]
これらのタスクは、自動的にRocketeerに登録されます。これらは、`php rocketeer composer`などのようにCLIを使うか、ファサードを使って実行することができます。

<!--original
These tasks will be automatically registered with Rocketeer. You'll then be able to execute them either via the CLI by doing for example `php rocketeer composer` or via the facade:
Expand All @@ -179,7 +182,7 @@ Rocketeer::execute('composer');
Rocketeer::execute(['composer', 'phpunit']);
```

[translation here]
### クラスを使う

<!--original
### Via classes
Expand Down Expand Up @@ -213,7 +216,7 @@ class Migrate extends \Rocketeer\Abstracts\AbstractTask
?>
```

[translation here]
クラスは、自動的にRocketeerに登録されないので、登録は手動で行う必要があります。次のいずれかで行います。設定ファイルを使って、`tasks.custom`配列の中で。

<!--original
Classes aren't automatically registered with Rocketeer so you'll need to do that manually. You can either do so via the config file in the `tasks.custom` array:
Expand All @@ -225,7 +228,7 @@ Classes aren't automatically registered with Rocketeer so you'll need to do that
),
```

[translation here]
または、ファサードで。

<!--original
or via the facade:
Expand All @@ -235,31 +238,31 @@ or via the facade:
Rocketeer::add('MyTasks\Migrate');
```

[translation here]
そしてほら!ジャーン!

<!--original
And there you go, tadah!
-->

[translation here]
![職人](http://i.imgur.com/jwdQ2Ly.png)

<!--original
![artisan](http://i.imgur.com/jwdQ2Ly.png)
-->

[translation here]
## タスクの実行

<!--original
## Executing tasks
-->

[translation here]
タスクが定義されたら、それはコマンドラインとファサードの2箇所に配置されます。

<!--original
Once a task is defined, it will be available in two places: the command line interface and the facade.
-->

[translation here]
もし、タスク名`composer`で登録したら、例えば、次のように実行できます。

<!--original
If you registered a task named `composer`, e.g. you'll be able to do this:
Expand All @@ -269,7 +272,7 @@ If you registered a task named `composer`, e.g. you'll be able to do this:
$ php rocketeer composer
```

[translation here]
もしくはPHPコード(`tasks.php`の中)で。

<!--original
Or in your PHP code (in `tasks.php`):
Expand All @@ -279,7 +282,11 @@ Or in your PHP code (in `tasks.php`):
Rocketeer::execute('composer');
```

[translation here]
タスクの配列を渡すことで、複数のタスクを実行できます。Rocketeerは渡したものを常に処理することを覚えておくことはとても重要です。これは、タスクと考えられるものを何でも渡せることを意味します。
- コマンド文字列
- クロージャー
- タスク名
- タスクのクラス

<!--original
You can execute multiple tasks by passing an array of tasks. One thing that is crucial to remember is that Rocketeer will always process the queue you pass to it. That means you can pass anything that is considered as a task:
Expand All @@ -305,13 +312,13 @@ Rocketeer::execute(array(
?>
```

[translation here]
### ローカルでのタスクの実行

<!--original
### Executing tasks in local
-->

[translation here]
ローカルサーバー上で何かを実行するような快適さをもってコマンド郡をローカルで実行する必要のあるような場合。これは実タスククラスでのみ実現できます。ローカルプロパティを*true*に設定することのみでできます。

<!--original
In some cases you need to execute a series of commands in local and have the same comfort as you'd have executing things on the local server. This is only possible with actual Tasks classes. All you need to do is to set the `local` property to *true*:
Expand All @@ -324,31 +331,32 @@ class MyTask extends Rocketeer\Abstracts\AbstractTask
}
```

[translation here]
これにより、Rocketeerは、すべての呼び出しを`LocalConnection`に委任します。これは、任意のConnectionクラスと同じように振る舞いますが、ローカルシステム上で実行されます。これは、デプロイの準備に有用で、`Primer`タスクが動作する方法です。

<!--original
From there, Rocketeer will delegate all calls to a `LocalConnection` class that acts the same as any Connection class but runs commands in the local system. This is useful for preparing the deploy and is how the `Primer` task works.
-->

[translation here]
-----

<!--original
-----
-->

[translation here]
## タスクを書く

<!--original
## Writing Tasks
-->

[translation here]
### コアメソッド

<!--original
### Core methods
-->

[translation here]
タスクのコアメソッドは、`run`メソッドです。これは、ほぼ全ての他のヘルパーの下に位置します。
これは単にリモートサーバーでコマンドを実行し出力を返します。

<!--original
The core method of any Task is the `run` method. This is the one that lays at the bottom of nearly every other helper.
Expand All @@ -361,7 +369,8 @@ $folders = $this->run('ls');
?>
```

[translation here]
また、実行するコマンドの配列を渡すことも可能です。これは重要なので気を止めておいてください。
全ての`run`からの呼び出しは、自己完結型です。このようになります。(`pwd`は、カレントフォルダを返します。)

<!--original
You can also pass to it an array of commands to execute. Now, note this because it's important: every call to `run` is self contained. Meaning this (`pwd` returns the current folder):
Expand All @@ -381,7 +390,7 @@ $folder = $this->run(array(
?>
```

[translation here]
フォルダにある複数のタスクを自動的に実行するためには、2つのヘルパがあります。`runInFolder`と`runForCurrentRelease`です。最初のものは、フォルダにある1つ以上のタスクを実行します。もう一方はカレントリリースのフォルダある1つ以上のタスクを実行します。

<!--original
To automate running of tasks in folders two helpers exist: `runInFolder` and `runForCurrentRelease`. The first one will run one or more tasks in a folder, while the other will run one or more tasks in the current release's folder.
Expand All @@ -404,13 +413,13 @@ $this->runForCurrentRelease('ls');
?>
```

[translation here]
### フォルダヘルパ

<!--original
### Folder helpers
-->

[translation here]
2,3のフォルダ・ファイルを操作する方法も存在します。 これらはとても基本的で抽象的な低レベルなbashコマンドたちですが、しかし、これらは有用です。

<!--original
A few folder/file manipulation methods are also present. They're very basic and just abstracting low-level bash commands but, hey, they're good to have:
Expand All @@ -434,13 +443,13 @@ $phpunit = $this->which('phpunit', 'vendor/bin/phpunit'); // Second argument is
?>
```

[translation here]
### タスクに関連付けられるメソッド

<!--original
### Tasks-related methods
-->

[translation here]
いくつかのメソッドは、Rocketeerの別のタスクで使われ、独自のタスクをつくるのに使うことができます。それら全ては、カレントのリリースに関連付けされます。

<!--original
Some methods are used by other Rocketeer tasks and can be utilized to create your own ones. All of them are relative to the current release.
Expand All @@ -464,13 +473,13 @@ $this->setPermissions('public/images/users');
?>
```

[translation here]
### 外部メソッド

<!--original
### External methods
-->

[translation here]
タスクはまたRocketeerの他のクラスにアクセスすることができます。他のタスクを呼び出すことが可能です。

<!--original
Tasks also have access to the other classes of Rocketeer. You can call other tasks:
Expand All @@ -481,13 +490,24 @@ Tasks also have access to the other classes of Rocketeer. You can call other tas
$this->executeTask('Rollback');
```

[translation here]
そして、他のクラスのメソッドを呼び出すことができます。すべてのタスクとストラテジは連なるコアクラスとそのメソッドにアクセスします。

<!--original
And call other classes's methods. All tasks and strategies have access to the following core classes and their methods:
-->

[translation here]
- **command** は、現在実行されているコマンドのオプションや引数を加えるためのインスタンスです。
- **scm** は、(git, SVNといった)カレントSCMのバイナリのインスタンスです。
- **rocketeer** は、カレントアプリケーションおよびその設定を取得を司ります。
- **connections** はカレント接続/ステージ/サーバーおよびそれぞれの資格情報を取得するハンドルです。
- **remote** は、`run`メソッドを使用しているクラスでのサーバーへのエントリポイントです。
- **explainer** は、出力の表示を司ります。たとえば、タスクの中で進行を表示するなどで使います。
- **paths** で、ローカルおよびリモートのパスを見つけます。
- **releasesManager** は、リリースおよびそのパスを扱います。
- **localStorage** クラスは、ローカルストレージのファイル更新を保持し、リモートサーバーの状態と資格情報を追跡します。
- **builder** は、タスクとストラテジをその場で構築するのに使用します。
- **queue** は、あなたのタスク中のキューの中でタスクを実行させるのに使用します。
- **tasks** はタスクおよびそのイベントの登録を扱います。これは、Rocketeerのファサードに隠蔽されたクラスです。

<!--original
- **command** is the instance of the command currently running, to fetch options and arguments;
Expand All @@ -504,7 +524,8 @@ And call other classes's methods. All tasks and strategies have access to the fo
- **tasks** handles registration of a tasks and their events, it's the class behind the Rocketeer facade.
-->

[translation here]
それぞれのサービスに存在するメソッドのリストは、[APIドキュメント](http://rocketeer.autopergamene.eu/api/namespaces/Rocketeer.html)より直接見ることができます。
これらのタスクは、自動的にRocketeerに登録されます。これらは、プロパティとしてアクセスされます。例えば、カレントリリースのフォルダーを取得するには以下のようにします。

<!--original
You can find a list of the methods available for each of these services directly in the [API documentation](http://rocketeer.autopergamene.eu/api/namespaces/Rocketeer.html).
Expand Down