0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アリババクラウドECS上のWP-CLIでWordPressのメディア管理、ユーザー管理、データベース運用

Posted at

この3部構成のチュートリアルでは、WP-CLIでWordPressの高度な管理を設定する方法を説明します。パート2では、アリババクラウドECS上のWP-CLIでWordPressを管理することに焦点を当てています。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

Alibaba Cloud Tech Share執筆者のJeff Cleverley著。Tech Shareは、クラウドコミュニティ内で技術的な知識やベストプラクティスを共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

今回は、WP-CLIが提供する高度なWordPress管理能力についての3部構成の深堀りの第2弾です。

前回のチュートリアルでは、ECS インスタンスに WP-CLI をインストールし、それが正しく動作するように正しいパーミッションとユーザーロールを準備し、WordPress コンテンツを管理するために WP-CLI を使用することを見てきました。

このチュートリアルでは、より高度な機能をより深く掘り下げていきます。メディア、ユーザーの管理、データベース操作を行います。デフォルトのパラメータをグローバルとローカルに設定し、それぞれのコマンドでサーバー上の多くのサイトを管理するためにどのように使用できるかをお見せします。

最後のチュートリアルでは、この機能をどのように活用して、ローカルマシンからすべてのインスタンスで何百ものサイトを管理することができるのか、機能性の高いプラグインやテーマの開発を高速化するためのコマンドのデモンストレーションを行い、最後に WP-CLI を拡張して、カスタムコマンドを使ってカスタム機能を提供する方法を紹介します。WP-CLI を効果的に使用することで、広く使われているプラグインを削除することで、WordPress サイトの肥大化を減らすことができることがわかります。

これまでと同様に、このチュートリアルでは、すでに Alibaba Cloud ECS インスタンスがプロビジョニングされており、その上で 1 つ(または複数)の WordPress サイトが稼働していることを前提としています。

このシリーズを通して、私は自分のスーパーユーザ「new_user」を使用し、sudoコマンドを使用して「root」コマンドを発行します。コマンドを実行する際には、私のユーザーを自分のユーザーに置き換えることを忘れないようにしてください。

また、コード例では私のテストドメイン 'an-example-domain.com' と 'other-example-domain.com' を使用していますが、コマンドを発行する際には、私のサイトドメインをあなた自身のものに置き換えることを忘れないでください。

1. WP-CLIでプラグインとテーマを管理

WP-CLIには、サイト上のプラグインやテーマを管理するための豊富なコマンドが含まれています。多くのサイトを管理している場合、これらはあなたの生産性を本当に高めることができます。

プラグインを管理するには「wp plugin」コマンドを、テーマを管理するには「wp theme」コマンドを使用します。

WordPress プラグインコマンド

いつものように 'list' サブコマンドがあります:

$ wp plugin list

image.png

[プラグインとその状態を一覧コマンドで表に表示]

また、'status'サブコマンドを使ってプラグインとそのステータスを表示することもできます。

$ wp plugin status

更新が必要なプラグインがあれば、WordPress.org のプラグインリポジトリに記載されているプラグインの「slug」を使って更新することもできます。

$ wp plugin update akismet

プラグインのリストアップと更新が完了すると、ターミナルは以下のようになります。

image.png

[プラグインの状態を確認して更新する]

プラグインを個別にアクティベートしたり、リスト化したりすることもできます。

$ wp plugin activate akismet nginx-helper

または、'--all' パラメータを使用します。

$ wp plugin activate —all

または、プラグインの無効化と削除を行います。

$ wp plugin deactivate akismet && wp plugin delete akismet

WordPress.org のリポジトリからプラグインを簡単に検索することができます。ブラウザを使うよりもはるかに高速ですが、多くの情報を返すわけではありません。何を探しているのか分かっていて、インストールのために「slug」を必要とするだけならば、もっと便利になります。

$ wp plugin search nginx

それらをインストールして、1つのコマンドで「--activate」します。

$ wp plugin install regenerate-thumbnails —activate

もちろんプラグインをアップデートすることもできますが、コアと同じように、問題があればプラグインを任意の前のバージョンに戻すこともできます。

