今回は多くの Drupalist が愛用する Drush の設定ファイルのサンプルファイルを翻訳してご紹介できればと思います。

Drush は Drupal 利用/開発におけるさまざまな作業をコマンドで手軽に実行できるようにしてくれる大変便利なツールです。 ( drush php が使えるようになってからは特に)そのままでも申し分ないくらい便利なのですが、設定ファイルを利用することでより便利に活用できるようになっています。

Drush の設定ファイルは次の 2 つに大きく分けられます。

  • aliases.drushrc.php
  • drushrc.php

前者はサイトエイリアス設定を格納するためのもので、後者はより汎用的な設定のためのものです。

今回はその設定の書き方がよくわかる example.drushrc.php ファイルのコメント部分を翻訳してみました。

以下がその翻訳文です。

対象の Drush のバージョンは Drush 8.0.1 です。

Drush のバージョンによって利用できるコマンドやオプションは異なりますのでこれはあくまでも参考に、実際に設定を行う際にはご利用の Drush のバージョンにあった example.drushrc.php をご参照いただければと思います。

example.drushrc.php:

<?php

/**
 * @file
 * Drush ランタイム設定( drushrc )ファイルの正しい書き方の例。
 *
 * Drush コマンドで使用する長いコマンドラインオプションを繰り返し入力する手間を省きミスを防ぐためにこのファイルを使用してください。
 *
 * このファイルを drushrc.php にリネームし、優先度順に並んでいる以下の場所のうちのどこかにコピーしてください。
 *
 * 1. Drupal サイトフォルダ(例: `sites/{default|example.com}/drushrc.php` )。
 * 2. Drupal `/drush` と `sites/all/drush` フォルダ。もしくは Drupal ルートの上の階層の `/drush` フォルダ。
 * 3. `--config` (`-c`) オプションで指定されたときはどこでも OK 。
 * 4. ユーザの `.drush` フォルダ( `/.drush/drushrc.php` )。
 * 5. システムワイドの設定フォルダ(例: `/etc/drush/drushrc.php` )。
 * 6. Drush インストールフォルダ。
 *
 * 上記の場所のいずれかに設定ファイルが見つかった場合、設定ファイルは読み込まれて検索リスト内の他の設定ファイルとマージされます。
 *
 * 特定のバージョンの Drush にのみ設定オプションを指定したい場合は `drush5rc.php` という名前のファイルに置くことが可能です。
 * 汎用の drushrc ファイルが読み込まれた後に追加される形でバージョン指定のファイルが読み込まれます。
 * If you have some configuration options that are specific to a particular
 * バージョン指定の設定ファイルは上掲の場所のどこに置いてもかまいません。
 *
 * Windows における設定ファイルに関する重要な注意ポイント:
 *
 * Windows 7 、 Windows Vista 、 Windows Server 2008 とその後のバージョンでは設定フォルダは `C:\ProgramData\Drush` です。
 * それよりも前のバージョンの Windows のフォルダは `C:\Documents and Settings\All Users\Drush.` です。
 *
 * 設定ファイルの読み込みについての重要な注意ポイント:
 *
 * コアにおいて、 Drush はウェブサーバからの通常のページリクエストのときと同じ形で Drupal の環境を「ブートストラップ」して動作します。
 * したがって、 Drush コマンドのほとんどは初期化が完了したコンテクストで実行されます。
 *
 * 設定ファイルは上にあげられた順番とは逆の順番に読み込まれます。
 * すべての設定ファイルは最初のブートストラップフェーズで読み込まれますが、特定の Drupal サイトが選択されないかぎり `default` 以外の Drupal サイトフォルダ(例:  `sites/example.com/drushrc.php` )の設定ファイルは読み込まれません。
 * しかし、サイトが選択された場合は、実行された Drush コマンドが Drupal サイトフェーズのブートストラップを行わない場合であってもサイト固有の設定ファイルは読み込まれます。
 *
 * Drush コマンド `'rsync'` と `'sql-sync'` は特別なケースです。
 * これらのコマンドはソース( `source` )パラメータで指定されたサイトの設定ファイルを読み込みます。
 * しかし、デスティネーション( `destination` )パラメータで指定された設定ファイルやリモートサイトの設定ファイルは読み込みません。
 *
 * ブートストラップ処理が Drush 設定ファイルの読み込みにどう影響するのかについて詳しい情報は `drush topic docs-bootstrap` をご覧ください。
 */

