ターミナルからDrupalを操作する「Drush」コマンドのインストール方法や基本的な使い方

モチヤスタッフ

Drupalは管理画面から様々な操作を行えますが、開発時はターミナル上からコマンドを打って操作することもできます。
そのときに使用するのが「Drush(ドラッシュ)」です。

今回はDrushのインストール方法や、基本的な操作方法について紹介します。

なお、本記事で使用しているDrushのバージョンは「11.1」になります。
Drushはバージョンによってコマンドが変わったり、過去使えていたコマンドが使えなくなる場合もあるので注意しましょう。
 

DrushはDrupal + Shell

DrushはDrupalの操作をターミナルからコマンドで行えるツールです。
具体的には下記のようなDrupalの状態を確認したり、環境設定の操作や、設定のエクスポート・インポートができます。

  • サイトの状態の確認
  • キャッシュのクリア
  • 設定の変更
  • 設定ファイルのエクスポート・インポート
  • モジュールのダウンロード・有効化
  • データベースCLIの立ち上げ
  • cronの実行

ちなみに、名前の由来は「Drupal Shell」の略からきています。

なぜターミナルから操作する必要があるのか?

Drushを使う理由は人それぞれですが、主に使う理由は下記の通りです。

  • 開発効率が上がる
  • Drupal自体が動作しなくなったときにも利用できる
  • Drushコマンドからしか操作できないことがある

開発効率が上がる

開発を行っているときは、少しコードを変更してキャッシュをクリアしてということを繰り返しながら開発していきます。

このような場合、わざわざDrupalの管理画面を開き、キャッシュをクリアするよりも、Drushコマンド1つでキャッシュをクリアした方が、遥かに早く操作ができます。

また開発をしている時に、CMSに変更を加えた内容を、configファイルに書き出しを行い、そのファイルをgitで管理しますが、このconfigファイルの書き出しも、コマンド1つで操作ができるので便利です。

このようにいちいち管理画面にアクセスせずに、コマンド1つで実行できるので、Drushコマンドを使ったほうが開発効率を上げることができます。

Drupal自体が動作しなくなったときにも利用できる

開発を行っていると、ふとした時にDrupalが動作しなくなるときがあります。このような場合、直前で導入したモジュールのアンインストールや、キャッシュクリアを試して、復旧するか確認する必要があります。
Drupalが動作していないので、当然管理画面にもアクセスすることができませんが、Drushコマンドを使うことで、モジュールのアンインストールや、キャッシュのクリアを行うことができます。

Drushコマンドからしか操作できないことがある

使う理由の最後は、Drushコマンドからのみ実行できることもあります。これはモジュールを設計した方が、管理画面への実装は行っておらず、Drushコマンドからのみ実行できるように実装しているケースがあるためです。また逆にDrushコマンドからは実行できないが、管理画面からのみ実行できるケースもあります。

モチヤでは、管理者のみが実行できれば良い場合など、工数が膨らんでしまう観点からDrushコマンドのみ実行できるように設計することも多々あります。
 

Drushのインストール

Drushのインストール方法は、2022年8月現在だとComposerを使ったインストール方法が一般的です。

古いバージョンのDrushであればComposer以外にもインストールする方法はありますが、Drush 9以降はComposerを使った方法しかサポートされておらず、Drupal 8や9を使う場合にはComposerを使うしかありません。

ただし、Landoの場合はインストールしたDrushの使用時に注意が必要だったり、逆にLando以外の場合はDrushを初めて使う場合にコマンドをラクに使えるようにする設定が必要です。

Landoの場合

Landoを使って開発環境の構築をしている場合は、Landoの構築時にすでにComposerを使って構築しているはずなので、下記Composerコマンドを実行してDrushをインストールします。

composer require drush/drush

インストールしたらすぐに使えるようになりますが、1点注意が必要です。
Drushをインストールすると、通常drushコマンドが使えますが、Landoの場合はlando drushのように先頭にlandoを付ける必要があります。

lando drush ○○

先頭にlandoが付いていないとコマンドが見つからず、エラーになってしまいます。

drush ○○

最初にlandoをつける必要がある以外は、通常のDrushと同じように使えます。
Landoを使ったローカル開発環境の構築方法は過去に記事にしているので、気になる方はそちらもご覧ください。

関連記事:Landoを利用してDrupalのローカル開発環境を構築!初期設定方法を詳しく解説します(Mac版)

Lando以外の場合

Lando以外の場合も、PHPのライブラリ管理ツールの「Composer」を使ってインストールします。

