2005年10月04日 (火)

エントリを失った。バックアップもない。あなたならどうする?

iBlog ユーザの方に問題です。何かの拍子に iBlog から既に公開したエントリが一つ消えてしまいました。バックアップもありません。調べるとエントリのデータファイルが全く残ってません。さてあなたらなどうします?
  1. 泣く。
  2. iBlog をやめる。
  3. 気付かない振りをする。
  4. 旅に出る。
  5. 頑張る。

概要

このエントリは 5 と答えた人のためのエントリです。脳内シミュレーションですがきっと期待に添えると思います。期待通りでないときは 3 で我慢してください。

復旧させる方法の半分はエントリ「エントリを一つだけ狙い撃ちで再現する」に書きました。この中で足りないのは Library/Application Support/iBlog/ フォルダの下の次のファイル達を復旧させる方法です。

  • Blogs/ブログID/カテゴリID/エントリID.xml
  • Blogs/ブログID/カテゴリID/エントリID_abstract.rtfd
  • Blogs/ブログID/カテゴリID/エントリID_body.rtfd
  • Blogs/ブログID/カテゴリID/エントリID_title.rtfd
エントリに添付したファイルがあるときはこれ以外にもあるかもしれません。

ここでは上のファイル群を復元し、エントリの ID も変わらない方法を考えたので紹介します。

準備

まず準備として次を行います。

公開先のエントリ一式をダウンロードする。

プレビューのフォルダの下に残っていればそれでも構いません。エントリの ID である Eyyyymmddhhmmss (E の後ろは数字) の名前が付いたフォルダを丸ごと保存しておきます。

これはエントリに書いた内容や添付したファイルを保全するための措置です。

現状をバックアップする。

Library/Application Support/iBlog/ フォルダの下まるまるを含んだバックアップを行います。これには iBlogFreezer を用いてもよいでしょう。

これは途中で復旧作業が失敗しても元に戻ってやり直したり別な方法を試すための措置です。これをやらずに進めると更に事態を悪化させてしまうかもしれません。

消失ファイルの作成

エントリの内容が書かれたファイルやエントリのデータがかかれた XML を手で作るのは面倒ですし、iBlog がそれをうまく読み取ってくれないかもしれません。ですから失われたものをもう一度作るのは iBlog にやらせます。iBlog 自身が作成したものであれば(正常であれば)読めないはずはありません。手順はこうです。

  1. 消失エントリと同じタイプの新規エントリを同じカテゴリに作成する。

    古い iBlog はエントリに種類はありませんが、今は普通のエントリだけでなく FireSharingEntry、MusicEntry というのもあります。同じ種類のエントリを書き始めるつもりで操作してください。

  2. ダウンロードしたエントリ一式を利用して同じ内容を書く。

    これは既に公開したエントリやそのコピーを元にします。エントリ「一行目の HTMLCode」や「続続 一行目の HTMLCode」に書いた HTMLCode を使って書いているか、iBlog の [環境設定...]-[一般]-[プレビュー時フォントスタイルをオフ] で [はい] にチェックを入れてエントリが作成してあると楽です。

  3. 作成したエントリをドラフトとして保存する。

    ドラフトじゃなくともよいのですが、ドラフトの方がプレビューのときに何かと好都合です。というのは、ドラフトならばプレビューしても関連ページは作成されませんし、後でこのエントリを元に復元したときもドラフト状態を解除してプレビューすれば関連ページが確実に作成されるからです。

  4. もう一度開いてエントリの投稿日時を修正しドラフトとして保存する。

    もう一度開いてエントリの編集画面でエントリの投稿日時を修正します。既に公開されたエントリに書いてある日時を用います。

  5. iBlog を一旦終了する。

    以後の操作で iBlog のデータファイル群を書き換えるので iBlog がそれに更に書き込んだりしないように iBlog を終了させてください。

  6. 作成されたエントリのデータファイルの名前を変える。

    作成したエントリのデータファイルは ~/Library/Application Support/iBlog/Blogs/ブログID/カテゴリID/ の下の、そのエントリの ID で始まるファイル(またはディレクトリ)群です。エントリ ID がわからなくとも(通常はわからない)大丈夫です。Finder でそのフォルダを詳細表示にして日付で並べ替えればわかります。このファイル群には最低次の四種類があります。

    • エントリID_title.rtfd
    • エントリID_body.rtfd
    • エントリID_abstruct.rtfd
    • エントリID.xml

    エントリに画像などを付けた場合はこれ以外にもあるかもしれませんが、先頭部分は エントリID で統一されています。この エントリID の部分を既に公開したエントリの ID に置き換えてください。書き換え前のエントリ ID はどこかに書き留めておいてください。後で使います。

  7. エントリID.xml を書き換える。

    ここが一般には抵抗があることろかと思いますが、エントリID.xml をエディタで開いてみてください。落ち着いてよく見ればわかりやすいファイルです。ここで書き換える箇所は次の一カ所です。例を添えておきます。

    UUID - エントリID
    <key>UUID</key>
    <string>E20050929121112</string>

    この例では E20050929121112 となっているエントリ ID を既に公開したエントリの ID に置き換えてください。

他のデータファイルの修正

エントリのデータ自体は復元しました。しかし iBlog が中央管理しているデータ群(アプリケーションデータ)はまだ書き換え前の先程作成したエントリのままです。これを修正します。ここで二つの方法が考えられます。一つはアプリケーションデータの再構築です。もう一つは該当部分の手による修正です。アプリケーションデータの再構築は私は最近は一切やっていません。ライセンス情報や各エントリの日付などがちゃんと保たれるかどうかわかりません。わからないのでアプリケーションデータの再構築はここでは除外しておきます。

このステップはほとんどエントリ「エントリを一つだけ狙い撃ちで再現する」で述べた操作と同じです。違いはそのエントリでは復元したいエントリの情報が書かれていないことを前提としていますが、このエントリの手順ではエントリのデータファイルを作成するために作成したエントリの情報として残っていることです。

このためエントリ「エントリを一つだけ狙い撃ちで再現する」で archivesByDate.xml と entries.xml でデータを追加する手順を示していますが、ここでは書き換えることになります。どこを書き換えるか。それは上の手順で控えておいたエントリ ID でファイルの中を検索すればわかります。

archivesByDate.xml

控えておいたエントリ ID を復元したいエントリのエントリ ID に置き換えれば終了です。

2005年10月29日 shamukichi さんの指摘に基づき訂正
復旧用に作成したエントリはドラフトでのみ保存しているはずなのでこのファイルには記録されません。したがってこのファイルはノータッチです。
entries.xml

控えておいたエントリ ID でファイルの中を検索してください。そうすると

<key>UUID</key>
<string>控えておいたエントリID</string>
と書いてある場所が見付かるはずです。その前後の <dict> と </dict> で挟まれた部分を上で扱った エントリID.xml ファイルの <dict> と </dict> で挟まれた部分と全く同じにしてください。

仕上げ

これまでの操作で iBlog のデータとしてはエントリを復活することができました。ここで iBlog を再び立ち上げてください。復元されたエントリはドラフトになって表示されているはずです。これを開いてドラフトを解除して保存してください。そしてプレビューをすれば完了です。


Posted: 01:02    | Comment | Trackback


以下、類似エントリです。