// リンクを生成するときの base_url を指定します。
# $options['l'] = 'http://example.com/subdir';

// Drupal コアのベースディレクトリを指定します( symlink を使用する場合に有用)。
# $options['r'] = '/home/USER/workspace/drupal-6';

/**
 * 有用なシェルエイリアス:
 *
 * Drush シェルエイリアスは git エイリアスと似た動作をします。
 * ベストな結果を得るには上の #3 から #6 の間の drushrc ファイルでエイリアスを定義しましょう。
 * シェルエイリアスについての情報はコマンドラインで見ることができます:
 * `drush topic docs-shell-aliases` 。
 *
 * @see https://git.wiki.kernel.org/index.php/Aliases#Advanced
 */
# $options['shell-aliases']['pull'] = '!git pull' ; // 仕事完了。
# $options['shell-aliases']['pulldb'] = '!git pull && drush updatedb';
# $options['shell-aliases']['cpull'] = 'config-pull @example.prod @self --label=vcs';
# $options['shell-aliases']['noncore'] = 'pm-list --no-core';
# $options['shell-aliases']['wipe'] = 'cache-clear all';
# $options['shell-aliases']['unsuck'] = 'pm-disable -y overlay,dashboard';
# $options['shell-aliases']['offline'] = 'variable-set -y --always-set maintenance_mode 1';
# $options['shell-aliases']['online'] = 'variable-delete -y --exact maintenance_mode';
# $options['shell-aliases']['dis-all'] = '!drush -y dis `drush pml --status=enabled --type=module --no-core --pipe`';
# $options['shell-aliases']['self-alias'] = 'site-alias @self --with-db --alias-name=new';
# $options['shell-aliases']['site-get'] = '@none php-eval "return drush_sitealias_site_get();"';
// drupal.org からの git clone をかんたん化するために 'pm-clone' を追加します。
# $options['shell-aliases']['pm-clone'] = 'pm-download --gitusername=YOURUSERNAME --package-handler=git_drupalorg';

// 現在のワーキングディレクトリから drushrc.php 設定ファイルを読み込みます。
# $options['config'][] = './drushrc.php';

/**
 * Drush はデフォルトでは現在の Drupal のバージョンに合ったプロジェクトをダウンロードします。
 * Drupal サイトが指定されなかった場合は Drupal 8 版のプロジェクトをダウンロードするようになっています。
 * Drupal 8 以外をデフォルトに指定したい場合は default-major を設定してください。
 */
# $options['default-major'] = 7;

// drupal.org から 'pm-download' を使ってエクステンション(モジュールやテーマ等)をクローンします。
# $options['package-handler'] = 'git_drupalorg';

/**
 * Drush コマンドファイル( *.drush.inc )を検索するフォルダを指定します。
 * これらの値は、コマンドラインや他の設定ファイルで定義されたインクルードパスとマージされます。
 * コマンドラインでは、パスは Unix ベースのシステムではコロン( : )、 Windows ではセミコロン( ; )で句切られます。
 */
# $options['include'] = array('/path/to/commands','/path2/to/more/commands');

/**
 * Drupal サイト内でコマンドファイル( *.drush.inc )を検索するときに無視するモジュールを指定します。
 */
# $options['ignored-modules'] = array('module1', 'module2');

/**
 * Drush エイリアスファイル( *.alias.drushrc.php や *.aliases.drushrc.php )を検索するフォルダを指定します。
 * これらの値はコマンドラインや他の設定ファイルで定義されたエイリアスパスとマージされます。
 * コマンドラインでは、パスは Unix ベースのシステムではコロン( : )、 Windows ではセミコロン( ; )で句切られます。
 */
# $options['alias-path'] = array('/path/to/aliases','/path2/to/more/aliases');