ちなみに、今回はMAMPを使って構築したDrupal環境にDrushをインストールして使ってみます。
MAMPを使ったローカル開発環境の構築方法も、過去に記事にしているのでそちらもぜひご覧ください。

関連記事:MAMPを使ったDrupalのローカル開発環境の構築方法

事前準備

Composerがインストールされていない場合は、先にインストールする必要があります。

ComposerはPHPの依存関係を管理するためのツールです。
利用するPHPのライブラリやモジュールそれぞれが、どのバージョンが必要かという依存関係を指定して、その指定されたライブラリのダウンロード・インストールを管理します。

下記コマンドを実行してバージョンが返ってくる場合はインストールされています。
その場合はこの項目はスキップしてください。
 

composer

Composer起動時のターミナルのイメージ

 

Composer自体のインストール

Composerのインストールは、公式サイトで各環境に合わせたインストール方法が表示されるので、それに従ってインストールしましょう。

ちなみに、Macの場合はHomebrewをインストールしている人ならbrewコマンドで簡単にインストールできます。

brew install composer

もしHomebrewをインストールしていない場合は、次の項目で紹介する手順でインストールしましょう。

 

Homebrewのインストール

HomebrewはMacのコマンドラインツールを管理するためのツールです。

開発をする人はComposer以外にも様々なツールが必要になり、Homebrewを使えば簡単にインストールできる場合が多いので、こちらもインストールしておくのをオススメします。

Homebrew公式サイトのトップに表示されているインストールコマンドを実行すればインストールできます。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

 

Drushのインストール

Drupalを管理しているプロジェクトフォルダ内で、下記のコマンドを実行します。

composer require drush/drush

ターミナルでdrushのインストールイメージ
 

これでDrushがインストールされます。

ただし、Drush の実行ファイルは「vendor/bin/drush」にインストールされるので、drushコマンドを実行するためには「./vendor/bin/drush」のようにコマンドを打つ必要が出てきます。
毎回これを入力して実行するのは正直面倒です。

理想は「drush ○○」のように「drush」と入力すれば、自動で「vendor/bin/drush」内の実行ファイルを実行してくれるようにすることです。

## 現状だと実行時に下記のように入力して実行する必要がある
./vendor/bin/drush ○○
## 理想はdrushと入力するだけでコマンドを実行したい
drush ○○

そこで使えるのが「Drush Launcher」です。
 

Drush Launcherのインストール

「Drush Launcher」は「drush」コマンドを実行したときに、そのコマンドを実行したパスを確認して、Drushを呼び出してくれるDrushのラッパーコマンドです。

これを設定しておくことで、「composer.json」ファイルがあるディレクトリ配下ならどこでも、「drush」コマンドでプロジェクトにインストールしたDrushを実行してくれます。

インストールは「Drush LauncherのGitHubのページ」にアクセスして、書かれている手順に従います。
2022年現在では、まず下記のコマンドを実行して、Drush Launcherのファイルをダウンロードします。

curl -OL https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar

ホームディレクトリに「drush.phar」ファイルがダウンロードされるので、そのファイルに実行権限を付与します。

chmod +x drush.phar

「drush.phar」を「$PATH」の環境変数に書かれたディレクトリへ移動し、名前を「drush」にリネームします。
特になにも設定していない場合は「/usr/local/bin」ディレクトリがデフォルトでパスが通っているので、そこへ移動させればOKです。

mv drush.phar /usr/local/bin/drush

これでDrush Launcherのインストールは完了です。

 

MySQLの接続エラーが出る場合の対処法

MAMPを使っている場合は、drushコマンドを使おうとすると「In Connection.php line 189: SQLSTATE[HY000] [2002] No such file or directory」エラーが表示される場合があります。
 

MySQLでの接続エラー

これはMySQLへの接続に失敗してしまっている状態です。
「sites/defaualt/settings.php」にある「$databases['default']['default']」を修正することで解決します。

$databases['default']['default'] = array (
  'database' => 'drupal_9',
  'username' => 'root',
  'password' => 'root',
  'prefix' => '',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql',
  'driver' => 'mysql',
  'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
);

上記のようになっているコードを、下記のように修正します。
 

  • 「host」の「localhost」を「127.0.0.1」にする
  • 最後に「'unix_socket'」を追加する
     

settings.php 変更イメージ