これはWP-CLIを使うととても楽になる作業の一つです。WordPress の管理者を使用するには、プラグインを無効にしてから削除し、ブラウザで古いバージョンのプラグインを検索して、それをあなたのマシンにダウンロードして、それをインストールするためにあなたのサイトにアップロードする必要があります。

$ wp plugin update regenerate-thumbnails --version=3.0.0

すべてのプラグインを一度に更新します。

$ wp plugin update —all

WordPressのテーマコマンド

他のコマンドと同様に、'list' サブコマンドを使ってテーマをリストアップします。

$ wp theme list

image.png

[テーマとその状態を一覧コマンドで表に表示]

また、「status」サブコマンドを使ってテーマとそのステータスを表示することもできます。

$ wp theme status

どのテーマでも更新が必要な場合は、私の場合はTwentyseventeenがそうですが、私たちもそれを行うことができます。

$ wp theme update twentyseventeen

「wp theme」は「wp plugin」と同じサブコマンドをすべて持っているので、ほとんど同じように管理することができます。

$ wp theme search <word to search by>
$ wp theme install <theme>
$ wp theme activate <theme>
$ wp theme deactivate <theme>
$ wp theme delete <theme>
$ wp theme update --all

2. データベース操作を行う

前述したように、WP-CLI を使うと、WordPress データベースの操作をコマンドラインから行うことができます。

WordPress データベースのエクスポートやインポート、バックアップ、問題が発生した後のバックアップへの戻し、ステージングサイトの作成、サイトの移行などが、今では信じられないほど簡単に行えるようになりました。

$ wp db export backup.sql
$ wp db import backup.sql 

あなたのデータベースを最適化したり、修復したりすることができます。

$ wp db optimize
$ wp db repair

しかし、これらの 'wp db' コマンドを使って BASH スクリプトを作成し、それを cron ジョブで実行することで、別のプラグインの必要性を排除することができます。これは WP-CLI が WordPress サイトの肥大化を減らし、作業負荷を最適化するもう一つの例です。

このチュートリアルの最後に、WP-CLI のタスク自動化の例としてスクリプトを作成します。

検索と置換

別のチュートリアルでは、WP-CLI を使ってサイトをステージング環境とローカル開発環境に移行しましたが、これは WP-CLI の最も強力なコマンドの一つである 'search-replace' で簡単にできました。

私のテストサイトで検索と置換を実行してみましょう。

wp search-replace "WP-CLI" "WP-CLI Awesome Sauce”

image.png

[WordPressのデータベースで検索して置換]

image.png

[WP-CLIオーサムソース]

データベースのdump - 注意してください!

データベース全体を削除するための 'dump' コマンドもあります。

$ wp db dump

これは確認が必要ですが、指先でアクセスできるようにするには明らかに非常に危険なコマンドです。いずれにしても、WP-CLI グローバル設定ファイルでパラメータを設定してこのコマンドを無効にすることをお勧めします。これについては後のセクションで説明します。

データベースクエリ

queryサブコマンドを使用して、標準的な MySQL コマンドでデータベースに問い合わせを行うことができます。

すべての投稿IDのリストをデータベースにクエリしてみましょう。

$ wp db query "SELECT id FROM wp_posts;”

すべての投稿 ID を示すテーブルが得られます。

image.png

[WP-CLIでデータベースをクエリ]

3. ワードプレスのメディアを管理

WordPressの開発者がWordPressメディアマネージャーを愛用していることを公言しているのを聞いたことがないような気がします。一般的に、画像やメディアに関わる管理作業は最も効率が悪いとされており、メディアマネージャーは一般的に工夫が足りないとされています。

画像のインポート

WP-CLI は、特に画像のインポートに関しては、これを助けることができます。

私の例のサイトのメディアマネージャーを見てみましょう。

image.png

[サイトの空のメディアマネージャの例]

そして、先ほど作成した投稿がこちら:

image.png

[特集画像無しの投稿7]

特に「wp media import」という組み合わせのコマンドは強力です。このコマンドには設定可能なパラメータがあります。

