ただのにっき
2002-07-11(木) 7671歩 [長年日記]
■ tDiary: Ruby 1.7→1.6?
最近、自前のサイトを閉じるのでtDiary.Netに引っ越して来た人がいて、過去の日記も引っ越すためにデータファイルを送ってもらったのだが。何も考えずに@data_pathに放り込んだらエラー。ときどき見かけるPStoreの「バージョン違いエラー」である。……って、マテ。たしかにtDiary.NetのRubyは1.6.5でちと古いが、最新の1.6.7までMarshalに変更はなかったはずだ。
てことはもしや……と思ってまだ運用中の古い日記を見てみると、Powered by Ruby version 1.7.2……って、うひぃ。Ruby 1.7で運営してるのはあおきさんだけだと思っていたんだが、まだあったかー。HEADかどうかまではわからんけど。
さて困ったぞ。「できません」と突っ返すのは簡単だが、なんかしゃくにさわる。変換するには、1.7でバイナリを読んでテキストにし、1.6でテキストを読んでバイナリにすればいい。テキスト化にはtDiary 1.5のコンバータを使うという手もあったが、逆変換が面倒だ。ここはもっと楽なAMarshalを使ってみる。Ruby 1.6でも単純な構造のオブジェクトなら動くみたいだし、大丈夫でしょう。
しかしさらに問題が。最近のRuby 1.7はAutoconf 2.5が必要なんだけど、AsumiのAutoconfはまだ2.13。Autoconfまで入れ替えてRuby 1.7をビルドするのは面倒だぞ。じゃあバイナリ探してくればいい。Rubyで一番インストールが簡単で、1.6と共存させやすいのと言えば、mswin32版かな(笑)。というわけで、ruby-1.7.2-20020603-i386-mswin32を持ってきて、Windowsにインストール。
さらに、squeeze.rbを改造してAMarshal変換ツールを作成、Windows向けにtdiary.confを書き換えてから実行すればテキストデータのできあがり。WindowsでもtDiaryが動くようにしておいてよかったぜ。続いてはLinux上でAMarshalなテキストを読んでPStoreを吐き出すツールを書けば、変換完了。書いたコードは合わせて20行程度か。わりかし簡単にできてしまった。まさかWindowsまで持ち出すハメになるとは思わなかったが。
というわけで、使えますねぇ、AMarshal。