【Vagrantドキュメント意訳】15.Push

# はじめに

本文章は、Vagrant公式サイト内のドキュメント内の[PUSH](https://www.vagrantup.com/docs/push/)に記載されている内容を意訳に近い形で日本語化したものである。
誤訳が含まれている可能性が十分にあることを踏まえて、参考いただきたい。

# Vagrant Push

バージョン1.7として、VagrantはVagrantfileと同じディレクトリにあるアプリケーション・コードを[HashiCorpのAtlas](https://atlas.hashicorp.com/)やFTPサーバなどのようなリモートへデプロイや"push"をできるようになった。

Pushはアプリケーションの`Vagrantfile`内で定義され、`vagrant push`のサブコマンドを使用して呼び出される。Vagrantの多くのほかのコンポーネントのように、それぞれのVagrantのPushプラグインはオプションを持っている。Vagrant Pushプラグインに関するより詳細な情報についてはドキュメントを参照のこと。ここに、`Vagrantfile`内のVagrant Push設定セクションを例示する。

```bash
config.push.define "ftp" do |push|
  push.host = "ftp.company.com"
  push.username = "..."
  # ...
end
```

アプリケーションがFTPサーバへデプロイする準備ができたら、一つのコマンドを実行するだけである。

```bash
$ vagrant push
```

多くの[Vagrantのプロバイダ](https://www.vagrantup.com/docs/providers/)のように、Vagrant Pushも複数のバックエンドの定義をサポートしている。ステージングやQA(品質保証)環境との共通のシナリオを考慮すること。

```bash
config.push.define "staging", strategy: "ftp" do |push|
  # ...
end

config.push.define "qa", strategy: "ftp" do |push|
  # ...
end
```

このシナリオでは、ユーザはVagrant Pushの名前をサブコマンドに受け渡すべきである。

```bash
$ vagrant push staging
```

Vagrant Pushはアプリケーションをデプロイする最も早い方法である。サイドバーにあるドキュメントへのリンクでより詳しく見ることができる。

# Atlasの手順

[Atlas](https://www.vagrantup.com/docs/other/atlas.html)は、あなたのVagrant開発環境を製品にするためのHashiCorpの商業的な提供物である。[Altasのホームページ](https://www.vagrantup.com/docs/other/atlas.html)でHashiCorpのAtlasに関することや、その機能についての詳細を読むことができる。Vagrant Push Atlasの手順は、あなたのアプリケーションのコードをHashiCorpのAtlasサービスへpushする。

Vagrant Push Atlasストラテジは以下の設定オプションをサポートする。

* [`app`](https://www.vagrantup.com/docs/push/atlas.html#app) - [HashiCorpのAtlas](https://www.vagrantup.com/docs/other/atlas.html)の中でのアプリケーションの名前。アプリケーションが存在していない場合、ユーザへの確認の上で作成される。
* [`exclude`](https://www.vagrantup.com/docs/push/atlas.html#exclude) - アップロードから除外するファイルやファイルのパタンを、`dir`に対する相対表現で追加する。この値は複数指定できるし、追加できる。`exclude`はincludeの値を除外する。
* [`include`](https://www.vagrantup.com/docs/push/atlas.html#include) - アップロードに含めるファイルやファイルのパタンを、`dir`に対する相対表現で追加する。この値は複数指定できるし、追加できる。
* [`dir`](https://www.vagrantup.com/docs/push/atlas.html#dir) - アップロードするファイルを含むベースとなるディレクトリ。デフォルトでは、これはVagrantfileがある場所と同じディレクトリであるが、`src`フォルダや`bin`フォルダやアップロードしたいそのほかのフォルダがあれば、指定することができる。
* [`vcs`](https://www.vagrantup.com/docs/push/atlas.html#vcs) - trueに設定された場合、Vagrantは自動的にVCSのデータを、アップロードするファイルを決定する為に自動的に使用する。コミットしていない変更はデプロイされない。

加えて、以下に示すオプションが、Vagrant Atlas Pushストラテジのパワー・ユーザのために公開されている。多くのユーザはこれらのオプションを必要としないだろう。

* [`address`](https://www.vagrantup.com/docs/push/atlas.html#address) - アップロードする先のAtlasのアドレス。デフォルトではこれは公共のAtlasサーバである。
* [`token`](https://www.vagrantup.com/docs/push/atlas.html#token) - 使用するためのAtlasトークン。ユーザが`vagrant login`を実行した場合、そのコマンドによってトークンが生成される。もし環境変数`ATLAS_TOKEN`が設定されていれば、アップ・ローダはこの値を使用する。デフォルトでは、これはnilである。

## 使い方

Vagrant Push Atlasの手順は`atlas`のキーを使用して、`Vagrantfile`内で定義されている。

```bash
config.push.define "atlas" do |push|
  push.app = "username/application"
end
```

そして、Atlasへアプリケーションをpushする。

```bash
$ vagrant push
```

# FTPとSFTPの手順

Vagrant Push FTP または SFTPの手順は、あなたのVagrant開発環境にあるコードをリモートのFTPまたはSFTPサーバへPushする。

Vagrant Push FTP または SFTPの手順は以下に示す設定オプションをサポートする。

* [`host`](https://www.vagrantup.com/docs/push/ftp.html#host) - リモートの(S)FTPサーバのアドレス。(S)FTPサーバが標準的なポートで稼働していない場合、アドレスの後にポート（ホスト:ポート）を指定することが出来る。
* [`username`](https://www.vagrantup.com/docs/push/ftp.html#username) - (S)FTPサーバとの認証に使用されるユーザ
* [`password`](https://www.vagrantup.com/docs/push/ftp.html#password) - (S)FTPサーバとの認証に使用されるパスワード
* [`passive`](https://www.vagrantup.com/docs/push/ftp.html#passive) - パッシブFTPを使用する（デフォルトではtrue)
* [`secure`](https://www.vagrantup.com/docs/push/ftp.html#secure) - セキュアを使用する（SFTP）（デフォルトではfalse)
* [`destination`](https://www.vagrantup.com/docs/push/ftp.html#destination) - ファイルを同期する際の、ターゲット・システムでルートとなる場所（デフォルトでは `/`)
* [`exclude`](https://www.vagrantup.com/docs/push/ftp.html#exclude) - アップロードから除外するファイルやファイルのパタンを、`dir`に対する相対表現で追加する。この値は複数指定できるし、追加できる。`exclude`はincludeの値を除外する。
* [`include`](https://www.vagrantup.com/docs/push/ftp.html#include) - アップロードに含めるファイルやファイルのパタンを、`dir`に対する相対表現で追加する。この値は複数指定できるし、追加できる。
* [`dir`](https://www.vagrantup.com/docs/push/ftp.html#dir) - アップロードするファイルを含むベースとなるディレクトリ。デフォルトでは、これは`Vagrantfile`がある場所と同じディレクトリであるが、`src`フォルダや`bin`フォルダやアップロードしたいそのほかのフォルダがあれば、指定することができる。

## 使い方

Vagrant Push FTP または SFTPの手順は`ftp`のキーを使用して`Vagrantfile`内で定義されている。

```bash
config.push.define "ftp" do |push|
  push.host = "ftp.company.com"
  push.username = "username"
  push.password = "password"
end
```

そして、FTPまたはSFTPサーバへアプリケーションをpushする。

$ vagrant push

# Herokuの手順

[Heroku](https://heroku.com/)は、アプリケーションをデプロイするのを簡単にする公開PAASプロバイダである。Vagrant Push Herokuの手順は、あなたのアプリケーションのコードをHerokuへPushする。

> **警告**:Vagrant Push Herokuの手順は、Herokuの証明書が設定済みで、Herokuのアプリケーションが生成されている必要がある。この文書では、これらの事前準備については対象外である。しかし、これに関するより詳細な情報は[Herokuのドキュメント](https://devcenter.heroku.com/)で読むことができる。

Gitリプ時トリにコミットしたファイルだけが、HerokuにPushされる。加えて、たとえ”master"ブランチでないとしても、カレントのワーキング・ブランチは常にHerokuにPushされる。

Vagrant Push Herokuの手順は以下の設定オプションをサポートする。

* [`app`](https://www.vagrantup.com/docs/push/heroku.html#app) - Herokuアプリケーションの名前。もし、そのHerokuアプリケーションが存在しなければ、例外が発生する。もし、値が指定されていなければ、Vagrantfileがあるディレクトリのベース名をHerokuアプリケーションの名前とする。この値はユーザによって変更できるので、`app`の設定を`Vagrantfile`に追加することを強く推奨する。
* [`dir`](https://www.vagrantup.com/docs/push/heroku.html#dir) - HerokuへアップロードするGitリポジトリを含むベースディレクトリ。デフォルトでは、これは、Vagrantfileと同じディレクトリである。しかし、Gitディレクトリをネストしているならば、これを指定することができる。
* [`remote`](https://www.vagrantup.com/docs/push/heroku.html#remote) - Herokuが設定されている、Gitリモートの名前。デフォルト値は"heroku"である。

## 使い方

Vagrant Push Herokuの手順は、`heroku`キーを使って`Vagrantfile`内で定義される。

```bash
config.push.define "heroku" do |push|
  push.app = "my_application"
end
```

そして、Herokuへアプリケーションをプッシュする。

```bash
$ vagrant push
```

# Local Execの手順

Vagran Push Local Execの手順は、Push操作の一部としてユーザが任意のシェル・コマンドやスクリプトを呼び出すことを許す。

> **警告**:Vagrant Push Local Execの手順は、シェル・スクリプトの正しさについてのいかなる検証動作を行うことはない。

Vagrant Push Local Execの手順は、以下に示す設定オプションをサポートする。

* [`script`](https://www.vagrantup.com/docs/push/local-exec.html#script) - 実行するためのディスク上のスクリプトへのパス(`Vagrantfile`に対する相対表現)。Vagrantはこのスクリプトを実行可能なように変換しようとする。しかし、それが失敗した場合、例外を発生する。
* [`inline`](https://www.vagrantup.com/docs/push/local-exec.html#inline) - 実行するためのインライン・スクリプト（文字列）。
* [`args`](https://www.vagrantup.com/docs/push/local-exec.html#args) (文字列または列挙) - 単一の文字として実行する際に、シェル・スクリプトに受け渡すオプショナルな引数。これらの引数は、必要に応じてエスケープ文字やクォートなどに注意しながら、コマンドライン上に直接打ち込むように書かれたものであるべきである。同じように列挙を使用して引数を受け渡すこともできる。この場合、Vagrantはクォート制御をする。

注意すること - `scripu`と`inline`オプションの一方のみが、一つのPush定義内で指定することができる。

## 使い方

Vagrant Push Local Execの手順は、`local-exec`キーを使用して`Vagrantfile`の中で定義する。

リモート・パス:

```bash
config.push.define "local-exec" do |push|
  push.inline = <<-SCRIPT
    scp -r . server:/var/www/website
  SCRIPT
end
```

ローカル・パス:

```bash
config.push.define "local-exec" do |push|
  push.inline = <<-SCRIPT
    cp -r . /var/www/website
  SCRIPT
end
```

より複雑なスクリプトに対して、それらを別々のファイルに格納し、次のように`Vagrantfile`から読み込む。

```bash
config.push.define "local-exec" do |push|
  push.script = "my-script.sh"
end
```

そして、VagrantでPushを呼び出す。

```bash
$ vagrant push
```

## スクリプトの引数

[シェル・プロビジョナ](https://www.vagrantup.com/docs/provisioning/shell.html)を参照のこと。

# 関連記事

* 前の記事：[【Vagrantドキュメント意訳】14.プラグイン](http://qiita.com/ringo0321/items/e801a0cf867da48c32e3)
* 次の記事：[【Vagrantドキュメント意訳】16.その他](http://qiita.com/ringo0321/items/18e08958b60d97b0c930)