まず、インポート元の場所を指定する必要があります。これはあなたのサーバー上でも構いませんし、リンクから直接画像を取得することもできます。タイトル '--title='、キャプション '--caption='、altテキスト '--alt='、投稿に添付する画像 '--post_id='、特徴的な画像 '--featured_image' を設定することができます。

$ media import https://a-website.com/some-image.png --title=“Image Title” --caption=“Image Caption” --alt=“Image alt text” --post_id=7 --featured_image 

インポートが成功したかどうかは、ターミナルに表示されます。

これで、カンフー猫の画像をメディアライブラリに取り込むことに成功したことがわかります。

image.png

[カンフー猫はメディアライブラリーにあります]

画像にはタイトル、キャプション、altテキストが設定されています。

image.png

[Kung Fu Cat画像の詳細 - タイトル、Alt、キャプションがすべて設定されています]

そして、ワンコマンドで特集画像として投稿に添付されています。

image.png

[カンフー猫注目画像 - WP Admin]

image.png

[カンフー猫注目画像 - Front End]

長い間WordPressで仕事をしていれば、これがどれだけ便利なのか理解できると思います。

画像の一括インポート

WordPress 開発者としての最大の悩みの一つは、クライアントからサイトで使用したい画像を大量に提供されたときです。これを行うために WP 管理者のメディアマネージャーを使用することは、言葉が悪いですが、拷問のようなものです。

ディレクトリにアップロードしてWordPressにスキャンさせることはできないので、メディアマネージャーのインターフェイスを使ってディレクトリにインポートする必要があります。原理的には、WP-CLI は実際にはこのプロセスを変更することはなく、単に合理化して信頼性を向上させるだけです。

というわけで、私のデスクトップにはカンフー猫の画像があります。

image.png

[カンフー猫コレクション]

SFTP プログラムを使って、サーバー上のユーザーのホームディレクトリにあるディレクトリに画像をアップロードすると、ディレクトリの内容が一覧表示されて、それらの画像を見ることができます。

あとは、'import' コマンドを使って、そのディレクトリから画像をインポートするだけです。