$databases['default']['default'] = array (
  'database' => 'drupal_9',
  'username' => 'root',
  'password' => 'root',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql',
  'driver' => 'mysql',
  'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
  'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);

これでMAMPでもdrushコマンドが使えるようになります。
 

Drushコマンドの確認

Drushをインストールしたら、「drush」コマンドで実行してみます。
無事インストールされていればDrushで使えるコマンド一覧が表示されます。

drush

ちなみに、このコマンドもLandoを使っている場合は先頭にlandoをつける必要があります。

lando drush

以降紹介するコマンドもすべて先頭にlandoが必要です。
landoが抜けている場合は下記のようなエラーが表示されます。
 

landoでのエラー例

忘れないように注意しましょう。

 

基本的なコマンド

Drushのコマンドは非常に多いのですが、その中からいくつか便利でよく使いそうなコマンドをピックアップしておきます。

サイトの状態を確認する

サイトの状態を確認したいときには、「status」コマンドを実行すると、Drupalサイトの概要が表示されます。

drush status

下記のような内容が確認できます。

  • Drupalバージョン
  • URL
  • データベースの場所
  • ファイルパス
  • デフォルトのテーマ

キャッシュのクリア

開発をしていると、確認のためにキャッシュをクリアしたいときがあります。
そんなときは「cc(Cache Clearの略)」コマンドを実行すると、キャッシュのクリアができます。

drush cc

コマンドを実行すると、どのキャッシュをクリアするか聞かれるので、数字を入力してenterで該当のキャッシュをクリアできます。

ターミナル画面

また、すべてのキャッシュを削除したい場合は「cr(Cache Rebuildの略)」コマンドを実行します。

drush cr

設定ファイルエクスポート・インポート

サイトの設定をエクスポートしたりインポートしたいときは「cex(Config Exportの略)」コマンドでエクスポートします。

drush cex

デフォルトだと「sited/default/files」内にエクスポートされますが、このフォルダは通常は「git ignore」されてファイルの変更を無視する場所です。
「settings.php」の「$settings['config_sync_directory']」で出力する場所を指定できるので、指定して管理するようにしましょう。

指定する場所は、ドキュメントルートの外を指定するのが一般的です。

逆にインポートしたい場合は「cim(Config Importの略)」コマンドでインポートできます。

drush cim

エクスポートしたファイルもGitに上げておけば一緒に管理できますし、他の人と共有してインポートすれば同じ設定が使えるようになります。

モジュールの有効化

モジュールを有効化したい場合は「en(Enableの略)」コマンドを使います。

drush en モジュール名

ちなみに、存在しないモジュールファイルを有効化しようとした場合はエラーになるので、Composerを使うなどしてモジュールをダウンロードする必要があります。

データベースCLIの立ち上げ

データベースを操作したい場合は「sqlc」コマンドを使うと、Drupalで使っているデータベースに接続します。

drush sqlc

本来は「setting.php」を確認してデータベースの接続情報を確認して、それを使ってmysqlコマンドを実行するなど、面倒な作業が発生します。
しかし、このコマンドを使えば接続情報をわざわざ確認する必要がなくなります。

Drushコマンドの一覧

「list」コマンドを実行するとDrushで使えるコマンドが一覧で表示されます。

drush list

Drush command
 

「list」コマンドで表示される一覧と、説明文を翻訳して内容を整理した表を下記にまとめておくので、ぜひ全体の把握に活用してください。

Drushで用意されているコマンドの数はかなり多く、一気にすべて把握することはできませんが、なんとなく全体を流し見しておくと「こんなことができるんだな」という参考になります。

そして、実際に使うタイミングになって調べて使って、頻度が高いコマンドは自然と覚えると思います。

ちなみに、「list」で表示された一覧の中で括弧内に表示されているコマンドは、ショートカットのようなコマンドです。
例えば、「drupal:directory」は括弧内で書かれている「dd」でも実行できます。

# drupal:directoryで実行
drush drupal:directory
# 括弧内のddでも同じように実行可能
drush dd

 

グループ コマンド 説明
_global browse Drupalへのパスへのリンクを表示するか、ブラウザでリンクを開く
  drupal:directory
dd
gen
モジュール・テーマなどの主要フォルダへのファイルシステムパスを表示する
  generate
gen
モジュール・プラグイン・サービスなどのテンプレートコードを生成する
  help コマンドの使用方法の詳細を表示する
  jn:get JSONAPIリクエストを実行する
  list 利用可能なコマンド一覧を表示する
  mk:docs 利用可能なDrushコマンド・ジェネレーターごとにMarkdownドキュメントを生成する
  runserver
rs
serve
開発用にPHPの組み込みのhttpサーバーを起動する
  version Drushのバージョンを表示する
archive archive:dump
ard
コード・ファイル・データベースを1つのファイルにしてバックアップする
  archive:restore
arr
コード・ファイル・データベースを、バックアップしたファイルを使って復元(インポート)する
cache cache:clear
cc
Drupalのキャッシュをクリアする
  cache:get
cg
キャッシュされたオブジェクトを表示する
  cache:rebuild
cr
rebuild
Drupalのサイトをリビルド(再構築)する
  cache:set
cs
JSONか「varexport()」形式のオブジェクトをキャッシュする
  cache:tags
ct
キャッシュタグの無効化
config config:delete
cdel
設定の構成キーかオブジェクト全体を削除する
  config:edit
cedit
テキストエディタで設定ファイルを開く
エディタを閉じたあとに編集内容はインポートされる
  config:export
cex
Drupalの設定をエクスポートする
  config:get
cget
設定値や設定オブジェクト全体を表示する
  config:import
cim
Drupalの設定を「config」ディレクトリからインポートする
  config:pull
cpull
別の環境に設定をエクスポートして転送する
  config:set
cset
設定を直接保存する(インポートの実行はできないので注意)
  config:status
cst
設定のステータスを表示する
(ファイルシステム構成とデータベースの違い)
core core:cron
cron
サイト上のすべてのアクティブなモジュールで、cronを実行する
  core:edit
conf
config
drush.yml(Drushの設定ファイル)・サイトエイリアス・settings.php(Drupalの設定ファイル)を編集する
  core:requirements
status-report
rq
Drupalのインストールで問題が発生する可能性のある情報を表示する
  core:route
route
ルートに関する情報を表示する
  core:rsync
rsync
SSHを使用して、Drupalのコードやファイルを別のサーバーとの間で同期する
  core:status
status
st
DrushとDrupalの環境に関する概要を表示する
  core:topic
topic
トピックに関する詳細なドキュメントを表示する
deploy deploy コードのデプロイを実行する
  deploy:hook 保留中のデプロイ更新フックを実行する
  deploy:hook-status 保留中のデプロイ更新フックに関する情報を出力する
  deploy:mark-complete すべてのデプロイフックを実行済みとしてマークする
entity entity:delete
edel
コンテンツエンティティを削除する
  entity:save
esav
コンテンツエンティティを読み込んで保存する
field field:base-info
fbi
エンティティタイプのすべての基本フィールドを一覧表示する
  field:base-override-create
bfoc
新しい基本フィールドを作成する
  field:create
fc
新しいフィールドを作成する
  field:delete
fd
フィールドを削除する
  field:info
fi
構成可能なすべてのフィールドを一覧表示する
image image:derive
id
派生画像を生成する
  image:flush
if
特定のスタイルのすべての派生をフラッシュする
locale locale:check 利用可能な翻訳の更新を確認する
  locale:export 翻訳ファイルをエクスポートする
  locale:import 翻訳ファイルをインポートする
  locale:update 利用可能な翻訳の更新をインポートする
migrate migrate:fields-source
mfs
ソースでマッピングに使用できるフィールドを一覧表示する
  migrate:import
mim
マイグレーションプロセスを実行する
  migrate:messages
mmsg
マイグレーションに関するメッセージを表示する
  migrate:reset-status
mrs
アクティブなマイグレーションをアイドル状態にして、リセットする
  migrate:rollback
mr
マイグレーションをロールバックする
  migrate:status
ms
すべてのマイグレーションを、現在のステータスと一緒に一覧表示する
  migrate:stop
mst
アクティブなマイグレーションを停止する
php php:cli
php
core:cli
core-cli
Drupalサイトでインタラクティブシェルを開く
  php:eval
eval
ev
Drupalのブートストラップ後に任意のPHPコードを評価する(利用可能な場合のみ)
  php:script
scr
Drupalのブートストラップ後にPHPスクリプトを実行する
pm pm:install
is
install
en
pm-enable
pm:enable
モジュールを有効にする
  pm:list
pml
利用可能なモジュールやテーマの一覧を表示する
  pm:security
sec
保留中のセキュリティアップデートがないか、Drupal Composerパッケージを確認する
  pm:security-php
sec-php
Drupal以外のPHPパッケージをチェックして、保留中のセキュリティアップデートを確認する
  pm:uninstall
un
pmu
モジュールと関連する依存モジュールをアンインストールする
queue queue:delete 特定のキューを削除する
  queue:list すべてのキューのリストを返す
  queue:run 特定のキューを実行する
role role:create
rcrt
新しいロールを作成する
  role:delete
rdel
ロールを削除する
  role:list
rls
すべてのロールを一覧表示する
  role:perm:add
rap
role-add-perm
指定した権限をロールに付与する
  role:perm:remove
rmp
role-remove-perm
指定した権限をロールから削除する
site site:alias
sa
サイトエイリアスの詳細か一覧を表示する
  site:alias-convert
sa-convert
sac
従来のサイトエイリアスを新しいYML形式に変換する
  site:install
si
sin
「modules/themes/configuration/profile」をもとにしてDrupalをインストールする
  site:set
use
現在のセッションで使用するサイトエイリアスを設定する
  site:ssh
ssh
SSH経由でDrupalサイトのサーバーに接続して、オプションでシェルコマンドを実行する
sql sql:cli
sqlc
Drupalの情報を使用してSQLコマンドラインインターフェイスを開く
  sql:connect SQLに接続する
  sql:create データベースを作成する
  sql:drop 特定のデータベース内のすべてのテーブルを削除する
  sql:dump データベースをsqlファイルとしてエクスポートする
  sql:query
sqlq
データベースに対してクエリを実行する
  sql:sanitize
sqlsan
ユーザーデータを削除したり難読化して、データベースをサニタイズする
  sql:sync 他のサイトにrsync経由でデータを転送してデータベースをコピーする
state state:delete
sdel
ステートエントリーを削除する
  state:get
sget
ステートの値を表示する
  state:set
sset
ステートの値をセットする
theme theme:enable
then
テーマを有効にする
  theme:uninstall
thun
テーマをアンインストールする
twig twig:compile
twigc
すべてのTwigテンプレートをコンパイルする
  twig:unused 使用されていない可能性のあるTwigテンプレートを探す
updatedb updatedb
updb
必要なデータベースの更新を適用する(update.phpの実行と同様)
  updatedb:status
updbst
保留中のデータベース更新を一覧に表示する
user user:block
ublk
指定したユーザーをブロックする
  user:cancel
ucan
指定したユーザーをキャンセルする
  user:create
ucrt
新しいユーザーを作成する
  user:information
uinf
指定したユーザーに関する情報を出力する
  user:login
uli
ユーザーのワンタイムログインリンクを表示する
  user:password
upwd
指定したユーザーのパスワードを設定する
  user:role:add
urol
user-add-role
指定したユーザーにロールを追加する
  user:role:remove
urrol
user-remove-role
指定したユーザーのロールを削除する
  user:unblock
uublk
指定したユーザーのブロックを解除する
views views:analyze
va
すべてのビューリストを取得して、Warning(エラー警告)がないか分析する
  views:dev
vd
いくつかのビュー設定を、開発者向けの値にする
  views:disable
vdis
指定したビューを無効にする
  views:enable
ven
指定したビューを有効にする
  views:execute
vex
ビューの数や、レンダリングされるHTMLの数を表示する
  views:list
vl
すべてのビューのリストを取得する
watchdog watchdog:delete
wd-del
wd-delete
wd
ウォッチドッグ(メッセージ通知機能)のログを削除する
  watchdog:list
wd-list
ウォッチドッグのメッセージ一覧をフィルタリングする
  watchdog:show
wd-show
ws
ウォッチドッグのメッセージを表示する
  watchdog:show-one
wd-one
IDごとに1つのログを表示する
  watchdog:tail
wd-tail
wt
ウォッチドッグのメッセージを継続的に表示する

 

使いたいコマンドはhelpコマンドで確認する

使いたいコマンドや気になるコマンドがあれば、「help」のあとに調べたいコマンド名を入力すると、詳細な情報が表示されます。

drush help browse

helpコマンド後イメージ

 

実際の使用例や、コマンドに関する引数・オプションに関しての説明が出てくるので、気になるコマンドがあればこの方法で調べましょう。

まとめ

もちろん管理画面から行える設定は、管理画面から行っても問題ありません。
ただ、例えばデータベースのエクスポート・インポートなどは管理画面を使わずに、Drushを使って行うのが開発現場では一般的です。

エクスポートされたデータベースファイルはそのままGit管理下に置いてプッシュすれば、他の人もGitからデータベースファイルを取得し、インポートできます。

できることもかなり多く、Drupalで開発する上では使えるようになっていて損はないので、ぜひ積極的に使っていて慣れていくようにしましょう。
 

モチヤスタッフ

Drupalなど技術に関する投稿をモチヤのスタッフが行っています。

モチヤスタッフ の書いた記事一覧

最新の関連記事

Ranking

Category

Tag

Contact お問い合わせ

Drupalでの開発・運用、サーバー構築、Webサイト構築全般、制作費用などに関してお気軽にご相談ください。