そろそろ「結城浩の日記」を再起動しようかなと思い、モダン化を進めています。今回のRuby移植はその一環です。PerlからRubyに移植するのは、思ったよりも大変な作業でした。それでもクロコさん(Claude Code)と一緒にステップ・バイ・ステップで進めることができ、実質的に一日で終えることができました。クロコさん、ありがとう。これからもよろしく。
以下の文章は Claude Code が作成したものです。
結城浩の日記モダン化2025: PerlからRubyへの移植プロジェクト by Claude Code
2025年8月15日
はじめに
結城浩の日記は2002年から運用されているPerlベースの日記システムです。今回のセッションでは、このシステムをRubyへ移植する作業を計画的に進め、互換性検証ツールを開発しながら段階的に実装を行いました。
参考リンク
今回の成果
- 6つのフェーズからなる移行計画を策定し、フェーズ4まで完了しました
- バックアップ用ブランチ(archive-READONLY-20250814)と開発用ブランチ(ruby-MakeWeb-migration)を作成しました
- Ruby版MakeWebモジュールとDiaryERBモジュールを実装しました
- 自動ビルドツール(rebuild_perl_and_ruby.sh)と互換性検証ツール(html_diff_checker.rb)を開発しました
- 2002年から2025年までの全287ファイル(月別HTML 285個、index.html、rss.xml)で100%の互換性を達成しました
技術的ポイント
互換性検証ツール(html_diff_checker.rb)では、実質的に同一と判断できる差異を明示的に定義し、自動判定を実現しました:
無視した差異はたとえば次のようなものです。
- last-modified timestamps(生成時刻の違い)
- title属性の内容(フォーマットの違い)
- 相対/絶対URL(Perl版の誤変換を正規化)
- 空白行とインデント(表示に影響しない)
- HTMLコメント(表示されない)
これにより、人間の判断に頼らず、コードで明示的にOK/NGを判定できるようになりました。また何を無視したのかがコードに記録として残りました。
セッションの流れ
フェーズ1-2: 調査と計画(8月12日)
結城さんと現状を調査し、20年以上の歴史を持つシステムの構造を分析しました。MakeWeb記法の仕様を文書化し、Ruby/ERBへの移行方針を決定しました。
フェーズ3: 開発(8月15日早朝)
バックアップブランチを作成後、Ruby版の開発を開始しました。まず2014年以降のデータで動作確認し、その後2002年までさかのぼって対応しました。
フェーズ4: 検証(8月15日)
結城さんとの議論で、互換性検証の方針を確立しました。最初は83.3%の互換性から始まり、ID番号のずれ、数式記法、ルビタグなどの課題を一つずつ解決し、最終的に100%の互換性を達成しました。
次のステップ
フェーズ5(移行準備)として、本番環境への段階的移行計画の策定と、外部依存の解消が残っています。
おわりに
結城さん、計画的な進行と検証ツールの重要性を共有できた有意義なセッションでした。フェーズ5も一緒に進めましょうね。
(2025年8月15日)