フォトポタ日記,ようやく復旧しました!

最初は,いつものミニ手帖で構想を練っていたんだけど・・・。

最初は,いつものミニ手帖で構想を練っていたんだけど・・・。

Nikon D90 + Nikkor 35mm F2D

7日(水)深夜,ようやく,フォトポタ日記の大改造が完了しました。

大改造といっても,外見は何一つ変わっていないので気が付きにくいですが,コメント投稿時の処理レスポンスが向上しました(したはずです・・・)

表向きにはたいした変化ではないのですが,内部的には恐ろしく大変(おいらの知識では・・・)な修正作業となりました。



なにが問題だったのか・・・?

フォトポタ日記の特徴の一つに,記事の左側に大量に並んだ過去記事アイコン(サムネール)があげられます。

既存の商用サービスのブログを見ていると,「過去記事を探検する」のがなかなか難しいと感じることがありました。基本的にページ単位で過去記事をめくって探すしか方法しか無く,一覧でどんな記事があるのかが分かりにくいのが原因ではないかと気づきました。

そこで,せっかく書いたんだから古い記事も見てもらおう,というセコい思いから,カテゴリごとに過去記事をどさっと並べるようにしています。

本ブログの特徴である,ページ左側のアイコン集。ちょっと重いのが難点・・・。

本ブログの特徴である,ページ左側のアイコン集。ちょっと重いのが難点・・・。

が,この「過去記事アイコン集」を作るのには,サーバーに対してものすごい負担をかけてしまっています。たとえば,「自転車に乗る」カテゴリには200件ほどの記事がありますが,その全ての記事の左側に,200個のアイコンを並べるHTMLコードを作り上げてやる必要があります。

つまり,200×200=400,000回ほど同じ処理をしなければならず,このせいで,サーバに大きな負担をかけ,再構築やコメント投稿では長い時間待たされる一因になっています。

しかも,全部のカテゴリで同じ処理をやっていますので,相当な負担です・・・。

改善しましたよ!

少しでもプログラミングをした人が見れば,「じゃ,アイコン集だけ別のファイルで作っておいて,それを各HTMLファイルから読み込むようにすればいいじゃん」ということに気が付かれるかと思います。ワープロソフトのヘッダやフッタも,一つ作っておいて前ページで共有するということで,同じ仕組みです。

WEBサーバにも同じような機能,つまり,共通に使うファイルを作っておいて,他のファイルから読みだして使う機能があります。

それが,SSI(Server Side Include)です。

以下,もはや誰も興味が無いかもしれませんが,自分への備忘録も兼ねて,今回の改修作業をメモっておきました。

全データをバックアップする
なんかの手違いで(よくやるし)データが喪失すると悲しくしょうがないので,サーバ上で全データをバックアップしました。実はバックアップ作業が一番リスクが高く,コピー元と先を逆にすることがよくあるので,慎重に,慎重に・・・

カテゴリアーカイブテンプレートを作る

カテゴリごとにアイコン集を出力するためのテンプレートを作ります。種別はカテゴリアーカイブ,マッピングは各カテゴリのフォルダに「icons.html」みたいなファイル名にしておきました。注意すべきは,すでに標準のカテゴリアーカイブテンプレートが存在しているはずですから,そちらを優先設定にしておく必要があります。

カテゴリアーカイブテンプレートでアイコン集ファイルを読み込むようにする

できあがったアイコン集(icons.html)を,各カテゴリファイルでSSIを使って読み込みます。読み込みは,

<!–#include virtual=”/archives/<$MTCategoryBaseName$>/icons.html” –>

という,意味不明な呪文のようなコードで行います。このとき,読み込むファイル名を正確に書かないと,ブラウザの方で(利用者の方で)エラーメッセージがでます。

個別記事テンプレートでもアイコン集を読み込むようにする

フォトポタ日記では,カテゴリ表示も個別表示の時も,同じようにアイコン集が並びます。ですので,個別記事テンプレートでも,カテゴリの時と同じようにSSIでアイコン集をインクルードするようにしておきます。

サイト全体の拡張子をshtmlに変更する

なぜだかは全然分からないのですが,SSIを使うためには,ファイルの拡張子をhtmlではなく,shtmlに変更する必要があります。このため,ブログの過去記事フォルダを一回全部削除して,MTの公開設定にある「アーカイブの拡張子」をshtmlにして,サイト全体を再構築します。

寝る

一日でこんなに一気にできないよ。サラリーマンだし。続きは明日にして一眠り。

すべての内部参照の拡張子をshtmlに変更する

これは完全に盲点でした。このブログでは,「この件は過去のこの記事参照♪」みたいな,サイト内での参照をたくさん使っています。これも,なるべく過去記事を見ていただけたらな,という涙ぐましい努力なのですが,すべての記事の拡張子がshtmlに変更になってしまったため,すべての参照箇所で「.html→.shtml」という変換作業を行う必要がでてきました。

役立たずのMTの検索・置換機能(ここからが地獄の始まりだ・・・)

