Drush を環境を汚さないようにローカルインストールで済ませる方法
Drush を今導入するならこれから紹介する方法がおすすめできる。
今回 Drush を Composer でインストールしていくのですが、ネットで検索するとグローバルインストール(環境全体へのインストール)してしまっている記事が多いのですが、個人的にそれはおすすめできないので、ローカルインストール(プロジェクト単位のインストール)で済ませる方法も併せて紹介します。
※パッケージ管理ツール(Composer, Node.js, etc.)は環境単位ではなくプロジェクト単位で管理されるべきものと考えているため。Composerではないですが、【npm】グローバルインストールは控えるべきがわかりやすくまとまっていると思います。
Drushをローカルインストール
Drupalのプロジェクトルートフォルダ配下(composer.json や composer.lock があるフォルダ)で以下のコマンドを実行。
$ composer init # DrupalをComposerで入れていない場合
$ composer require drush/drush
composer.jsonに以下を追記。
...前略
+ "scripts": {
+ "drush": [
+ "drush < /dev/tty"
+ ]
+ },
"require": {
"composer/installers": "^1.2",
"drupal/core-composer-scaffold": "^8.8",
"drupal/core-project-message": "^8.8",
"drupal/core-recommended": "^8.8",
後略...
< /dev/tty
が無いと対話モード(interactive)なコマンドが正常に動作しないため、付与しています。
YES, NOだったり、任意のテキストを入力する必要があるコマンドもすっ飛ばされるので、
composer のあとに通常の drush コマンドを記述すればグローバルインストールしたときと同様に実行でます。
$ composer drush cr # キャッシュクリアの例
解説
これはComposerの標準機能のscriptsを利用したものになります。
composer コマンドのあとの文字列に drush が来たら、プロジェクト内にある drush のパッケージを見るように指定してあげているという単純なものなのですが、これによってグローバルインストールをせずに Drush を導入することができます。
ローカルインストールのデメリットも存在する
最後に、留意点が1つあります。
composer の scripts が使えるのはプロジェクトルートディレクトリのみなので、composer.json があるディレクトリでなければ実行はできません。
グローバルインストールだとどこでも Drush コマンドが使えるのですが、そこがちょっとマイナスポイントかもしれないです。