$ wp media import ~/kung_fu_cats/*

そして、ブラウザベースのツールの遅さや潜在的な障害もなく、画像のディレクトリ全体をMedia Managerにインポートすることに成功しました。

image.png

[カンフー猫がいっぱいのメディアライブラリー]

メディアの再生

ほとんどの開発者が自分のサイトで使用しているそれらのツールの別の1つは、'再生サムネイル'プラグインのいくつかのフォームです。通常は大規模なプラグインではありませんが、なぜ不必要なプラグインでウェブサイトを肥大化させるのでしょう?

私たちは簡単に使用することができます。

$ wp media regenerate

これをさらに改善していくことが出来ます...。

4. WP Evalを使ってWP-CLIとPHPを組み合わせる

WP-CLI の本当の力は、コマンドを組み合わせたときに発揮されます。その例として、'wp media regenerate' コマンドと 'wp eval' コマンドの組み合わせがあります。wp eval を使うと、WP-CLI コマンド内で任意の PHP コードを実行できるようになるので、WP-CLI コマンドと WordPress や他の PHP 関数を組み合わせることができます。

そこで、'media regenerate' コマンドを WordPress の PHP と組み合わせて、公開された記事の特集画像のみを再生成するようにしてみましょう。

$ wp media regenerate $(wp eval 'foreach( get_posts( array( "post_status" => "publish" ) ) as $id ) { echo get_post_thumbnail_id( $id ) . " "; }’ )

私たちが見ているように、私たちの投稿のうちの1つだけが公開されており、この投稿のための注目画像だけが再生されています。

image.png

[公開されている記事一覧]

このようにWP-CLIコマンドを組み合わせることで、WordPressのインストールを管理する際に、ほぼ無制限の柔軟性が得られます。

5. WordPress のユーザーとロールの管理

WordPressのユーザーを管理

「wp user」を使用すると、ユーザーとその情報を簡単に作成、削除、更新、管理することができます。

自分のサイトのユーザーをリストアップします。

$ wp user list

ご覧のように、ユーザーは一人しかいません。もう一人のユーザーを作成して、彼に 'author' の権限を与えてみましょう。

image.png

[自分のWordPressサイトのユーザーをリストアップ]

$ wp user create john john@an-example-domain.com --role=author --user_pass=johnsgreatpassword

ここでもう一度ユーザーをリストアップすると、Johnが追加されていることがわかります。

image.png

[新規ユーザーの追加]

image.png

[新規ユーザーJohnが追加されました]

WP-CLI を使うと、ロックアウトされてしまった時に簡単にサイトにアクセスできるようになります。(私は今までに起きたことはありません。)

6. ユーザーの役割と機能の管理

新しい Teacher ロールを作成してみませんか?これも非常に簡単ですが、まず、そのロールがすでに存在していないことを確認することをお勧めします。

これは以下のいずれかの方法で行うことができます。

$ wp role list --fields=role

或いは

$ wp role exists teacher

ご覧のように、「teacher」というロールはありません。

image.png

[ Teacherのロールは存在しない]

そこで、これを作成して、エディタロールと同じ機能を与えることができるようになりました。

$ wp role create teacher “Teacher” --clone=“editor”

その後、新しいロールの一覧表を見てみると

image.png

[Teacherロールが作成されました]

そして、新しいユーザーであるJohnにTeacherのロールを与えるのは簡単です。

$ wp user add-role john teacher

再びユーザーをリストアップしてみると、Johnのロールに「Teacher」が追加されていることがわかります。

image.png

image.png

[Johnは現在教師です]

7. WP-CLI設定ファイル

WP-CLIでは、グローバルレベルまたはプロジェクトディレクトリレベルでデフォルトの設定パラメータを設定することができます。

デフォルトでは、グローバル設定ファイルはユーザーのホームディレクトリ内の隠しディレクトリ '~/.wp-cli/config.yml' にあります。

その場所は、インスタンス上で 'wp --info' コマンドを実行すると確認できます。

$ wp —info

ただし、このファイルは自動的には作成されません。ホームディレクトリから以下のコマンドを発行してください。

$ touch ~/.wp-cli/config.yml

これで、「wp --info」コマンドを実行すると、設定ファイルが「wp-cli」に登録され、一覧表示されているはずです。これで確認してください。

image.png

[グローバル設定ファイルが一覧表示されるようになりました]

このファイルを開いて編集し、デフォルトの設定パラメータを追加してみましょう。

$ nano ~/.wp-cli/config.yml

このファイルでは、WP-CLI グローバルパラメータのデフォルト設定、サブコマンドのデフォルト設定、他の WordPress インストーラに接続するためのエイリアスの作成などを行うことができます。

とりあえず、設定ファイルに以下を入力します。

# Global Parameter Defaults
disabled_commands:
 - db drop

# Subcommand Defaults
config create:
    dbuser: new_user
    dbprefix: nu_

まず、「#グローバルパラメータのデフォルト」では、WordPressサイトのデータベースを削除する機能を無効にしていますが、これはWP-CLIがデータベース操作を非常に簡単にしている場合に特に重要です。

次に、「#サブコマンドのデフォルト」では、WP-CLIの「wp config create」コマンドを使って「wp-config.php」ファイルを作成する際に、デフォルトのテーブルのプレフィックスと一緒に、自分のユーザーをデフォルトのデータベースユーザーに設定しています。

config ファイルでできる他の素晴らしいことの一つは、リモートサーバーへの接続をより簡単にするためのエイリアスを作成することです。それについては次のセクションで見ていきます。

WP-CLI では任意の作業ディレクトリに設定ファイルを設定することもできますが、これは 'wp-cli.yml' または 'wp-cli.local.yml' という名前でなければなりません。

例えば、以下のようにします。

/var/www/an-example-domain.com/htdocs/wp-cli.yml

設定ファイルの引数は、高いものから低いものまで、以下の順番で解釈されます。

1.コマンドラインの引数
2.ローカルディレクトリ内のwp-cli.local.ymlファイル
3.ローカルディレクトリ内のwp-cli.ymlファイル
4.‾/.wp-cli.config.ymlファイル
5.WP-CLIのデフォルト

8. 便利なAliasの使い方

現時点では、インスタンス上のWordPressサイトを作業したい場合、サーバーにログインしてサイトのルートディレクトリに変更してWP-CLIコマンドを発行する必要があります。このプロセスは、WP-CLI を使用することで得られる効率を著しく低下させます。

この問題を解決するためにAliasを使用することで、サーバー内のどこからでもサイトを操作できるようになります。

WP-CLIの設定ファイルを開いて再度編集します。

$ nano ~/.wp-cli/config.yml

下部の「#Subcommand Defaults」の下に, 以下の行を追加します.

# Aliases
@example:
    path: /var/www/an-example-domain.com/htdocs/
@another:
    path: /var/www/another-example-domain.com/htdocs/

そして、ファイルを保存して閉じます。

config.yml' ファイルは以下のようになっているはずです。

image.png

[WP-CLI設定ファイル with Aliasの場合]

これで、サーバー上のどこからでも、それぞれのサイトにAliasを使って WP-CLI コマンドを発行することができるようになりました。

例えば、ディレクトリをホームディレクトリに変更して、以下のコマンドを発行します。

$ cd ~
$ wp @example plugin list
$ wp @another plugin list

そして、両方のサイトのプラグイン一覧を見ていきます。

image.png

[Aliasを使ってサーバー上のどこからでも簡単にWP-CLIコマンドを発行できます]

9. WP-CLI & Cron Jobsでタスクを自動化

WordPressのサイトを管理していると、定期的にスケジュールを組んで実行しなければならないタスクがよくあります。そのようなタスクの1つが、先に述べたWordPressデータベースの自動バックアップをスケジュール的に実行することです。

Cronジョブを使ってWP-CLIコマンドを実行するようにシステムをスケジュールすることができます。

WP-CLIのCronコマンドは、WordPressの「WP-Cron」を使用しているため、WP管理者からのフィードバックに頼って実行するため、信頼性が低く、真のCronジョブではないので、私は使用しません。

ほとんどの場合、'WP-Cron' を無効にして、Linux システムの Cron ジョブとして 'wp-cron.php' を実行することをお勧めします。

あなたのサイトで、'wp-config.php' ファイルを開き、次の行を追加します。

define('DISABLE_WP_CRON', true)

ここで、編集用にシステムのcrontabを開きます。

$ crontab -e

そして、独自のサイトドメインを使用して、その中に次の行を追加します。

0 1 * * * * wget https://an-example-domain.com/wp-cron.php

wget コマンドは、コマンドラインからウェブからコンテンツを取得するために使用されます。非インタラクティブなので、コマンドラインでの利用には最適です。

これで system cron ジョブは毎朝 1 時に WordPress の 'WP-Cron' タスクを実行するようになりました。

同様に、WP-CLI コマンドを使って、システム Cron を使ってスケジュールされたバックアップを実行してみましょう。システムCronのジョブは「crontab」を使って管理しています。

システムの「crontab」を開いて編集します。

crontab -e

WP-CLI のフルパスを追加する必要があります。このチュートリアルの冒頭では '/usr/local/bin' に移動しました。

Aliasを設定していない場合は、WP-CLI グローバルの '--path=' パラメータを使用する必要があります。

0 0 * * * /usr/local/bin/wp --path=/var/www/an-example-domain.com/htdocs db export

Aliasを設定している場合は、追加するだけです。

0 0 * * * * /usr/local/bin/wp @example db export

今、あなたのサイトは、真夜中に毎日のバックアップをスケジュールします - 0 0 *

あなたの「crontab」はこのようになっているはずです。

image.png

[Linux Cronで信頼性の高い仕事のスケジュールを組みます]

このシリーズのパート2は終了しました。最終回のチュートリアルでは、これまでに学んだコマンドや設定を使って、数百ものWordPressサイトをいくつものアリババインスタンスで管理できるようにしていきます。また、WordPress の開発とデプロイのワークフローで WP-CLI を使用して開発をスピードアップする方法を学び、最後にカスタムコマンドを使って拡張します。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?