/**
 * 'sql-dump' がデータベースダンプのバックアップを保存するファイル名とパスを指定します。
 * デフォルトは標準出力へのダンプになりますが、このオプションが drushrc.php ファイルでセットされた場合、デフォルトのふるまいは FALSE の値を指定する(コマンドラインで "--result-file=0" とする)ことで可能となります。
 * 2 つの置換オプションが利用可能です:
 * @DATABASE はダンプされるデータベースの名前に置き換えられます。
 * @DATE はダンプが行われたときの現在日時で次のフォーマットです: YYYYMMDD_HHMMSS 。
 * TRUE の値(コマンドラインでは "--result-file=1" )にすると 'sql-dump' が 'pm-updatecode' と同じ一時的なバックアップフォルダを使用します。
 */
# $options['result-file'] = TRUE;
# $options['result-file'] = '/path/to/backup/dir/@DATABASE_@DATE.sql';

// コマンドの実行に 30 秒以上かかるときに通知センター( OSX )や libnortify ( Linux )でユーザに通知を行います。
# $options['notify'] = 30;

// 冗長( verbose )モードを有効化します。
# $options['v'] = 1;

// 'status' や 'sql-conf' コマンドでデータベースパスワードを表示します。
# $options['show-passwords'] = 1;

/**
 * PHP の通知のログレベルを指定します。デフォルトの値は "notice" です。
 * Drush 開発を行うときは "warning" にセットしましょう。
 * あわせて php 設定ファイルの error_reporting を E_ALL にセットするようにしてください。
 * php.ini ファイルのパスの確認は `drush status` で行えます。
 */
# $options['php-notices'] = 'warning';

/**
 * バックエンドでの実行の際に ssh に渡すオプションを指定します。
 * デフォルトはパスワード認証の禁止オプションが渡されています。
 * パスワードの禁止オプションはここに書かれているので、デフォルトの設定を失うことなくその他のパラメータを追加することができます。
 */
# $options['ssh-options'] = '-o PasswordAuthentication=no';

// 'os' アイテムセットを持たないリモートサイトに対して、 Drush が Windows シェルエスケープルールを使うようにするには 'remote-os' を 'Windows' にセットします。
# $options['remote-os'] = 'Linux';

// デフォルトでは不明なオプションは禁止されておりエラーになります。
// 警告だけを出してコマンドを続行するようにする場合はここを変更してください。
# $options['strict'] = FALSE;

/**
 * Drush の一部の機能が正しく動作するためには、少なくとも rsync のバージョン 2.6.9 が必要です。
 * rsync 2.6.8 以前のバージョンは次のエラーメッセージを出します: "--remove-source-files: unknown option" 。
 * これを修正するには $options['rsync-version'] = '2.6.8' をセットしてください( Drush で使用するシステムでもっともバージョンの低い rsync のバージョンで置き換えてください)。
 * このオプションはサイトエイリアスで指定することもできます。
 * 利用しているシステムの一部で新しいバージョンの rsync が利用できる場合はこちらの方がよいアプローチです。
 * 参考: http://drupal.org/node/955092
 */
# $options['rsync-version'] = '2.6.9';

/**
 * iconv PHP 関数の out_charset 引数に渡せる出力 charset 。
 *
 * Drush は UTF-8 からここで指定された文字セットに出力を変換します。
 * //TRANSLIT と //IGNORE の charset 名サフィックスを使うことができます( iconv のドキュメントをご覧ください)。
 * 定義がない場合は変換は行われません。
 */
# $options['output_charset'] = 'ISO-8859-1';
# $options['output_charset'] = 'KOI8-R//IGNORE';
# $options['output_charset'] = 'ISO-8859-1//TRANSLIT';

/**
 * マルチサイト実行オプション:
 *
 * 'sql-sync' などの一部の Drush コマンドは複数のサイトや複数のサーバ環境に対して実行することが可能です。
 * ここで指定されたオプションを実行されるコマンドのすべてのインスタンスに伝えます。
 */

/**
 * Drush はデフォルトでマルチサイトのコマンドが実行されたときの出力の先頭にサイト名を追加します。
 * この挙動を無効にするには "--no-label" オプションをセットしてください。
 */
# $options['no-label'] = TRUE;

/**
 * sql-dump や sql-sync に含めたいテーブルを明示したリスト。
 */
