2016/10/18 21:28:20

wordpressのデータベースをデータベース管理ツールで覗いてみる方法

目次(クリックするとジャンプします)
  • 1:wordpressデータベースへのいざない
  • 2:Adminerを使ってみる
  • 2.1:AdminerはphpMyadminより手軽
  • 2.2:Adminerのダウンロード&インストール
  • 2.3:データベース管理ツール使う上での注意
  • 3:Adminerの使い方
  • 3.1:データベースの見方
  • 4:wordpressのデータベースを覗く
  • 4.1:wordpressのデータベーステーブル
  • 4.2:wordpressのデータ構造
  • 4.2.1:wp_postsテーブル
  • 4.2.2:wp_termsテーブル
  • 4.2.3:wp_term_taxonomyテーブル
  • 4.2.4:wp_term_relationshipsテーブル
  • 4.3:リレーショナルデータベースたる所以
  • 5:まとめ

wordpressデータベースへのいざない

wordpressのカスタマイズをしていると、データベースってどうなっているのかなと気になりだす時が来ます。 今回の記事ではwordpressのデータベースを覗き見する方法を紹介したいと思います。

wordpressが使うデータベースはおおよそMySQLだと思うので、データベース管理ツールを入れて覗き見するのがいいかと思います。もちろんコマンドラインからも見れるのだが、「見る」ともなればGUIの方が胃にやさしいです。

Adminerを使ってみる

AdminerはphpMyadminより手軽

データベース管理ツールで有名なのはphpMyadminです。しかしphpMyadminのインストールは少々面倒。ファイルがいっぱいあったり設定をいくつもしないといけなかったりします。

今回のようにちょっと確認するというだけの使い方で苦労をしたくないです。そこで「え~phpMyadmin?」派に人気なのがAdminerというデータベース管理ツールです。

このAdminerは1ファイルだけで構成されています。インストールもただ置くだけ。セキュリティにも優れているし、phpMyadminよりも動作が軽いです(と思う)。phpMyadminの方がリッチではありますが、ライトな使用にはAdminerで十分です。

そんなわけで今回はAdminerを使って説明していきます。

Adminerのダウンロード&インストール

Adminerのダウンロードは以下のページ。

Adminer – Datebasemanagement in a single PHP file

65

ページ中腹にダウンロードリンクがあります。 Adminer 4.1.0でも構わないのですが、MySQLでの使用しか考えないので、より軽いMySQL専用版をダウンロードすることにします。

66-2

Adminer 4.1.0 for MySQL (.php, 286 kB)をクリックするとSourceForgeリポジトリに遷移するので、ちょっと待てばダウンロードが開始されます(SourceForgeには変な広告が貼ってあるので間違ってクリックしないように)。

66

ダウンロードされたPHPファイルをサイトの公開範囲直下(wordpressサイトであればindex.phpや.htaccessなどが置かれているところ)にFTPなどで置きます(置く場所はどこでもよさそうだが一般的には直下に置くようだです)

67

アクセスはドメイン+ファイル名。もしAdminer 4.1.0 for MySQLをダウンロードしたのなら、「http://hoge.jp/adminer-4.1.0-mysql.php」となります。ファイル名を変えても動くので、任意のファイル名を与えても構いません。

アクセスすると言語は勝手に日本語になっているはずです。またデータベース種類はMySQLのままでOK。

フォームで(データベースの)サーバ、(データベースの)ユーザ名、(データベースの)パスワード、データベース(名)を聞かれるので適切に入力するとログインできます。

68

画面デザインは非常に簡素だが、CSSでデザインを変えることもできます。公式サイトにはそれ用のスキンCSSが置かれているので、試してみてもいいかもしれません。

データベース管理ツール使う上での注意

ツールを使うとデータベースが簡単に覗けますが、裏を返せば簡単に編集出来てしまうということです。Adminerでもテーブル・カラム・データの削除や変更を行うことはたやすいです。

その為不用意に操作して大事なデータを消さないように注意をしてほしいと思います。できれば念の為データのバックアップを取っておくことをお勧めします。もし本記事を参考にしてデータベースを覗いてみて、データを失っても責任は負いかねるのでご了承頂きたいと思います。

Adminerの使い方

データベースの見方

Adminerでのログインがされると以下のような画面が現れると思います。これがデータベースの中身です。中央に表がありますが、このwp_から始まる名前の項目はテーブルというものです。データベースではテーブルがいくつも関連しあってデータ構造を形作っています。

77

