WordPressはいろいろコストが高すぎてお薦めできない

## WordPressを、専門じゃない人間が本番運用していけるか！？

ちょっとした情報サービスを作ろうと思い立って、数日間かけて[^aboutwhen]、個人でホスティングしているさくらのインターネットにWordPressをインストール[^aboutsakurainet]して、がっつり取り組んだ。
WordPressについては以前にも仕事で何度か使い、使うたびに苦労した覚えがある。

デザイン性や手軽さから人気のWordPressだが、商用サービスのコンテンツ提供CMSとして使うにはけっこうハードルが高い（重い）のでは、と以前から感じていた。今回の経験も含めていろいろ考察できたので、改めて問題・課題を整理し考察した。

[^aboutwhen]: 2018/10のことでした。
[^aboutsakurainet]: ちなみにさくらのインターネットでは、コントロールパネルを通して、実に簡単にWordPressをインストールが可能である。

:::note info
（2023/4 追記） 記事がちょっと古くなっているので少し文章を整えました、コンテンツの主たる内容は変えていないものの表現や段落構成などを推敲・手直しした形です。また、WordPressの公式HP自体、謳っている内容も変わってしまったので、これに合わせたWordPress紹介文章にしました。ご了承ください。
:::

## WordPressとは

https://ja.wordpress.org/

WordPressはPHP+MySQLベースのブログソフトウェア。CMSとして活用され、広く世界中で用いられている人気のOSSだ。
豊富なテーマとプラグインが魅力で、これらを適宜選択・インストールすることで、プロフェッショナルなデザインと機能を兼ねそろえたサイト制作が比較的簡単に行える。
テーマやプラグインは無償も有償もあり、周辺のマーケットも盛況である。100ドル前後のテーマを購入して見た目も綺麗なサイトが展開できるのだから、費用対効果も高いだろう。

## このドキュメントのゴール

**比較的小規模な開発チームが商用のコンテンツ記事を展開する場合に WordPress を選択するのはありかなしかの判断情報を整理したい**がこの記事のゴール。

WordPressを使う商用での業務パターンは、だいたい次のようなケースではなかろうか。
（SaaS/ASPなどでのWordPress自体の提供サービスを除く）

|対象| 業務タイプ            | 商用展開シーン         | 利用目的 |
|:--|:--|:--|:--|
|| ①ウェブコンテンツ制作会社  | 企業ページ / ECサイト | ブログ / CMS / ECサービス |
|| ②（個人の）ブロガー業務    | ブログ展開           | ブログ                  |
|:white_check_mark:| ③Web事業会社    　　　　　　　　　　　　　  | ホームページ/ウェブサービスサイト    | CMS |
|:white_check_mark:| ④アプリ・Webサービス開発会社 | アプリやサービスのLPなど/ウェブサービスサイト | CMS |

本記事の考察では、:white_check_mark: のついた ③、④ のケースについて考えたい。

①の場合はWordPressでの構築・運用の専門家でもあるので一定の形式知化が進んでいるという理由で、②も同様に個人的なノウハウや方法論を持っているだろうという見立てで、今回のケースから割愛します。

問題が大きくなりそうなのは、③と④の場合。
③は、多くても10数名ぐらいの比較的小規模でサービス運用をしている場合で、主たるサービスは別途システムとして運用しているものの、コアじゃないニュースやお知らせなどの静的なコンテンツを、うまくCMSなどを使って展開できないか模索・検討しているケース。
④も③と似たような人数規模間で、アプリやサービスのLPや、WebView表示される静的なHTMLコンテンツなどをうまくCMS管理できないかと検討している場合。

③と④のケースって世の中わりと多いのではないかなと思っている。何もノウハウがないまま最初から自分たちで導入の検討をするのは辛いと思うので、そのような場合の参考に資すればよいなと思う。


## WordPressのアドバンテージ

