この記事は「Output Formats, Fields and Filters」(drush.org)の拙訳です。
Drush は、書式設定とフィルタ処理の強力なシステムを利用している。このシステムにより、さまざまなコマンドからの出力を柔軟に制御することができる。
- 出力形式のオプションを使用して、表示されるデータのタイプを選択できる。たとえば、多くのコマンドが、人間が読みやすいテーブル形式か、yaml や json など機械処理に適した形式かを選択できるようにしている。
- 出力フィールドのオプションを使用して、出力されるデータの列やその順序を指定できる。
- 出力フィルタのオプションを使用して、論理式に基づいて表示されるデータ行を絞り込むことができる。
出力形式
--format オプションを使用すると、コマンドの出力を表示するデータ形式を選択できる。オブジェクトやシステムに関する情報の出力を生成する大半のコマンドは、それらのデータを別の形式に変換できる。たとえば、version コマンドの出力は、人間が見やすいテーブル形式(デフォルト)か、json 配列で表示することができる。
$ drush version
Drush version : 10.3.1
$ drush version --format=json
{
"drush-version": "10.3.1"
}
利用可能な出力形式は、各コマンドの help で確認できる。
$ drush help version
Show drush version.
Options:
--format=<json> Select output format. Available: json, string, var_export, yaml. Default is key-value.
出力フィールド
コマンドから出力される列を限定したい場合は、--fields オプションを使用する。表示するフィールドを、表示したい順序で列挙すればよい:
$ drush views:list --fields=machine-name,status
+-------------------+----------+
| Machine name | Status |
+-------------------+----------+
| block_content | Enabled |
| comment | Enabled |
| comments_recent | Enabled |
| content | Enabled |
| content_recent | Enabled |
| files | Enabled |
| frontpage | Enabled |
| taxonomy_term | Enabled |
| user_admin_people | Enabled |
| watchdog | Enabled |
| who_s_new | Enabled |
| who_s_online | Enabled |
| archive | Disabled |
| glossary | Disabled |
+-------------------+----------+
指定できるフィールド名は、help 出力中に表示される。
$ drush help views:list
Get a list of all views in the system.
Options:
--fields=FIELDS Available fields: Machine name (machine-name),
Name (label), Description (description), Status
(status), Tag (tag) [default:
"machine-name,label,description,status"]
フィールドは、英語の表示名でも(カッコ内に表示される)内部的なマシン名でも、どちらでも指定できる。
利用可能なすべてのデータ列が、デフォルトでは表示されないコマンドもある。すべてのフィールドを表示するには、--fields=* を指定する。
単一形式の --field オプションもある。この形式を使用すると、出力の形式は string(文字列)となる。
$ drush views:list --field=machine-name
block_content
comment
comments_recent
content
content_recent
files
frontpage
taxonomy_term
user_admin_people
watchdog
who_s_new
who_s_online
archive
glossary
出力フィルタ
テーブル形式でデータ出力する多くのコマンドが --filter オプションをサポートしている。これを利用すると、簡潔な論理式を使用して、出力される行を選択することができる。
最もシンプルな形式では、--filter オプションは、コマンドが持つデフォルトのフィルタ フィールドで絞り込みを行う条件を表す。たとえば、role:list コマンドの場合、デフォルト フィルタが perms となっているため、--filter オプションで指定した権限を持つロールだけに出力を絞り込むことができる。
$ drush role:list --filter='post comments'
authenticated:
label: 'Authenticated user'
perms:
- 'access comments'
- 'access content'
- 'access shortcuts'
- 'access site-wide contact form'
- 'access user contact forms'
- 'post comments'
- 'search content'
- 'skip comment approval'
- 'use text format basic_html'
なお、すべてのコマンドにデフォルトのフィルタ フィールドがあるわけではない。
--filter で簡単な式を使用することで、出力に含まれる別のフィールドを検索することもできる。たとえば、有効になっている拡張コンポーネント(モジュールやテーマ)だけを pm:list コマンドで列挙するには、次のコマンドを使用する:
$ drush pm:list --filter='status=enabled'
部分文字列で検索を行うには演算子 *= を使用する。また、正規表現にマッチするものを検索するには ~= 演算子を使用する。たとえば、マシン名に "content" という語が含まれるビューを検索するには、次のコマンドを使用する:
drush views:list --filter='machine-name*=content'
コアのステータス通知の中から、タイトルに "php" か "gd" のどちらかが含まれるものを正規表現で見つけ出すには、次のコマンドを使用する:
drush core:requirements --filter='title~=#(php|gd)#i'
最後に、フィルタ式では、論理積(&&)や論理和(||)の各演算子を使用して、複数の条件を連結することもできる。カッコはサポートされない。たとえば、title と severity の両フィールドを core:requirement コマンドで検索するには、次のコマンドを使用する:
drush core:requirements --filter='title~=#(php|gd)#i&&severity=warning'
= と *= の各演算子は常に大文字と小文字を区別しない。~= 演算子は、上の例で示したように、PCRE パターン修飾子の i を使用しない限り大文字と小文字を区別する。
フィルタと grep との比較
--filter の機能は grep コマンドと似ている。主な違いは、フィルタ機能ではセマンティックな検索(明示的に特定フィールドのデータと比較を行う)ができることだ。対照的に、grep コマンドは行に基づく検索を行う。
severity が warning である結果だけを表示するには、次のコマンドを使用する:
drush core:requirements --filter='severity=warning'
文字列 warning が(severty フィールドでも行内のどこか別の場所でも)含まれる行だけを表示するのであれば、次のコマンドを使用する:
drush core:requirements | grep -i warning
2つの検索方法の比較を下表にまとめる。
機能 | --filter | grep |
---|---|---|
正規表現 | ~= で可 | 可 |
折り返しを含むフィールド データ | 正しく検索できる | 検索漏れの可能性あり |
単一フィールドの検索 | 可 | 不可(行単位になる) |
複数フィールドの検索 | || や && で可 | 可(行単位の検索) |
検索のヘッダー非表示 | 不可 | 可(マッチしなければ) |