※wordpressのインストールに仕方によってはwp_xxxxx_commentmetaのようなテーブル名になっているかもしれません。xxxxxxの部分はテーブル接頭語というもので、テーブルを判別しやすくする名前のことです。データベースが一つしか使えない場合でマルチドメインだと、サイトごとのwordpressでテーブル名がかぶってしまうことになります。その為にテーブル接頭語をつけてユニークなテーブル名にするのでです。

テーブルを一つクリックすると(例ではwp_postをクリックしている)、そのテーブルの構造画面が現れます。この画面ではテーブルがどのような項目を持っているのか、またその項目はどのようなデータ形式で格納されているかなどが判るようになっています。

80

82

今回はデータを見るのが目的なので、この画面は特に気にしなくていいです。上部にデータというリンクがあるのでクリックすると、実際にテーブルに入っているデータを閲覧することができます。基本的にデータを見る操作はこれだけです。

83

テーブルの中には項目があり、そのことをColumn(カラム、列のこと)と呼びます。このカラムで情報が整理されている訳です。記録されているデータはRow(ロー、行のこと)一つが一件分という訳です。

83-2

wordpressのデータベースを覗く

wordpressのデータベーステーブル

wordpressのデータベースはデフォルトで11のテーブルで構成されています。これらのテーブルの関わりでwordpressのデータが管理されています。各テーブルの大まかな役割をまとめてみました。テーブルを確認するときの参考にしてほしいと思います。

テーブル名 役割
wp_commentmeta コメント自体に付属する情報が記録されています。主にはコメント系プラグインで利用されているようです。コメント系プラグインとしてはwordpressでスタンダードとも言えるAkismetではスパム認定したコメントの履歴などをこのテーブルに残しているようです。また手動でコメントを削除した場合の履歴もこのテーブルに残るようです。
wp_comments コメント文章本体の他、コメントが付けられた投稿、投稿主、投稿者のIP、コメントした日時、コメントのタイプ(pinbackかtrackbackか)などが記録されます。
wp_links リンク作成機能によるリンク情報が記録されます。@MINOはリンク作成機能を使ったことが無いのでちょっと疎いのですが、リンク作成機能自体が非推奨になっているそうなので、あまり気にしなくてもいいテーブルかもしれません。
wp_options 管理画面の「設定」による設定、すなわち一般設定、投稿設定、表示設定、ディスカッション設定、メディア、パーマリンク設定、その他プラグインの設定に関してがこのテーブルに記録されます。たとえばサイトURLであれば、「siteurl」と名前つけられ、それに対応するデータが記録されるようになっています。
wp_postmeta 投稿に使われているアタッチメント(画像など)、それらのメタデータやカスタムフィールドなど投稿に付随するメタデータが記録されます。
wp_posts 投稿タイトル、投稿本文、投稿日時などなど投稿に関する情報が記録されています。このテーブルにある項目は$postに格納される情報とほぼ同じになります。このテーブルには固定ページも投稿も一緒に入っておりposttypeで見分けられるようになっています。
wp_terms カテゴリ・タグIDと名前、スラッグ、カテゴリ・タグが属しているterm_groupが記録されています。このテーブルではどれがカテゴリでどれがタグかはわかりません。後述するwp_term_taxonomyによってカテゴリとタグの分類がなされます。
wp_term_relationships 投稿とカテゴリ・タグの関連付けの情報が記録されます。
wp_term_taxonomy カテゴリ・タグの分類やディスクリプション、親子関係、投稿での使用件数などが記録されます。
wp_usermeta ユーザーに関するmetaデータ。管理画面のユーザーで設定できる項目などが記録されます。
wp_users ユーザーに関する情報が記録されています。1人でサイト運営している場合はすなわち自分のwodpressでのデータのこと。

wordpressのデータ構造

いくつかのテーブルを見ていくことでデータベースの覗き方に慣れてもらえたらと思います。今回はwordpressで中心となるだろうテーブルを4つ覗きながら、データベースの仕組みも簡単に説明したいと思います。

wp_postsテーブル

903

データベースの中ではwp_postsテーブルがもっとも核となるテーブルでしょう。コンテンツの大本であり、サイトのデータそのものでもある。このテーブルには23のカラムが存在しています。

