WordPress入門……?(2)

11 min read読了の目安(約10500字

非フロントエンドのエンジニアがWordPressに入門してみる。前回の続き。

https://zenn.dev/saiki_toshiki/articles/3134f250c1016b

Webサーバーの確認

Webサーバーの設定について確認し忘れていました。
今回はApacheベースのWordPressコンテナイメージを使用しているため、コンテナ内のApacheの設定を見ておきます。

root@00dbff533853:/var/www/html# ls -l /etc/apache2/
total 52
-rw-r--r--. 1 root root  7224 Mar  6 08:23 apache2.conf
drwxr-xr-x. 1 root root   187 Mar  6 08:23 conf-available
drwxr-xr-x. 1 root root    27 Mar  6 08:23 conf-enabled
-rw-r--r--. 1 root root  1924 Mar  6 02:58 envvars
-rw-r--r--. 1 root root 31063 Aug  8  2020 magic
drwxr-xr-x. 1 root root  4096 Mar  6 08:23 mods-available
drwxr-xr-x. 1 root root    67 Mar  6 08:23 mods-enabled
-rw-r--r--. 1 root root   320 Mar  6 08:23 ports.conf
drwxr-xr-x. 1 root root    54 Mar  6 08:23 sites-available
drwxr-xr-x. 2 root root    30 Mar  6 02:58 sites-enabled
root@00dbff533853:/var/www/html# cat /etc/apache2/apache2.conf 
(コメント行は省略)
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>
<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>
LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
root@00dbff533853:/var/www/html# ls -l /etc/apache2/conf-enabled/
total 0
lrwxrwxrwx. 1 root root 30 Mar  6 02:58 charset.conf -> ../conf-available/charset.conf
lrwxrwxrwx. 1 root root 33 Mar  6 02:58 docker-php.conf -> ../conf-available/docker-php.conf
lrwxrwxrwx. 1 root root 44 Mar  6 02:58 localized-error-pages.conf -> ../conf-available/localized-error-pages.conf
lrwxrwxrwx. 1 root root 46 Mar  6 02:58 other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf
lrwxrwxrwx. 1 root root 31 Mar  6 08:23 remoteip.conf -> ../conf-available/remoteip.conf
lrwxrwxrwx. 1 root root 31 Mar  6 02:58 security.conf -> ../conf-available/security.conf
lrwxrwxrwx. 1 root root 36 Mar  6 02:58 serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf

conf-enabledにいろいろあってすっきりしないですね……。こういうものでしたっけ?
/usr/shareってのも必要なんでしょうか? 今回はあんまり気にしないことにします。
.htaccessで制御するようになってるのはまあ仕方ないのでしょう。

なお、WordPressに関してfpmという名前の付いたコンテナイメージも用意されていて、少し調べてみたところ、Nginxと連携する場合はPHP-FPMという仕組みでUNIXドメインソケットを使って通信させればいいようです。
つまり、WebサーバーであるNginxコンテナとAPサーバーであるWordPressコンテナを分離して管理することができるということなので、実務で使うときはそちらのほうが良さそうです。

テーマの使用

使用するテーマは有名で評判の良いものを探します。有料だとSANGOとか?
無料で使えるものでは、以下の2つと判断しました。

  • Cocoon
  • Luxeritas

Cocoon

開発元の配布サイトに従ってインストールします。

https://wp-cocoon.com/
  1. 親テーマ、子テーマをダウンロード。
  2. WordPress管理画面から親テーマのzipファイルをアップロード。
  3. 辿ったリンクは期限が切れています。

……ファイルサイズが大きくて設定上限を超えているためエラーになるらしいです。
Docker版だと2MBという噂ですが、使用したzipは12.9MB。
エラーになるのはいいですけど、エラーメッセージどうにかならないのですか?

テーマのために上限を上げるのは気持ち悪いので、配布サイトのFAQの案内に従って低用量版(1.8MB)をインストールしてからアップデートすることにします。

  1. 低用量版のzipファイルをアップロード。(インストール完了)
  2. 子テーマのzipファイルをアップロード。(インストール完了)
  3. 子テーマ(Cocoon Child)を有効化。
  4. 親テーマ(Cocoon)をアップデート。

見た目が変わりました。

WordPress_Cocoon適用

そして管理画面に<Cocoon設定>というメニューが表示されるようになりました。

WordPress_Cocoon設定

なるほど、テーマが多機能というのはこういうことですか。
ここでいろいろテーマに付随する機能の設定を行えるのですね。すばらしいです。
試しにフッターの設定を変えてみると、ちゃんと変わっていますし、HTMLタグも反映されます。

WordPress_Cocoon_footer_before
WordPress_Cocoon_footer_after
WordPress_Cocoon_footer_after_2

メニューにはブログカードとかカルーセルとか、耳慣れない単語がありますが、Webデザインの世界では常識の範囲の言葉のようです。OGPやPWAは最近知りました。
ひとまずこんなところで次へ行きます。

Luxeritas

Cocoonに代えてLuxeritasをインストールしてみます。
どちらかというとこちらの方が本命のつもり。

  1. 親テーマ、子テーマをダウンロード。
  2. WordPress管理画面から親テーマのzipファイルをアップロード。
  3. アップロードされたファイルが php.ini の upload_max_filesize ディレクティブを越えています。

あれ、メッセージが親切になっていますよ?!
理由はよくわかりませんが、Luxeritasは5.5MB程度で代替もとくになさそうだったので、大人しく上限を引き上げることにします。
……ところがですね、サーバ内を検索してもphp.iniというファイルはありませんでした。
エラーになるのはいいですけど、エラーメッセージどうにかならないのですか?

root@00dbff533853:/var/www/html# ls -la /usr/local/etc/php/
total 144
drwxr-xr-x. 1 root root    20 Mar  6 03:05 .
drwxr-xr-x. 1 root root    17 Mar  6 03:05 ..
drwxr-xr-x. 1 root root    31 Mar  6 08:23 conf.d
-rw-r--r--. 1 root root 72382 Mar  6 03:05 php.ini-development
-rw-r--r--. 1 root root 72528 Mar  6 03:05 php.ini-production
root@00dbff533853:/var/www/html# cat /usr/local/etc/php/php.ini-development | grep upload_max_filesize
upload_max_filesize = 2M
root@00dbff533853:/var/www/html# cat /usr/local/etc/php/php.ini-production | grep upload_max_filesize
upload_max_filesize = 2M

おそらくphp.ini-developmentphp.ini-productionが使われているんでしょうが、あまりこんなところを触りたくないです。

wp-config.php内でini_set()すればいい、というような情報を見つけたので、頑張ってsedコマンドで書き込んでみました。しかし……ini_set()の値は反映されませんでした。
調べてみると、upload_max_filesizeは変更モードがPHP_INI_PERDIRとかいうのになっていて、ini_set()では変更できないようでした。
なお、設定値を確認するために、phpinfo()ページを作成したりしました。

.htaccessで設定できるそうですが、apache依存のやり方が嫌なので.user.iniで設定することにしました。

root@00dbff533853:/var/www/html# echo 'upload_max_filesize = 6M' > .user.ini

しかし……反映されませんでした。しばらく調べましたが理由がわかりません。悔しいです。

しかたなく.htaccessに書き込むと反映されました。

root@00dbff533853:/var/www/html# sed -i -e "1iphp_value upload_max_filesize 6M" .htaccess
root@00dbff533853:/var/www/html# cat .htaccess
php_value upload_max_filesize 6M
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。

# END WordPress

phpinfo_upload_max_filesize

手間取りましたが、これで無事テーマをアップロードできました。

  1. 親テーマのzipファイルをアップロード(インストール完了)
  2. 子テーマのzipファイルをアップロード(インストール完了)
  3. 子テーマを有効化

見た目が変わりました。

WordPress_Luxeritas適用

管理画面に<Luxeritas>というメニューが表示されるようになりました。

WordPress_Luxeritas設定

印象としては、CocoonよりもLuxeritasの設定画面がすっきりしています。

データの確認

DB

まずはDBについて見ておきます。

[centos@pmsv02 ~]$ sudo docker exec -it mariadb mysql -uroot -p
MariaDB [(none)]> use wp
MariaDB [wp]> show tables;
+---------------------------+
| Tables_in_wp              |
+---------------------------+
| wp_cocoon_accesses        |
| wp_cocoon_affiliate_tags  |
| wp_cocoon_function_texts  |
| wp_cocoon_item_rankings   |
| wp_cocoon_speech_balloons |
| wp_commentmeta            |
| wp_comments               |
| wp_links                  |
| wp_options                |
| wp_postmeta               |
| wp_posts                  |
| wp_term_relationships     |
| wp_term_taxonomy          |
| wp_termmeta               |
| wp_terms                  |
| wp_usermeta               |
| wp_users                  |
+---------------------------+
17 rows in set (0.001 sec)

MariaDB [wp]> select count(*) from wp_options;
+----------+
| count(*) |
+----------+
|      185 |
+----------+
1 row in set (0.007 sec)

Cocoonが独自のテーブルを5つ作成しています。
Luxeritasのほうは独自テーブルを作成しないようです。
どちらのテーマによるかはわかりませんが、wp_optionsテーブルのエントリーが増えています。

ファイル

WordPressのテーマというのが、スタイルだけではなくいろいろと「機能」を含んだものであることを知りました。
ということは、データはDBだけではなく、プログラムファイルも含まれるはずです。テーマのzipファイルの中身を見れば一目瞭然ですが。

[centos@pmsv02 ~]$ sudo docker exec -it wp /bin/bash
root@00dbff533853:/var/www/html# ls -l
total 212
-rw-r--r--.  1 www-data www-data   405 Feb  6  2020 index.php
-rw-r--r--.  1 www-data www-data 19915 Mar 13 19:24 license.txt
-rw-r--r--.  1 www-data www-data    20 Mar 17 14:52 phpinfo.php
-rw-r--r--.  1 www-data www-data  7345 Mar 13 19:24 readme.html
-rw-r--r--.  1 www-data www-data  7165 Mar 13 19:24 wp-activate.php
drwxr-xr-x.  9 www-data www-data  4096 Feb 22 15:10 wp-admin
-rw-r--r--.  1 www-data www-data   351 Feb  6  2020 wp-blog-header.php
-rw-r--r--.  1 www-data www-data  2328 Oct  8 21:15 wp-comments-post.php
-rw-r--r--.  1 www-data www-data  2913 Feb  6  2020 wp-config-sample.php
-rw-rw-rw-.  1 www-data www-data  3183 Mar 17 15:04 wp-config.php
drwxrwxrwx.  8 www-data www-data   112 Mar 17 16:22 wp-content
-rw-r--r--.  1 www-data www-data  3939 Jul 30  2020 wp-cron.php
drwxr-xr-x. 25 www-data www-data  8192 Mar 13 19:24 wp-includes
-rw-r--r--.  1 www-data www-data  2496 Feb  6  2020 wp-links-opml.php
-rw-r--r--.  1 www-data www-data  3313 Mar 13 19:24 wp-load.php
-rw-r--r--.  1 www-data www-data 44993 Mar 13 19:24 wp-login.php
-rw-r--r--.  1 www-data www-data  8509 Apr 14  2020 wp-mail.php
-rw-r--r--.  1 www-data www-data 21125 Mar 13 19:24 wp-settings.php
-rw-r--r--.  1 www-data www-data 31328 Mar 13 19:24 wp-signup.php
-rw-r--r--.  1 www-data www-data  4747 Oct  8 21:15 wp-trackback.php
-rw-r--r--.  1 www-data www-data  3236 Jun  8  2020 xmlrpc.php

ファイルの更新日付が3月(Mar)になっているものは、テーマのインストールによって更新されたものです。
wp-contentフォルダの中身やwp-includesの中身もそうで、この様子ではWordPress本来のプログラムとテーマが持つプログラムとをファイル単位で分離することはできそうにありません。
少し悩みましたが、/var/www/html以下の全てを永続化しておいて、WordPressのバージョンとテーマのバージョンを含めたデータとして管理するしかなさそうです。WordPressのアップデートもテーマのアップデートも、このディレクトリとDB以外には影響しないということであれば、コンテナを消した場合も復旧できるでしょう。

補足と感想

WordPressは世界的なOSSですが、LuxeritusはOSSとは雰囲気が違い、個人開発の無料ツールと考えたほうがいいようです。ページのフッターに提供元の表示を簡単に消せないように仕込んであり、消したければ有料プラグインを購入してねという姿勢です。個人が開発しなくなると更新されなくなると考えられるため、業務利用するには将来性に不安があります。
CocoonはGitHubを公開してプルリクエストも受け付けているようですが、やはり個人開発という点では同じでしょう。また、どちらも日本製なので世界的なコミュニティは形成されないと思われます。
じゃあそれで世界的によく使われるテーマみたいなのがあるのかというと、よくわかりません。

phpをちょこっと触ってみたのですが、WordPressのエラーをうまく出力することができませんでした。DEBUGモードにすれば標準エラー出力でdocker logsに出力されると思っていたのですが。
また、結局ちょっとこみいった機能的なことを開発しようと思えばあちこち触らなければいけなくて、テーマとかプラグインが絡んでいるとむしろやりにくいと感じました。簡単なコーポレートサイトやブログ程度であれば良さそうですが、ユーザーにログインしてもらってサービス提供するようなサイトとしては、慣れないPHPでレスポンスの遅いサイトを開発する意味はないように思います。

入門しようかと思って覗いてみたけどちょっと違うなーと感じました。
WordPressを試すのはここまでとします。