同じLaravelのプログラムを複数のサイトにインストールしていると、いちいちそれらのサイトにsshしてプログラムの変更のインストール(デプロイ)が面倒になってきます。こんなときに、とっても助けとなるのがDeployer。今回はそのツールの紹介です。

Deployerのインストール

まず、Laravelのプロジェクトにdeployerをインストール。

$ composer require deployer/deployer --dev

インストール後に、vendor/bin/depが作成されます。
このコマンドは頻繁に使用されるので、bashの初期設定のファイルに~/.bashrcに以下のようにエイリアスを入れて、

...
alias dep='vendor/bin/dep'
...

以下を実行します。

. ~/.bashrc

これで、コマンドラインでdepだけで実行できます。

Deployerの初期化

Deployerは、先のdepのコマンドを使用してタスクを実行するために、プロジェクトのルートディレクトリにdeployer.phpのファイルが必要です。
そのファイルの作成には以下を実行します。

$ dep init

以下のように選択肢が表示され順に答えていきます。最後のHosts以外はデフォルト(括弧の中に表示されている)を選択しています。

Select recipe language [php]:
  [0] php
  [1] yaml
 > 

 Select project template [common]:
  [0 ] cakephp
  [1 ] codeigniter
  [2 ] codeigniter4
  [3 ] common
  [4 ] composer
  [5 ] contao
  [6 ] craftcms
  [7 ] drupal7
  [8 ] drupal8
  [9 ] flow_framework
  [10] fuelphp
  [11] joomla
  [12] laravel
  [13] magento
  [14] magento2
  [15] pimcore
  [16] prestashop
  [17] provision
  [18] shopware
  [19] silverstripe
  [20] spiral
  [21] statamic
  [22] sulu
  [23] symfony
  [24] typo3
  [25] wordpress
  [26] yii
  [27] zend_framework
 > 

 Repository [git@github.com:larajapan/example.git]:
 >

 Project name [example]:
 >

 Hosts (comma separated) []:
 > www.larajapan.com,staging.larajapan.com

Successfully created deploy.php

作成されたdeployer.phpは、

namespace Deployer;

require 'recipe/common.php';

// Config

set('repository', 'git@github.com:larajapan/example.git');

add('shared_files', []);
add('shared_dirs', []);
add('writable_dirs', []);

// Hosts

host('www.larajapan.com')
    ->set('remote_user', 'deployer')
    ->set('deploy_path', '~/example');
host('staging.larajapan.com')
    ->set('remote_user', 'deployer')
    ->set('deploy_path', '~/example');

// Hooks

after('deploy:failed', 'deploy:unlock');

上での設定は、
・ depでsshでdeployerのユーザーとしてアクセス可能なホストが2つある。www.larajapan.comとstaging.larajapan.com
・ どちらのホストもLaravelのアプリは、~/exampleのディレクトリにある
です。

deployer.phpは、もちろん手動で編集可能なので上の設定ではいくらでも変更が可能です。

複数のサイトにいっぺんにアクセス

準備ができたところ、早速以下を実行してみてください。

$ dep run date

ホストの選択肢が表示されます。1番目つまり0を選択するとそのホストへsshしてdateコマンドを実行します。

Select hosts: (comma separated)
  [0] www.larajapan.com
  [1] staging.larajapan.com
 > 0
[www.larajapan.com] Thu Mar 26 08:07:54 JST 2026

選択が面倒なら、コマンドラインでもホストを指定できます。

$ dep run date www.larajapan.com

さらに、長いホスト名のタイプが面倒なら、deployer.phpを編集して、ホストをエイリアスを指定できます。

// Hosts

host('production')
    ->setHostname('www.larajapan.com')
    ->set('remote_user', 'deployer')
    ->set('deploy_path', '~/example');
host('staging')
    ->setHostname('staging.larajapan.com')
    ->set('remote_user', 'deployer')
    ->set('deploy_path', '~/example');

とすれば、

$ dep run date production

と実行できます。

最後に、定義されている全部のサイトで実行したいなら、allを渡します。

$ dep run date all
[production] Thu Mar 26 08:12:02 JST 2026
[live] Thu Mar 26 08:12:04 JST 2026

便利ですね。

ホスト情報をYAMLファイルにする

ホストが2つくらいなら、deploy.php内でのホストの定義で十分ですが、これが10個もなると読みづらくなります。
そのような場合は、ホストの定義をYAMLのファイルに抽出して分けることが可能です。

hosts:
  production:
    hostname: www.larajapan.com
    remote_user: kenji
    deploy_path: ~/example

  staging:
    hostname: staging.larajapan.com
    remote_user: deployer
    deploy_path: ~/example

定義があった元の部分では、以下のようにimportに置き換えます。

// Hosts

import('hosts.yml');

整理されてすっきりしました。

メルマガ購読の申し込みはこちらから。

By khino