# $options['tables']['common'] = array('user', 'permissions', 'role_permission', 'role');

/**
 * 'sql-dump' や 'sql-sync' などのコマンドで作られる SQL ダンプからその *データ* が除外されるテーブルのリスト。
 * コマンドラインで "--structure-tables-key=common" オプションが渡されると有効になります。
 * 既存の配列に新しいテーブルを追加したり新しい要素を追加したりすることができます。
 */
# $options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');

/**
 * 'sql-dump' や 'sql-sync' などのコマンドで作られる SQL ダンプから完全に除外されるテーブルのリスト。
 * コマンドラインで "--skip-tables-key=common" オプションが渡されると有効になります。
 * これはデータベースが Drupal 以外のテーブル、例えば、他のアプリケーションで使われるものやマイグレーション過程で使用しているものがある場合に有用です。
 * 既存の配列に新しいテーブルを追加したり新しい要素を追加したりすることができます。
 */
# $options['skip-tables']['common'] = array('migration_*');

/**
 * Drupal の変数システムや settings.php の特定のエントリーを上書きします( D6/D7 限定)。
 */
# $options['variables']['site_name'] = 'My Drupal site';
# $options['variables']['theme_default'] = 'minnelli';
# $options['variables']['anonymous'] = 'Visitor';

/**
 * コマンド別の実行オプション:
 *
 * 実行オプションのほとんどは複数の Drush コマンド間で共有することができます。
 * 共有のオプションは上の例にあるような $options 配列のトップレベル要素で指定します。
 * 他方、その他のオプションはコマンド固有のオプションです。
 * 場合によっては、実行されるコマンドによって共有オプションに対して異なる設定を行う必要があります。
 *
 * あるコマンドに対してのみ適用されるオプションを定義するには、以下に示すように $command-specific 配列の中にエントリーを作ってください。
 * コマンドの名前はコマンドのフルネームでもコマンドエイリアスでも指定可能です。
 *
 * ここで定義されたオプションはコマンドラインで同じ名前のオプションが指定されると上書きされます。
 * "--verbose" のような単一値フラグは特別な "--no-xxx" オプション(例: "--no-verbose" )で上書き可能です。
 *
 * 制限: 'verbose' がコマンド固有のオプションでセットされた場合、これをクリアするには '--no-verbose' を使います。 '--no-v' では効きません。
 * 逆の場合も同様です。
 */

// rsync コマンドが冗長な出力を出すようにします。
# $command_specific['rsync'] = array('verbose' => TRUE);

// drush ssh コマンドで指定されたコマンドの実行前に Drupal ルートに cd するのをやめます。
# $command_specific['ssh'] = array('cd' => FALSE);

// スクリプト検索フォルダの追加。
// : ( Unix ベースのシステム)または ; ( Windows )で区切ります。
# $command_specific['script']['script-path'] = 'sites/all/scripts:profiles/myprofile/scripts';

// pm-update や pm-updatecode を実行するときにリリースノートを必ず表示します。
# $command_specific['pm-update'] = array('notes' => TRUE);
# $command_specific['pm-updatecode'] = array('notes' => TRUE);

// site-install を使うときにあらかじめ設定したユーザ名とパスワードをセットします。
# $command_specific['site-install'] = array('account-name' => 'alice', 'account-pass' => 'secret');

以上です。 いかがだったでしょうか?

今回は Drupal のコマンドラインツールである Drush の設定ファイルのサンプル example.drushrc.php を翻訳してご紹介してみました。

Drush は Drupal と同様に豊富な基本機能と高い拡張性を持っています。 私自身今回翻訳を行う中ではじめて知るオプションなどもあり、 Drupal を使ってサイトの構築や運用をしていく上ではこのあたりもぜひ押さえておきたいと思いました。

Drush は Drupal と同じくバージョンが上がる度に貪欲に機能を追加していく傾向があるので、日頃からお使いの方も、バージョンが上がったときにはどういう変更があるのかをきちんとチェックしておくとよいかもしれません。

今後また Drush の設定の具体例などについても機会をみてご紹介していければと思います。 最近話題の Drupal console についても、また、おいおい・・・


共に働く新しい仲間を
募集しています

スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。