【WordPressのデータベース構造の中にある「wp_commentmeta」には、何が入っているのか】ブログをこれまで運営していて、気になったので軽く調べました

ただいまWordPressを構成しているDBについて、勉強しています。

ちょっとやりたいことがありまして、「そもそもどうなってんだろうな~」と、気になってしょうがないので・・・

興味は・・・ある方少ないかもしれません、めちゃくちゃお暇でしたらご覧ください。

まず、WordPressをインストールしたら、どんなテーブルが作成されるのか

WordPressのインストール直後の、まったくまっさらの状態。プラグインも何も有効化していない状態。

そんな状態では、下記の12個のテーブルが作成されていると思います。(2016/01/16更新:WordPress4.4.1の場合。)

※「xxxxxx_」の部分はWordPressインストール時に決めた「接頭辞」です。

  1. wp_xxxxxx_commentmeta
  2. wp_xxxxxx_comments
  3. wp_xxxxxx_links
  4. wp_xxxxxx_options
  5. wp_xxxxxx_postmeta
  6. wp_xxxxxx_posts
  7. wp_xxxxxx_terms
  8. wp_xxxxxx_termmeta
  9. wp_xxxxxx_term_relationships
  10. wp_xxxxxx_term_taxonomy
  11. wp_xxxxxx_usermeta
  12. wp_xxxxxx_users

ずらっとありますね。ずらっとあるだけで、たいしたことないです。

今回はこの中のひとつ、「wp_xxxxx_commentmeta」テーブルについて、中身を見てみました~。

「wp_commentmeta」テーブルに入っているもの

早速ですが「wp_commentmeta」テーブル内には、

  1. meta_id
  2. comment_id
  3. meta_key
  4. meta_value

と、合計4つのフィールドがあります。

meta_idは一意で自動採番、comment_idはmeta_key,meta_valueと紐付けるものとして、それぞれデータが入っています。

ここを自分が理解するため、もっと具体的に書きます。じゃないと私自身が忘れてしまうんで・・・

例えば下の例のような感じです。

同じcomment_idに対して、meta_key,meta_valueが紐つけられている

こんな仕組みなんだなぁ~、と理解を済ませたところで、これまで私がブログを運営している中で、どんなデータが蓄積されていったのか。

ちょっと調べました。

Akismetプラグイン関連のデータ

WordPressのコメントスパムを判別してくれる有名なプラグイン「Akismet」に関するデータが入っていました。

「meta_key」に入っているデータとしては、

  • akismet_user
  • akismet_history
  • akismet_result
  • akismet_as_submitted

でした。また、例えばある「akismet_history」の「meta_value」を覗いてみると、以下のようにakismetがコメントをどう処理したのか、って情報が入っていました。

a:4:{s:4:"time";s:13:"xxxxxxxxx.xx";s:7:"message";s:50:"Akismet はこのコメントを破棄しました";s:5:"event";s:9:"check-ham";s:4:"user";s:0:"";}

akismetプラグインで「スパムコメントと判断したんで、破棄しましたよ~」って書いてくれていますね。

Disqusプラグイン関連のデータ

私はある時期まで、disqusのコメントシステムを利用していました。ですので、下のようなdisqus関連のデータが「meta_key」に入っていました。

  • dsq_post_id
  • dsq_parent_post_id

具体的なデータ「meta_value」は、数桁の数字が入っているものと、空欄のもの。disqusのシステムとさらに紐づいている、と考えるのが自然でしょうかね。

今回は深く調べる必要ないかな、と思ったのでここまでって感じです。

livefyreプラグイン関連のデータ

またまたこちらも、以前はコメントシステム「livefyre」を利用していましたんで、

  • livefyre_cmap_12345678
  • livefyre_amap_123123123

といったデータが「meta_key」に入っていました。

livefyreは、twitter,facebookページでの言及まで取得して表示できるという、とてもよいものだったんですが・・・人気なのか、動作が非常に重い。なので、泣く泣くはずしました。

こちらもdisqus同様、「meta_value」は、livefyreのシステムと紐づいていると理解するのがいいっぽいですかね。

既に使用していないので、追及はここまで。

ただ、仕組みは面白いので後ほど解析できればな・・・と思っています。

Jetpackプラグインの「コメント」関連のデータ

jetpackプラグインのコメントを利用してコメントすると、下記のデータが「meta_key」に入るようです。

例として、「hc_post_as」には

  • twitter
  • facebook
  • jetpack
  • wordpress

と、以上のデータが入っていました。これは、「コメントする際にどのアカウントでコメントをしたのか」という情報の元になるものでしょうね。

下の画像のように、どのアカウントでコメントをするか選択しますよね。

jetpackプラグインでコメントを入れるとき

というわけで、この「hc_post_as」を含めると、

  • hc_post_as
  • hc_avatar
  • hc_foreign_user_id
  • hc_wpcom_id_sig

のデータが入っていました。

具体的に例えば、「hc_post_as」で「facebook」の値が入っていた場合。「hc_avater」はfacebookのgraph apiで取得されたアイコン画像のURLが入っていました。

2015/12/25追記:「hc_」の接頭辞の意味はなに?

Jetpackのコメントシステムは「highlander-comments」を利用しているので、接頭辞が「hc_」ってことなのかな、と、ひとまず理解しました。

コメントをゴミ箱に入れたときのデータ関連

コメントをゴミ箱に入れる事で作られるデータのようです。

  • _wp_trash_meta_status
  • _wp_trash_meta_time

これ、よくわからなかったので、実際にやってみました。

例えばゴミ箱にコメントを入れると、「_wp_trash_meta_time」には10桁のUNIXタイムスタンプがデータとして入ります。

さっき、コメントをテストでゴミ箱に入れてみました。すると、「1358758791」という10桁の数字が入りました。

この10桁の数字をわかりやすい時刻に変換すると、

2013/01/21 17:59

となります。なるほど~って感じですね。

まとめ

ここまででわかったのは、

  • WordPressをインストールすると、まず12個のテーブルが作成される。
  • テーブルの1つ「wp_xxxxx_commentmeta」テーブルには、4つのフィールドがあって
  • 今まで使用したコメントシステム等々の情報や、ゴミ箱に移動した時のステータスなどのデータが入っている

ということでした。

もちろん、この「wp_xxxxx_commentmeta」に入っているデータは、皆さんそれぞれWordPressを構築している環境によって違うと思いますが、こうやって少しずつですが理解していくと「なんだ~、そんなに構えることないじゃない」って思えたりもします。

この調子で次のテーブルも理解していきたいですね。

DBを好きに操るのも近い将来だな!と手ごたえは感じてます。

著者:bouya Imamura