WordPress、この業界の皆様なら一度は聞いたことがある or 使ったことがあるかと思います。このWebサイトもWordPressを使って構築していますし、当社も数件のWordPressの運用保守を行っています。

WordPressはシェアの大きさ、インストールの容易さ、カスタマイズ性の高さ(デザイン面・機能面)などを武器に、OSSで無償で利用できるため、現在のWebアプリケーションの制作では切っても切れない心強いパートナーです。

WordPressの構造を熟知していれば、Webサービスも作れます。メディアやコーポレートサイトだけではありません。ECサイト・CGMも作ることができます。WordPressの構造に合わせてユーザーコンテンツを設計するようにすれば、WordPressの機能を踏襲しつつ管理機能が用意できます。

多機能で多方向に活躍するWordPressですが、シェアの大きいCMSなので脆弱性を狙ってくる悪意のユーザーの格好の的です。WordPressを適切に運用していくには、継続的に手を入れる必要があります。

この手を入れている内容について、説明します。

運用保守の予算をクライアントに取ってもらうためのネタとして、同業のみなさんに役立てて頂ければ幸いです。

IT技術者ではない方には、以下の内容を全部説明しても10のうち1が伝わればいいほうなので。

WordPressの運用保守 is 何

WordPressに限らず、ITシステムで様々な問題が発生するのは制作して運用が始まってからです。製作時はちゃんと体制が作られているため、望むITシステムが手に入ることが多い。問題はそのあと。

作ったITシステムは一切手を加えなくてもそのまま安定して使えると多くのエンドユーザーが捉えるため、作ってから放置されているケースが増えてくる。

確かに、見た目や機能は納品時から変わっていないことが多いでしょう。その意味では、エンドユーザーが目に触れる部分は、WordPressのバージョンアップがあろうが変わらない。しかしながら、ITシステムの運用と保守は、エンドユーザーが目に触れない部分が大半です。安全な環境でWordPressを使えるようにするために、縁の下でやることがたくさんあります。

WordPressで作ってインターネット上に公開されているWebサイトの運用保守には、大きく分けると以下のタスクが必要になります。

  1. WordPress本体のアップデート
  2. WordPressテーマのアップデート
  3. WordPressプラグインのアップデート
  4. 不具合が起こった場合の状況把握・修正
  5. 新たな機能・ページ・コンテンツの追加
  6. WordPress運用インフラの保守・運用
    1. PHPのバージョンアップ
    2. OSのバージョンアップ
    3. データベースのバージョンアップ
    4. SSLの更新
    5. SSH・SFTPの管理
    6. ファイルのバックアップ
    7. データベースの中身のバックアップ
    8. ドメインの更新
  7. WordPress自体の不正利用対策

最も重要なのはWordPress本体のこまめなアップデート

WordPressはコアの更新速度が速いです。マイナーリリースなども含めると、印象としては毎月何かしらのリリースがされているように感じます。脆弱性が確認された場合は即座に更新版が出ることもあります。リリースノートはここにありますので、興味があったらみてください。

本体の更新自体は基本的にボタン1つでできるのですが、運用環境によっては更新に失敗してしまうケースもあります。そのため、ファイルとデータベースは全部バックアップを取ってから実行するのがマナーです。結構長く運用しているWordPressサイトだと、コンテンツだけでGB単位になることもあります。

ボタン1つで更新できるのになんで放置しているのか。私共が遭遇したケースは大きく2点。1つは、運用保守契約が存在しない。そもそもですけど。予算の都合だったり、必要ナシと判断されたり、必要性をクライアントにうまく説明できなかった等、大人の事情で。

もう1つがプラグインとの整合性を取るため。プラグインのバージョンが古いため、新バージョンのWordPressに未対応というケース。プラグインのバージョンアップをすることで、プラグイン自体が動かなくなる(プラグインのファイルのコードをいじって仕込んだコードがバージョンアップによって消える)ケースも有りました。

WordPressのプラグインは、有志が開発してメンテナンスしているものがたくさんあり、無償で利用できます。WordPressにプラグインを入れるだけで機能が追加できるので、非常に多くのプラグインが使われています。

プラグイン自体がメンテナンスされなくなって、PHPの最新版に対応していないなどの理由で放置になっているものの、これを使わないとサイトの機能が充足されない。今まで使ってるプラグインから別のプラグインに乗り換えなくてはならないケースも有りました。

色々総合しても、WordPress本体を最新版に追従する運用コストを捻出することが、一番コストパフォーマンスが良いと思います。

WordPressを動かす環境もメンテナンスが必要

WordPressそれ自体はファイルの集合体です。最新版を落とせばWordPressの取得に成功します。

WebサイトにWordPressで作ったサイトを公開するためには、Webサーバやデータベースをセットアップして、PHPが動くようにして、SSL(通信の暗号化)などの準備が必要です。WordPressダウンロードしただけでは、何もできません。これらのソフトウェアもWordPress本体同様にバージョンアップがなされますので、最新版に更新していく必要があります。WordPress本体のバージョンが上がると、PHPの動作バージョンも上がります。