Column名 格納されているデータ
ID 投稿ID
post_author 投稿者
post_date 投稿日時
post_date_gmt 投稿日時グリニッジ標準時
post_content 投稿本文
post_title 投稿のタイトル
post_excerpt 投稿の抜粋
post_status 投稿の状態
comment_status コメント機能の許可・不可
ping_status ピンバックの許可・不可
post_password 投稿のパスワード
post_name 投稿のスラッグ
to_ping ピン先のURL
pinged ピンバックをしたURL
post_modified 更新日時
post_modified_gmt 更新日時グリニッジ標準時
post_content_filtered フィルター適用後のバッファー用途
post_parent 親子関係の投稿ID
guid 投稿URL(パーマリンクではなく?p=xxxの形式URL
menu_order 固定ページの表示順
post_type 投稿の種類(投稿、固定)
post_mime_type 投稿形式がAttachmentの場合のMIME形式
comment_count コメント数

注目してほしいのは、このテーブルの項目はループ内で投稿データを格納するグローバル変数である$postの項目と同じことです。つまり$postの正体とはwp_postsのrow一つ分ということなのです。$postについては「wordpressで重要なグローバル変数$postの中身の説明」を参照してもらえればと思います。

もし投稿データをざざっとみたいのなら、PHPで出力するよりも、データベースを確認した方が早い場合が多いです。

また、よく見てもらうとこのwp_postsテーブルではカテゴリやタグに関しての情報を持っていません。投稿データはカテゴリ・タグの情報は持たないように設計されています。一見投稿データにカテゴリやタグが結びついていないように見えますが、別なテーブルで管理されています。

wp_termsテーブル

900

Column名 格納されているデータ
term_id カテゴリ・タグのID
name カテゴリ・タグの名前
slug カテゴリ・タグのスラッグ名
term_group 親termのID

カテゴリ・タグはwp_termsテーブルに格納されています。ここではterm_id、name、slug、term_groupの項目があります。このテーブルでもtermがカテゴリなのかタグなのかはわかりません。また投稿とどのように結びついているのかも不明です。

wp_term_taxonomyテーブル

902

Column名 格納されているデータ
term_taxonomy_id/td> wp_term_taxonomyテーブルでのtermID
term_id wp_termsテーブルで記録されているカテゴリ・タグID
taxonomy termの分類(カテゴリかタグか)
description termの説明
parent 親termのID
count termが使われてる回数

termがカテゴリなのかタグなのかを記録しているのはwp_term_taxonomyテーブルです。このテーブルではwp_termsテーブルのterm_idにtaxonomy(カテゴリなのかタグなのか)やdescripton(termの説明)、親子関係、使用回数を結び付けています。しかしここでも投稿との結びつきはわかりません。

wp_term_relationshipsテーブル

901

Column名 格納されているデータ
object_id/td> wp_postsに記録されている投稿のID
term_taxonomy_id wp_term_taxonomyテーブルでのID
term_order termの表示順

投稿との結びつきはwp_term_relationshipsテーブルで管理されています。object_idは投稿のIDで、term_taxonomy_idはwp_term_taxonomyで格納されていたIDです。

今回の例ではobject_idはterm_taxonomy_idをキーにしてwp_term_taxonomyテーブルからデータを得て、term_taxonomy_idはterm_idをキーにwp_termsテーブルからデータを得ます。

リレーショナルデータベースたる所以

このようにデータを結び付けているのがリレーショナルデータベースのリレーショナルたる所以です。テーブル同士をキーとなるColumnで関連させデータ構造を作ることをデータモデリングといいます。データの設計だとイメージしてもらえばと思います。

データをうまいこと各テーブルにばらして格納することでデータをより自由に効率よく扱うことができるようになるわけです。

今、4つのテーブルの関係を見てきたが、他のテーブルもなんらかしらの関係を持っています。関係性に注目しながら、なぜそのような形でデータを格納させているのかを考えると、より深くwordpressの理解が深まるのではないかと思います。おそらカスタマイズのアイデアもたくさん出てくるようになると思います。

まとめ

今回の記事ではwordpressのデータベースを覗く為の導入編として書いたがいかがだったでしょうか?以外と簡単に覗けたのではないかと思います。

wordpressではそれほど複雑なデータ構造にはなっていませんので、データベースの勉強としてもうってつけだと思います。

冒頭でも書いたが、不用意な操作をしないように注意していただきたいです。データベースを直接見るのは、wordpressの関数からデータベースを触るのとはわけが違います。バックアップを取る、不用意な操作をしない、慣れないうちは閲覧だけに留めるなどが大事です。

あまり驚かすつもりはないですが、@MINOはデータベースを消したことがあります。いまでもトラウマです。

あと画像にぼかしがはいっているのはエッチなことが書いてあるのではなく、個人情報だからです。勘違いなさらぬように。