最初に、WordPressの良いところを確認しよう。
[公式ページ](https://ja.wordpress.org)の冒頭で次の３つがまずアピールされている。これらはそのままWordPressのアドバンテージと言ってよいだろう。

<dl>
<dt>「世界中で使われる最高の信頼」</dt>
<dd>（筆者解説）WordPressはテーマに基づいたデザイン駆動型のCMSです。かっこいいクールなデザインを簡単に選択・設定して自分のウェブサイトを作れる手軽さもあり、だいぶユーザーを伸ばしてきました。ユーザーは<strong>１からサイトのデザイン設計やコーディングをしなくて済み</strong>、カッコいいウィジットや便利なプラグインを<strong>ソースコードの開発やサーバへのアップロードなしに導入</strong>できます。個人のブログや企業のホームページ、簡単なLPから比較的大きなコンテンツサイトまで、いろいろなケースに活用できます。</dd>

<dt>「パワフルな機能」</dt>
<dd>（筆者解説）<strong>管理画面が強力で、拡張プラグインやウィジットによる機能拡張も、管理画面を通して一元的に管理できる</strong>のが強力なポイントです。コードを書くことなく、セキュリティの設定やSEO対策、レスポンシブでインタラクティブな画面、メディアファイルの管理と展開といったことができるので、うまく使えばすごく楽ちんに素敵な綺麗なサイトの管理ができるはず。<br />（ただ、ここで謳っている「高度なセキュリティ」は、何を持って高度なのかちょっと不明なので、言及ができない。<br />）&nbsp;</dd>

<dt> 「コミュニティ」</dt>
<dd>（筆者解説）全世界でのユーザーも数多く抱えているWordPressは、そのコミュニティも活発・充実している。クールなテーマやプラグイン、使いやすいウィジットなどをうまく作ることができれば、それを販売することでマネタイズもできる。<strong>いろいろなビジネスチャンスに繋げられるツール</strong>でもあり、コミュニティが充実するのも必然であろう。<br /></dd>
</dl>

この他、次のような利点もある。

- **歴史があり、だいぶ"こなれた"ソフトウェアである**。インターネット上でたくさんの記事やフォーラム、トラブルシュート情報も見つけられ、サポートやアドバイスも見つけやすいだろう。
- **導入が楽**な場合が多くなっている。ASPやSaaSとして提供されていることもあるし、筆者が使ったさくらインターネットもそうだが、ボタン一発で導入可能になっている場合もある。
- **デザイナやディレクター職でも導入、設定、カスタマイズが可能**。サーバ設定やプログラムを知らなくても、環境が準備できれば WordPress でサイトを管理が可能である。

&emsp;§&emsp;§&emsp;§

さて、これら利点は費用対効果も高そうであり、上流での意思決定にも影響を与える要素だ。実際 WordPress は完成されたシステムであるし、使いこなせばかなり強力だ。

そう”<strong>使いこなせるかどうか</strong>”が問題なのである。

## WordPressの課題

ここからは WordPress を実際に運用する際に考えるべき課題を整理していく。

WordPress の課題を一言で表すと、ずばり**管理にとにかくコストがかかる**ことである、と私は考えている。
ここでいうコストは、直接的な金銭コストというよりは、理解と要領を得るのに必要な時間と労力という学習、運用、心理的なコストの側面が強いのだが、結果的にはそこに時間やリソースを割くことで金銭的なコストには繋がっていく。

以下、なぜコストがかかるのか、その原因となる課題を整理していこうと思う。


### 「管理者」の課題

**管理者の負担がすごく大きくなる**のが WordPress の管理の特徴の１つである。WordPressの設計上、管理者に権限を集めすぎているのが問題とも言えるのではないかと考えている。

#### 管理者のスコープが広い問題

WordPressのユーザー権限にはいくつか種類があるが、あまりよろしくないことの１つに「管理者」というこの１種類にフル権限が与えられている。

| 管理対象 | 内容 |
|:-:|:--|
| 基本設定      | ・サイト基本情報<br>・サーバ設定<br>・セキュリティ設定     |
| テーマ        | ・デザインやレイアウト、サイト基本情報、ウィジットの設定      |
| プラグイン     | ・機能拡張<br>・ウィジット<br>・サイト設定系             |
| カスタマイズ    | ・テーマやテンプレートのカスタマイズ（コーディング）         |
| ユーザー       | ・ユーザの追加・変更  |
| 投稿内容の管理  | ・投稿記事の管理もできるが、そこにポストされるコメントなどの管理 |


表を見るととわかる通り、管理者の管理内容には、大別して **「デザイン」に関する設定** と、デザイン以外のサービス・運用設定といった **「システム」に関する設定** の２つがある。

```math
WP管理者の管理内容 = \left(デザイン的な管理\right) + \left(システム的な管理\right)
```

デザインに関する設定は、テーマの選択はもちろん、そのテーマの基本デザインやレイアウト的な設定、ウィジットの管理、関連するプラグインの設定といった、完全にデザインマターな内容。ページ全体のデザイン性や配置・配色などのレイアウトを考えながら、デザイン要件に合わせた設定や調整を行う仕事である。

一方デザイン以外のシステム設定は、サイトのセキュリティ設定だったり、ユーザー管理だったり、デザイン以外の機能拡張のプラグインの設定などである。支払いのエスクロー関連、SSL設定、認証設定有害なコメントなどの排除といったセキュリティやネットワークに関する設定もそうだし、固定ページなどのコンテンツ管理、時にはサーバやDBの運用管理などもするのではないだろうか。デザインに全く関係ないサービス維持や運用面の内容になるだろう。

この**異なる２軸の設定管理を「管理者」という１つの権限に委ねているのが、業務分掌の点からすごく問題でもある**。
ガバナンスや監査の観点から言うと、デザインのために管理者権限を与えられている「管理者」ユーザーがなんでも設定できちゃうので、セキュリティアセスメントの際の問題ともなりうる。
せめてデザイン管理に関しては、もう１つ権限レベルがあっても良いと思うところ。


#### 管理者のアサインが難しい問題

上で、異なる２軸の設定管理を「管理者」という１つの権限に委ねられてしまうと書いた。
たいていの管理者は、デザイナ寄りかSE寄りかどちらかの人間なので、この２軸を管理しなければならないことは、**管理者負担が大きくストレスを生じさせやすい**。

デザイナ寄りな管理者ならば、テーマやウィジットのプラグイン管理は設定しやすいが、それ以外の設定に関しては誰かを頼ったりとかあるだろう。セキュリティやシステム的なことの責任を彼らにお願いするは酷だ。
SE寄りな人ならば反対に、デザインについてはデザインの責任者にいちいち確認しながらでないと設定が進まない。同様にデザインやレイアウトに関して問題がないことの担保をお願いするのは、難しい。

人員や開発リソースに限りがある環境では、**管理者を一元的にするか複数人に分散させるか、デザイン面の管理とシステム的な管理とをどう安全に管理するか**という課題が発生するだろう。これはつらたん。


#### 管理者の属人化解消の課題

管理者がいろいろなトライ＆エラーを経て得たノウハウは、当然ながらその運用で生かされてくる。

ただあまり管理者頼みになってしまうと **属人化運用** や **シングルオペレーション** になってしまうので気をつけよう。特に忙しい状況や設定が沼な状況など、”誰かよく知っている人”に任せてしまいがちになるのも開発・運用の常であるので、注意が必要である。

そうならないように人を多めに割り当てたり、知識を共有化・形式知化するドキュメント活動といった対策も考えられるが、リソースに限りのある開発現場ではすぐに実践できない場合もあるだろう。「そのうちやらなければ」のまま、WIPやTODO・TOBEなステータスまま放置されないよう、ノウハウの維持管理に関しても注意を払っていきたい。



### 設定の煩雑さの課題

管理画面１箇所で一元的に管理ができるのが WordPress　の強みである一方で、**管理に必要なノウハウがちょっと多い**のでは…というが私の印象でもある。
丁寧に解説されていると良いのだが、以降に書くように導入するテーマやプラグイン（の作者）に寄るところも多いので、苦労は絶えない。

#### 管理内容がダイナミックに変化する

使い始めると分かるが、まず管理画面のどこで何が設定できるかを把握する学習がまず必要。これはまあイニシャルコストとしては仕方がないだろう。

ところが困ったことに、**どこで何が設定できるかは、導入したテーマやウィジット、プラグインによって変化**してしまう。導入したものの影響で管理用メニューが増え、既存の設定内容が導入したウィジットやプラグインによって適宜変更される場合もある。それら設定の機微を、管理者はうまく把握・コントロールしなければならない。

テーマによっては「あらかじめXXXというプラグインを導入せよ」と指定しているものもあり、すでに入れているものとの競合も発生し得る。
プラグインが互いにメニューを追加しあって、しまい結果的に同じ効果が別なメニュー・選択肢として存在しまう、といったこともあったりする。

まとめよう。管理者は **導入したテーマやプラグインの設定で、何が設定できてどう設定すべきか、などの情報を含めて管理しなければならない**。面倒をみる項目が少ないならまだなんとかなるかもだが、いろいろ導入したサイトでこれの管理は、正直辛い。


#### システムの変更管理・バックアップは自前構築する必要がある

投稿記事ならばWordPress側でリビジョン管理をしてくれるので、何が誰によってどう変更されたかなど追っていける。
しかし、テーマやプラグインの導入、設定、カスタマイズ内容など、**設定の変更内容の記録と履歴は、WordPressは管理してくれない**。必要に応じて自分たちで管理しなければならない。
特にテンプレートのCSSやPHPコードをカスタマイズした場合などは、変更修正を管理・記録することが必要だろう。Git系ツールなどでチーム管理するなど何かルールや手続きを整えておいた方が得策だろう。

WordPressのイケてないことの１つに、設定内容がファイル（wp-config.php）とDBに分かれているというのがある。バックアップを取るならばそれぞれで取らなければならないし、リストアもそれぞれで行う必要がある。場合によってはDBのバックアップ用バッチを書いたりなどあるのかもしれない。そのバックアップの運用管理も多少は整理が必要になってくるだろう。


#### 管理の設定工数を見積もりしにくい

とあるテーマの導入やプラグインの設定などを考える。
デモを見ると、イマジネーションを掻き立てながらぬるぬる動いている、素敵なテーマだ。
インターネットでも情報も多そうだし、紹介文を見る限りではそれほど導入も難しくなさそうだ。当然そのテーマも関連プラグインも、管理画面から検索してインストールもできる。
管理画面での設定内容も、おおよそ把握できていて、大抵のことは設定できるようになっている。
なので、きっとこう考えるだろう。
　「ま、長くても1人日程度で、設定も含めてうまくテーマが導入できるのではないかな」
…残念ながら、この見積もりは失敗するケースが多い。
次のような問題が発生し得る。

##### ○テーマの品質が一定ではなく、想定通りに設定が進まない

<strong>テーマ導入に場合によってはすごく時間がかかる</strong>。ドキュメントが無かったり足りなかったり古かったりするテーマもよくある。導入してから初めて、期待していた機能がないとわかる場合もある。デモの再現に困難をきたし、できない内容をどう解決するかを調べて試し、とやっている間に、想定工数があっという間に過ぎたということ、みなさん経験はないだろうか？ 私はある！
特定のプラグイン導入を前提にしているテーマもあり、そのプラグインの導入・設定に関しては「よしなによろしく〜」と説明を省いている場合もよくある。さらに、そのプラグインがすでに公開終了している場合だってある。とほほ。
デモどおりの動きをさせるのになんでこんなに挫け心が折れるのか！？ きっとこの辛い体験をしたのは私だけではないだろう。[^uninstallabledemo]

[^uninstallabledemo]: だいぶ前の話ではあるが、何度もNGやリテイクをくらった。正直もう２度とやりたくないｗ だいたい会社で仕事をする場合、テーマの購入者とサイト管理者は別になるケースがあるが、WP自体そういうケースは考えておらず、DLしたデータの管理や引き渡しからして難儀する…

##### ○海千山千のプラグインの中から、ベターなものを選定する必要がある

プラグインもテーマと同じ問題をはらんでいる。加えて、似たり寄ったりのプラグインが多く、<strong>選定にコストもそれなりにかかる</strong>。目的の機能があるか、信頼できる製作者か、メンテされているものか、他と比較してどうか、などなどだ。
<strong>陳腐化もよくある</strong>。テーマのドキュメントで導入しろと案内されているプラグインや、インターネットの情報頼りに探したプラグインがすでに公開終わっていたり、とか、バージョンの互換性が保証されていなかったりとか。途方にくれてしまう。
<strong>はっきりわからないフリーミアムモデルの問題もある</strong>。無料と思って導入したら実は有償アップグレードしなければ必要な機能が提供されないって場合も多い[^freemiumproblem]。

[^freemiumproblem]: 管理画面上のプラグイン説明や公開されているドキュメントで、どこからどこまでが無料が有料をちゃんと説明していない場合は多い。

##### ○テーマをカスタマイズするのが難しい

”WordPressはなんでもできる”と考えているディレクターとお仕事した時の話。「このテーマをカスタマイズしてここにスライダー入れて」とか、「この条件のときだけパララックスになるようにして」とか、そいういう指示を受けたことがある。どうやらいつのまにか客先とそういうデザイン仕様で合意をしてきたらしかった。SAN値が著しく削られた…
テーマが提供しているデザイン以外のことをカスタマイズでやろうとすると、とても手間がかかる。多量の`!important`を有するCSSを書いたり、場合によってはPHPコードの方も修正したりと、あまりいいことはない。
テーマのカスタマイズが無いよう、開発の最初の段階で方向性の合意ができていれば幸いである。



### 課題のまとめ

管理の課題をまとめると、こんな感じだ。

| 課題 | 課題内容 | 主な問題点 |
|:--|:--|:--|
| 管理者のスコープの課題   | デザイン側管理とシステム側管理が「管理者」という１権限に委託 | ・ガバナンスやセキュリティアセスメントの問題|
| 管理者のアサインの困難性の課題 | 1人に一元管理か複数人での役割分散か、デザイナー側が管理すべきかSE側が管理すべきかか        | ・有限リソースの中での調整の困難性 |
| 管理者の属人化解消の課題 | 管理項目が複雑なため（理解者が限られてしまうため）属人化が発生しやすい | ・管理者の負担増大<br>・ノウハウの形式知化の方法 |
| 管理内容がダイナミックに変化する課題 | テーマとプラグインに応じて管理項目が変化する。 | ・管理項目の増加<br>・設定内容の依存性問題|
| 変更管理・変更履歴・バックアップの課題 | システム的な変更管理のルール（方法や履歴）、バックアップは、自前で準備する必要がある | ・開発方法<br>・情報管理の方法<br>・PHPファイルやDBのバックアップ方法の確立<br>・リストア方法の確立 |
| 設定工数が見積りにくい課題 | テーマやプラグインの品質などに影響されて、調査や設定工数が増加しやすく、見積り難い | ・テーマやプラグインが期待通り導入・機能しない<br>・テーマやプラグインの陳腐化<br>・プラグインの追加検討の発生 |


### 管理の課題の１つの解決案

管理者の管理しなければならない範囲は、広く、多い。
もし解決策を図るのであれば、管理者は1人にアサインするのではなく、役割ごとに管理する人間数名で、管理担当を分割しながらするのが良いではないだろうか。
属人化しないよう、シングルポイントにならないよう、管理範囲をある程度重複させることも必要だろう。
PMやディレクターは、こういった点を考慮して、うまく負担を分散し、人的な冗長化を図っておきたいところ。


### その他の課題

管理の課題の他に、商用サービスとして展開する場合に想定される課題を挙げる。

#### 可用性とスケーラビリティの課題

**WordPressを使ったサービスの冗長構成化にベストプラクティスはない**。
WordPressのレイヤー外のインフラ的な設計の話だが、やり易いかどうかという点ではやりにくいだろう。**自分たちで冗長化手段を考え動作を担保する必要がある**。

WordPressの基本設計方針は1サーバ＋1DBを想定している。複数サーバを使った運用は想定されていないので、可用性やスケーラビリティの問題解決が自分たちで解決する必要がある。

- 冗長化問題
    - インスタンス間の設定ファイルなどの同期の課題。
    - 投稿された画像ファイルなどの同期（保存方法）の課題（共有ストレージなどか）。
    - DBの冗長化と同期、フェイルオーバー時の切り替え方法などの課題。
    - バックアップ、リストアの方法。
- スケーラビリティ問題
    - 基本的に動的コンテンツを提供するので、ある程度の**サーバスペックは必要**。
    - 静的コンテンツ化、CDNの活用などの検討。

#### セキュリティ要件の課題

WordPressの大きな問題の１つとしてセキュリティの問題がある。なんせ**問題の発生頻度がわりと高い**。

##### セキュリティに関する基本方針が甘い

コアな部分の脆弱性対応以外は、あくまで**コンテンツ提供側（管理者）に任せるスタンス**。必要なアップデートやプラグイン導入などでうまく安全管理してってね、というようだ。
この方針も、**管理者の負担が増えてしまっている要因の１つ**だ。

- セキュリティ対策としての**プラグインへの依存度が高い**。
    - たとえば、**未だに、HTTPベースのログイン画面がデフォルトで、恐ろしいことにHTTPSでないことにWordPressからは警告などは一切表示されない**。
    - サーバ設定やセキュリティ管理に明るくない人間が、**ログイン画面・管理画面について、HTTPポートを閉じてなかったり、サーバ認証やIP制限を入れずに誰でもアクセスできる状態で商用運用している、といったケースも実にあるある**だ。
    - 常時HTTPS化や管理画面のアクセス制限とかはプラグインでも提供されていたりする[^5]。
    - そういう**セキュリティ周りについて、適切に、効率的に管理できるかどうかは、管理者次第**。

[^5]: さくらのインターネットでは、[専用のプラグインを用意している](https://ja.wordpress.org/plugins/sakura-rs-wp-ssl/)。

##### 明らかにデフォルト値がおかしいだろうってこともWordPressあるある

脆弱性問題で記憶に新しいのが、次のREST APIの問題。デフォルトにするのおかしいだろうってツッコミたくなる。
[『WordPress REST APIの深刻な脆弱性について』 - GMOクラウドの脅威・対策ページから] (https://saas.gmocloud.com/service/websecurity/threat/wordpress.html)

その他、ログインIDやメールアドレスが普通に記事中に晒される設定になっていたり（テンプレによってはハードコードされていたり）、コメントやトラックバックPing設定がデフォルトでONになっていたりと、昨今のセキュリティ意識をあまり反映していない印象が多い。


##### セキュリティアップデートできない場合もありうる

WordPressコア、テーマ、プラグインのアップデートは管理画面で簡単に行えるが、**テーマやプラグイン自体の問題やバージョン互換性の問題が解決されるかどうかは、その作者次第だ**。OSSのしょうがないところでもある。
WordPressがプラグインに依存することが多いシステムである以上、どうしてもこういうケースはある。プラグインの導入の是非を含めて、管理者（やプロジェクト）の適切な判断が必要になってくる。


## （まとめ）WordPressは気軽に商用サービスでの利用を薦められるか

以上、WordPressの課題を、問題となっている具体例を元に挙げてきた。

冒頭の方で区分した③Web事業会社や④アプリ・Webサービス開発会社の小規模なプロジェクトで、リソースをあまり割けない規模のプロジェクトが、商用サービスのCMS管理にWordPressをほいほい手軽に利用できるか、という点では、私の考えてはイエスとは言えない。トライ＆エラーができない状況であればあまり**お勧めはしない**。

もし利用するのであれば。最小限のウィジットやプラグインを用いてできるだけコンパクトに設定を維持するなどの、運用上の工夫が必要。
または、自前でのシステム運用コストやトラブルシュートへの懸念を持つのであれば、ASPやSaaSサービスなどを使う選択肢も検討したほうが良いだろう。

WordPressは完成されたシステムと言えるのだが、管理コストがかかるし、冗長化やスケーラビリティ設計に弱い、というのが私の結論である。

（以上）