ソフトウェアのバージョンアップの大きな理由は、サポートの有無です。プログラム言語自体に脆弱性があったり、WordPress自体のプログラムに脆弱性があったりします。そのため、古いバージョンは最終的には捨てられてサポートから外されます。検切れの自動車に乗りましょうという話は、推奨できませんから。

WordPressの実行環境をまるごと貸してくれるレンタルサーバというサービスがあります。PHPやMySQLなどが用意されており、管理画面などから切り替えるだけで利用できます。その代わり、古いバージョンはどこかで切り替わります。VPSのように自分でインフラ構築した場合、OSのアップデートから何から自前でやるので、素直にさくらインターネットあたりのレンタルサーバでよいのではと思っています。

SSH・SFTPに代表されるサーバーへのリモートログイン・ファイル操作も注意が必要です。WordPressのセットアップをするためには、対象Webサーバに対してリモートログインができないと何もできません。レンタルサーバ推奨の環境や手順を使っているなら大きな問題はないでしょうが、VPSのように自分でOSの設定やアップデートをしていく必要がある場合、SSH周りの設定が甘いと非常に危険です。

忘れては行けないバックアップ

WordPressのバックアップ対象は大きく5つあります。

  1. WordPress本体
  2. WordPressテーマ
  3. WordPressプラグイン
  4. WordPressでアップロードしたコンテンツ
  5. WordPressのデータを保存しているデータベース

WordPress標準機能だとユーザーがアップした画像や動画、ファイルなどのコンテンツはwp_uploadsというフォルダに配置されます。WordPressをセットアップしたサーバと同じマシンに保存されます。データベースはWordPressと同じサーバに建てるケースもあれば、外部に建てるケースもあります。

バックアップは、オペミスがあった時に本当に救われます。日次でバックアップを取りましょう。もちろんその作業は自動化しましょう。AmazonのS3にまるっとバックアップしてくれるプラグインなどを活用するか、レンタルサーバなどでバックアップを取ってくれるサービスがあれば、それを使うなどしましょう。

WordPressは運用しにくいシステム

WordPressって運用しにくいITシステムの最たるものだと思っています。

WordPressには、コア、プラグイン、テーマ、その時作られたコンテンツや画像ファイルなど、様々なデータが存在します。これらを適切にバージョン管理するのは、かなり難しい。

WordPressのコアは自動アップデートされます。マイナーバージョンアップ等は自動でやってくれる。問題はプラグインで、プラグインを自動更新を有効にして更新後にユーザーに提供している機能が動かなくなった場合、ロールバックができない。3.4.5→3.5.0にアップした場合、3.4.5に戻す機能がない。

プラグインによっては、WordPressを運用しているデータベースに対して自分が管理するテーブルを作成したりするので(カスタムフィールドやアクセス解析、イベントカレンダー系はそう)、単純にファイルを切り戻しすれば良いものではない。

真面目にやろうとするなら、PHPのパッケージ管理システムであるComposerでバージョン管理するみたいな話になりそう。これなら、テーマ、コア、プラグインの3つはバージョン管理できそう。でも、作った画像ファイルなどは含まれない。

WordPressのロールバックはコア、プラグイン、テーマ、コンテンツ、データベースをまるごと固めてスナップショットを取って戻すしかないので、そういうプラグインを使うのが一番いいという結論です。小規模なサイトが多いので。冗長化構成にするなら、wp_uploadsを無効化してS3に上げるのが良いと思います。

テーマやプラグインの構成をローカルや開発環境で変えて検証して、それを本番反映するデプロイの手順も、まぁ面倒ですよね。Dockerライクにイメージを再生成してデプロイ一発みたいなのは、無いのよ。オリジナルのテーマぐらいならGit管理してPUSHしたらSSHからのrsyncで差し替えとかできる気はします。SFTP手運用でいい気がするけど。

ヘッドレスCMSが出てくる背景がわかった気がする

WordPressの持っている純粋なCMS機能だけ欲しく、そこはAPI連携だけできればいいよ、JSONちょうだいねこっちで勝手に差し込むわみたいな話だと、WordPress邪魔なだけだもんね。上記で書いた運用をその度にインフラエンジニアに該当する人が対応するみたいなのから解放される。運用コストの意味をわかっている場合は、どんどんHeadlessに移行するのではなかろうか。

再掲:WordPressの運用保守は素人の手には負えない

WordPressの継続的更新を放置して、サイト改ざんされたらかっこ悪いですよね。運用保守ってユーザーの目に触れない部分の話だから、お金をもらう理屈と言うか意味というか伝えにくい部分があるかもしれません。しかし、お金もらってないのに善意で動くのは、後々でトラブルのもとになります。

WordPressは運用保守が面倒なシステムのひとつ。ちゃんと上記の理論武装を使って、私達の仕事の意味を少しでも共有でき、歩み寄っていけたらと思います。