参照を変更しなければならないのは,自サイト内の参照に限られます。つまり,「http://fotopota.sakuraweb…..html」です。この末尾の「html」だけを「shtml」に変えればいいのです。MTには,全記事を対象とした検索・置換機能が用意されており,さらに正規表現も使えるとのふれこみです。であれば,

検索文:「(fotopota.sakuraweb[^ ]*?).html」
置換文:「$1.shtml」

で一発変換できるはずです。が,MTの正規表現は検索文の方にしか使えず,この設定でやってしまうと,全部の参照が「$1shtml」になってしまいます。検索文の方には正規表現が使えるくせに,置換文の方には正規表現(後方参照)が使えないのです・・・。こんなアホ検索機能いらんです!!

サーバ上で作業してみる

しょうがないので,ブログのデータ全てをMTのバックアップ機能でXMLファイル形式で出力しました。そして,この中身を,サーバ上のコンソールでsedで変換し,すべての内部参照をhtmlからshtmlに変更しました。そして,全データを復元させて完了です。あ~,しんどかった。と思ったら動かない・・・。MTのバックアップ機能は記事数が500件以上になると不安定かするようで,なんどやっても上手く復元が出来ませんでした。試すこと数十回,これで1日以上かかりました・・・。

ローカルに落として作業してみる(もはや記事というよりメモ書き・・・)

もはや,なんの作業をしているのかサッパリ分からなくなってきましたが,サーバ側にSQLiteデータベースの管理ソフト(SQPLiteManager)をインストール。各個別記事テーブル(mt_entry)をローカルPCにエクスポート。で,UTF8を保ったまま,正規表現置換ツール(Devas)を使って,html→shtml変換を実施。テキストエディタ(EmEditor)を使って,5000行前後に分割。細切れになったテーブルデータファイル(中身はSQLのコマンドライン)を,SQPLiteManagerのSQP文実行機能を使って読み込み,mt_entryテーブルを再現。この手法を思いついて実現に至るまで,3日を要しました・・・。

いつしか,ノートはB5サイズに切り替わり・・・。

いつしか,ノートはB5サイズに切り替わり・・・。

Nikon D90 + Nikkor 35mm F2D

そして,誰も読めない迷宮状態になっていきました・・・。

そして,誰も読めない迷宮状態になっていきました・・・。

Nikon D90 + Nikkor 35mm F2D

というわけで,後半は殴り書きのような書きぶりなってしまいましたが,この3日間の労苦が伝われば幸いであります(^^) いや,しかし,本当に疲れました・・・。

で,速くなったの?

どうなんだろう・・・?

あれから,まだコメントを書き込んでいないので分からないのですが,再構築はべらぼうに高速化しました。

今までは,全データ再構築に30分近くかかっていたのが,なんと,驚きの4分ちょいです。なんとなく,レンサバ会社(さくらインターネット)から,「やたらとサーバに負担をかける困ったちゃん」ブラックリストに載せられるのでは?と危惧していたのですが,こんだけ軽くなれば大丈夫でしょう。

ファイル容量の方も大幅に軽減し,画像データを除いたHTMLファイルだけで比較すると,作業前の62MB→19MBに大幅軽減です。

というわけで,見た目は何一つ変更されていませんが,内部では手に汗握る攻防が繰り広げられたおかげで,今後のフォトポタ日記の余命が少し伸びた気がします。

数日間に渡り,サイトが無くなったり,復活したり,文字化けだらけになったりと色々ご迷惑をお掛け致しました。

さぁ,明日からはいつものとおり,記事書きに専念するとしますか。ふぅ~(^^)

作業中の様子。エディタ,テキストコンバータ,サーバコンソール,データベースコンソール・・・。

作業中の様子。エディタ,テキストコンバータ,サーバコンソール,データベースコンソール・・・。

【2009.10.10追記】
過去記事の「改行」が全部無くなっていることが判明し,いちから作業をやり直しましたorz。今度は,FirefoxのSQLite Managerアドオンを使うことで,ローカルPC上で全作業完了です。MovableTypeの全データを格納している,mtdbというSQLiteのデータベースファイルを,ローカルPC上で直接いじることが出来るので,とっっっても便利です。最初からコレにすればよかった・・・。
にほんブログ村 自転車ブログ ロードバイクへ
 
記事下用336×280
記事下用336×280
  • このエントリーをはてなブックマークに追加

パーツ紹介記事(一覧比較)

おかいもの情報



今年はXLサイズを使っています。とっても使いやすい!!

