WordPress、以前は編集画面が重くて使い辛かったのですが今では快適になり、普通に記事を書くだけならウェブから編集するのが断然楽です。でも時々、書いたものを後でまとめて編集する必要が出てきたりします。前の記事 WordPress カスタムフィールドテンプレートで便利だけど肥大化 の続きです。
前の記事: WordPress カスタムフィールドテンプレートで便利だけど肥大化
WordPress管理画面からCSVの入出力
カスタムフィールドやタクソノミーなどが多く含まれてると、ちまちま編集するのが面倒で「表計算ソフトでちゃっちゃとまとめて編集できないものか」と誰しも思うでしょう。Wordpressのデータベースを弄る訓練を受けていない私のような人なら尚更です。
そこでプラグインを探してきてCSVによるWordpressの出力と入力を目指すわけですが、そのためのプラグインもあります。
エクスポート
WP All Export
WP All Export は、エクスポートする項目を選んでセットを保存出来るタイプです。これ結構良いです。カスタムフィールドやカスタムポスト、タクソノミーにも対応していますし、書き出すパターンを保存できるのが便利。好きな項目を好きなようにセットして保存できます。IDとタイトル、カスタムフィールドひとつだけ、とかフルセットとかいろいろ自由ですし再利用も楽です。
欠点は1行目に付く項目名がwordpressのデータベースと同じじゃないので、インポートのためにすり合わせの作業が必要なことぐらいです。
WP CSV Exporter
WP CSV Exporter もいいと思います。1行目に付く項目名がWordpressのデータベースに準じているのでインポートの時も作業が楽です。
欠点はカスタムポストに対応するのが有料版であることくらいです。
WP All ExportとWP CSV Exporterはそれぞれ完全に一長一短、私は両方をインストールし、必要に応じて使い分けていました。
インポート
さて、エクスポートして編集するとこんどはインポートしたいわけです。インポートのプラグインもいろいろあります。
WP All Import
WP All Export の姉妹品、インポートの WP All Import です。WP All Exportと同じように使いやすくてよいプラグイン・・・ですが、こちらはがっつり有料オプションが必要になってきます。商売上手いですね。
Really Simple CSV Importer
Really Simple CSV Importer は優れものです。1行目の項目名が正しくデータベースと一致しているなら、インポートメニューから簡単にインポートできます。もしAdvanced Custom Fieldsを使用しているならそれにも対応しています。
ちょっと私には難しくて意味わかりませんでしたが、いろいろと工夫して機能を付加することも可能なようです。
残念ながらカスタムフィールドテンプレートには未対応、カスタムフィールドテンプレートで複数のバリューがあったりチェックボックスを使用したりしていると辻褄を合わせることが出来ません。
カスタムタクソノミーは安全に利用できます。
私の話で恐縮ですが、カスタムフィールドを多用していました。しかしReally Simple CSV Importerでは利用できないため「そうだ。カスタムフィールドをやめて全部タクソノミーに変更してやれ」とろくでもないことを思いつき、やってしまいました。しかも中途半端に。
これが後々仇になります。いずれこの話の顛末を書くかもしれませんがここでは「CSV入出力において、カスタムフィールドは使い辛く使用をやめたくなる。逆にカスタムタクソノミーは編集も楽で便利に使える」ということだけ踏まえて頂ければ。
さて、CSVで出力しているからローカルでの変更は一瞬で完了します。よしよし上手くいったと喜んでいたのですが、まとめてインポートしようとして罠に嵌まりました。
CSVインポートの罠
エクスポートしたファイルを表計算ソフトでまとめて編集、しかる後に快適アップロードでウハウハ。と、思っていました。しかし大きな罠がありました。という話です。
エラーでインポートできない
WordPressの「ツール」から「csvインポート」を選んで、ファイルを選んで、喜んでアップロードします。
しかしエラーが出ました。サーバーエラーみたいなエラーです。何度やってもエラー。どんなときにやってもエラー。まったくインポートできません。果てこれは。もしやこれは。もしかしてこれは。
行が多すぎて処理不能
そうです。処理する行数が多すぎて処理できなかったのです(6千行くらいありました)これは盲点、でも考えてみたら当たり前なのか。どうなのでしょう。とにかく、編集し終えたCSVファイルが大きすぎてまったく処理できないということを理解しました。
行数を減らしてテスト
そこで、ローカルのCSVファイルを少ない行数で書き出して別ファイルにして、それを読み込んでいました。しかし少ない行数とは何行なのか。さあわかりません。試しに1000に減らしてみました。
エラー出ました。
次に500行に減らしました。エラーで続行不可能。
次に100行に減らしました。
列の少ないデータではやっとこさインポートできました。
「100行以内ならOKなのか」と安心して、別のファイルで試してみると、エラーで続行不可でした。
70行、50行、20行、いろいろ試した結果、内容がシンプルなら100行程度、カスタムタクソノミーがたくさんあったりカスタムフィールドがたくさんあるようなフルデータだと50行でもエラーになる時があるとわかりました。
何たる非力。
50行や100行程度に収めたファイルに分割してインポートし続けるなど、そんな面倒臭いことは到底できません。そもそも簡単に大量の編集を行うためのCSVエクスポートインポートだった筈、余計ややこしくしてどないするんじゃ。と、なんだか意気消沈してしまいました。
ごく簡単なちょっとした内容の100行程度のファイルだとCSV入出力の価値があります。しかし肝心のメタ情報たっぷりのフルサイズ編集にはまったく力不足で使い物にならないと、やっと学習しました。
これはもちろんサーバーの能力にもよると思います。共用レンタルサーバーでちまちまやっている私のような人は大量のCSVインポートなんか共用の他の方に迷惑が掛かるだけでそもそも無茶なのかもしれません。普通のインポートだと順序よくエラーもなく取り込めるのにCSVインポートではダメというのは、プラグインがいろいろ複雑な工程を踏んでいるので仕方ないのだろうなあと。
データベースと直接やりとりする
そんなわけで数日間CSVと格闘しましたが、結局自分の望んでいるようなことが出来ないと確認できただけでした。
しかしそこでふと考えがよぎります。
サーバーを引っ越しするときなど、データベースからエクスポートしてインポートするではないか。そのときは数万行のデータであっても特に問題なくあっという間に出来るではないか。
そうですね、データベースを直接触る分には数千行などたかだかしれいていますね。Wordpressの管理画面から行うというのは、Wordpressとデータベースの複雑怪奇なやりとりをかましますからとても複雑な作業となってしまいメモリやサーバー性能を喰らい尽くすのですね。多分そうですよね?
データベースからCSVエクスポートインポート
myadminにログインして早速テストします。怖いのでもちろんテストサイトを使いました。myadminにログインしてテーブルを選んでエクスポートしてみます。このとき、なんと便利なことにcsvエクスポートも選べます。エクセル形式っていうのも選べます。
容易く出来ました。エクスポートはプラグインの世話になんかならなくてもデータベースから直接行えます。
csvインポートは無理なのでWordpressからちまちまやるしかありません(追記:以前「簡単にできます」とうっかり書いてしまっていましたが簡単にはできません。簡単にできるのはエクスポートだけのことでした。この件については他の記事のここやここでも言及しています。謹んで修正しておきます)
CSVインポートは少ない行数でちまちまやるしかありませんがエクスポートが簡単だと気づいて良かった良かった・・・
データベース構造
なーんだ、最初からこうすればよかっただけじゃん。と一瞬間抜けにもそう思います。しかしそんな簡単な話でもありません。カスタムフィールドやタクソノミーを上手く扱えないんですよ。データベースのテーブルを書き出しただけでは。変更はできても新規には割り当て不能です。
WordPressデータベースの仕組み
WordPressの編集画面からならば簡単にタクソノミーやカスタムフィールドを作ったり編集したりできますが、生のデータはそうはいきません。仕組みというものがあります。IDを元にタクソノミーを関連づけたり、カスタムフィールドとポストを関連づけたりしています。
編集画面では裏でphpが必死に動いています。Wordpressの複雑怪奇なコード群がリレーションを上手に動かしてくれているからこそできるんですね。何か編集しようと思って、生のデータを触って弄ってポンというわけにはいきません。そんなことしたら壊れてしまいます。
そこで、生まれて初めてWordpressのデータベースの構造というものに注意を向けてみることにしました。構造が一目でわかる便利なページが用意されています。なぜ今までこのようなページを見たことがなかったのだろうと呆れますがとにかく見てみます。
WordPress Codex データベース構造
これがそうですね。詳しい説明はCodexページに書いてあります。
割とシンプル。もっと複雑なものを空想していました。ポスト、タクソノミー、ポストメタについて「なるほど知恵の産物やな」と納得。
というこの図をたらたら眺めて、ようやくwordpressデータベースの基本的な構造がわかりました。今まで知らんかったんかいっ。と自分ツッコミを入れながら、こういう図はどこかでよく見かけた図だなと感じます。
すぐに思い出します。昔よく見たファイルメーカーのリレーション図です。あら懐かしい。ファイルメーカー、クラリスの頃ファイルメーカーProになってすぐに買って使い倒していたあのFileMaker Pro、データベースソフトのあれです。
そりゃ、データベース仲間なんだから似ていて当たり前の話です。なるほどなるほどと感心しながら、次に良からぬ考えが浮かびます。
CSVをFileMakerで管理したらどうじゃろか。
WordPress管理画面からCSVをエクスポートすると、タクソノミーやポストメタがリレーションの仕上がった状態でダウンロードできます。それをインポートしようとすると複雑怪奇な処理が行われますからサーバーエラーとなります。
データベースからテーブルごとにCSVをエクスポートしてFileMakerにインポートし、正しくリレーションを再現して管理、編集することによって、FileMakerからテーブルごとに簡素なCSVとして書き出すことができ、それをインポートすればエラーも少なくデータを変更できるのではないか。と思いついたわけです。
まずそんな風に思いました。「まず」というのは、この先いろいろあったからですが、今はまだその段階ではなくCSVにこだわっております。というかMySQLデータベースにCSVでインポートできないし(変換して取り込むことに取り組みましたが難しくて諦めました)プラグイン使ってやると多くの行が処理できないとあれほど身に染みているのに完全に脳味噌がとろけています。
テーブルごとにエクスポートしたデータをFileMakerのテーブルごとにインポート、リレーションを組んでいきWordpress構造をローカルで再現する、という遊び自体が何だか楽しそうに思えて、すでにいろいろ本末転倒して最初の目的を忘れていますがわくわくし始めている段階です。
ということでこの後はまた話が長くなるので次回に繋げます。
つづく
次の記事は WordPressのデータをMySQLからCSVダウンロード です。