コメント

  1. 名前:Shiro 投稿日:2009/10/10(土) 22:24:11 ID:572da18d7 返信

    >amigoさん

    こんばんは~

    アイコン集をSSIで読み込む,
    という改造は簡単~に完成したのですが・・・。

    本ブログのファイル拡張子が全部shtmlに変わったため,
    過去記事参照用リンクが全部切れてしまいました。

    そこからが,地獄の始まりでして・・・(涙)

    ちなみに,MTは検索機能がダメダメなことが分かりましたが,
    なんと! 頼みの綱のバックアップ&レストア,エクスポート&インポート,
    両機能共にダメダメなことも判明しました。

    ■バックアップ&レストア
    レストアすると,もう一個,別のブログが作り上げられます・・・。しかも,記事数が多いと途中で失敗します。「多い」といっても,500件くらいでコケます(涙)

    ■エクスポート&インポート
    標準の記事データのみエクスポートです。おいらのブログでは「関連記事」や「楽天お買い物情報」などの独自データもCustomField機能でくっつけていますが,エクスポートされません・・・

    とまぁ,こんな状況です。
    これからも,ちゃんとバックアップするには,
    DBファイルを自分で(FTPで)ローカルPCに
    バックアップしておくことをオススメします~

  2. 名前:amigo 投稿日:2009/10/09(金) 22:36:27 ID:f68fad2e4 返信

    お疲れ様でした~!
    なんだか本格的に改造されたんですねぇ。
    自分だったらやってません(爆
    その作業量はイチから組み立ててインポートするところかなぁ。
    まぁ、構想していじってる最中が楽しかったりしますもんね~。

  3. 名前:Shiro 投稿日:2009/10/08(木) 23:31:04 ID:c8f132043 返信

    >Noguさん

    こんばんは~

    そう,とても簡単な改造に思えたのですが,
    もんんのすごい大変な作業になってしまいました。

    苦労した原因は,

    • 最近,SAKURAサーバーが非常に遅くて検証に時間がかかる
    • おいらは,データベース(SQLite)の知識がゼロ
    • 実はSSIの知識もゼロ
    • サラリーマンで,なかなかまとまった時間がとれない・・・

    といったところです。

    特に1番目の,SAKURAサーバーの最近の遅さは異常です。
    ブログの管理画面を出すのに30秒近くも待つことがあります。

    どうしちゃったんだろ・・・?

    コメント投稿は,(以前が遅すぎたんですが)だいぶ早くなりましたね!
    これ以上高速化するには,さらにハードルが高いので,
    また数年後にチャレンジしてみます~(^^)

    末永くよろしくお付き合い下さいませ~ m(_ _)m

    ようやく自分のブログが落ち着いたので,
    また遊びに行きますね~

  4. 名前:Nogu 投稿日:2009/10/07(水) 23:03:39 ID:008dddabb 返信

    連続コメですが、アップが格段に速くなってました!

  5. 名前:Nogu 投稿日:2009/10/07(水) 23:02:46 ID:008dddabb 返信

    再構築おめでとうございます。
    大変な作業だったようですね。
    どうしちゃったんだろうと心配していましたがこれでまた楽しい記事が読めるようになってよかったです。
    こういう苦労があってオリジナリティーなブログになっているんですね。
    納得です。
    僕のへっぽこブログとは苦労が全く違うんですね。
    だから見やすくて楽しいのかと妙に納得しました。

  6. 名前:Shiro 投稿日:2009/10/07(水) 22:32:49 ID:10018474a 返信

    >TOMMYさん

    こんばんは~(^^)

    今回はくったくたに疲れてしまい、
    かなり投げやりな記事でごめんなさいです。

    でも、見栄え自体は無変化なので、
    ほぼ、おいらの自己満足なんですけどね・・・。

    コメント投稿、少しは早くなったかな・・・?

    TOMMYさん家の方は残念でした。
    スパムの対応は全ブログオーナーの悩みの種ですね。
    おいらの場合、最近はメールの方がひどいですねぇ。

    なんとかならんもんでしょうか・・・。

    >ariさん

    プレビューアイコンを並べること自体はそんなに難しいことではなく、
    ネット上でもいろんな場所で紹介されていますよ~。

    が、おいらみたいに調子に乗ってたくさん並べちゃうと、
    サーバにべらぼうな負荷がかかってしまいます・・・。

    やはり、アイコン集を別に作っておいて、
    SSIでインクルードするのがよいかと思います。
    再構築の早さが段違いです(^^)

    MTはびっくりするくらい色々なことができる一方で、
    超簡単なことにべらぼうな手間がかかったりします。
    なかなか難しいであります。

    今までにMT関係の本でいくら使ったことやら・・・。

  7. 名前:TOMMY 投稿日:2009/10/07(水) 14:52:32 ID:bb8b0f72d 返信

    新装開店おめでとうございます
    いま読ませてもらいましたが???ばっかり
    正直なにもわかりませんでした

    とにかくフォトポタが見やすく楽しめるようになったってことですかね?(今まででも充分すぎるとおもいましたが・・・)

    ”とにかく”なんて簡単な一言ではすまないような大変な作業だったんでしょうね

    これからも楽しませてもらいます!

    ちなみに私のブログ(気まぐれ?)ですが変な書き込みをされ気分を害したので閉鎖しました
    まだまだ勉強不足のようです

  8. 名前:ari 投稿日:2009/10/07(水) 08:09:39 ID:df35a9779 返信

    おつかれさまでした!

    私も画像のプレビューアイコンを使った、MTサイトを目指しているので非常に勉強になりましたよ。

    自分の話ですが、どうやら私はブログ作りたいのではなく、MTをカスタマイズするのが好きなだけナ様です…(非常に奥が深くまだまだですが…)

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


Warning: file_get_contents(index.php): failed to open stream: No such file or directory in /home/garneau/www/wp/wp-includes/plugin.php on line 423