自宅サーバーをClaude Codeで引っ越し その5:1999年製の電子掲示板を復活
前回は、アクセスカウンターの移行の話でした。今回は、旧版ホームページに設置していた電子掲示板(BBS)を、新しいサーバーで動くようにしてもらった話です。
1999年製の掲示板
この掲示板は、BiND版よりも前、Dreamweaverでホームページを作っていた頃に設置したものです。

https://takesa.dyndns.org/index_old.html
中身は1999年に作られたPerlのCGIスクリプトで、文字コードはShift_JIS、日本語の変換には jcode.pl という、古いライブラリを使っています。
正直なところ、旧サーバーでもちゃんと動いているのか怪しいと思っていたので、最初は移行の対象から外していました。ただ、過去の書き込みのデータは残っていたので、折角なのでClaude Codeに移行をお願いしました。
動かすまでに直したところ
スクリプトは、前回のアクセスカウンター用に用意したCGIの実行環境(fcgiwrap経由でnginxから呼び出す仕組み)にそのまま置きました。書き込みのデータファイルは、ホームページのファイル一式と一緒にすでに移してあります。
とはいえ、25年以上前のスクリプトがそのまま動くはずもなく、エラーが出るたびにClaude Codeが原因を調べて直していく、の繰り返しになりました。
1. Windows用のパスをLinux用に
スクリプトの中には、Perlの場所やデータファイルの場所が、旧サーバー(Windows)のパスのまま書かれていました。
#!/usr/local/bin/perl → #!/usr/bin/perl
e:/inetpub/wwwroot/bbs/... → /var/www/html/bbs/...
require './jcode.pl'; → require '/usr/local/cgi-bin/jcode.pl';
ここで1つ厄介だったのが文字コードです。スクリプトはShift_JISで書かれているので、今どきのエディタ(UTF-8前提)で開いて保存すると、日本語の部分が壊れてしまいます。Claude Codeは、パスのような英数字の部分だけを sed コマンドで直接書き換えることで、日本語の部分には一切触れずに修正してくれました。
2. 改行コードの違い
パスを直しても、今度は「No such file or directory(そんなファイルはない)」というエラーで動きません。/usr/bin/perl は確かにあるのに…。
原因は改行コードでした。Windowsのファイルは行末が「CR+LF」、Linuxは「LF」だけです。1行目の末尾に見えないCRが残っていたため、Linuxからは「perl+CR」という名前のプログラムを探しに行ってしまい、見つからなかったようです。CRを取り除くと、無事にスクリプトが起動しました。
3. 古すぎるPerlの書き方
次は jcode.pl 側でエラーです。このライブラリはかなり古いPerl(Perl 4の時代)の書き方をしていて、今のPerl 5.40では使えなくなった文法が含まれていました。Claude Codeが該当する箇所を今の書き方に置き換えてくれて、ここも解決です。
4. またしても大文字・小文字
掲示板は表示されるようになったものの、タイトル画像が出ません。実際のファイル名は BBS.png なのに、スクリプトの中では bbs.png と書かれていました。その3で紹介した大文字・小文字の問題が、ここにも潜んでいました。
5. 管理者としてログインできない
最後に残ったのが、管理者ログインです。正しいIDとパスワードを入れても、なぜか通りません。
原因は、ここでも改行コードでした。IDとパスワードを保存しているデータファイルもCR+LFのままで、読み込んだときに行末のCRが残り、入力したパスワードとの比較が毎回食い違っていたそうです。データファイルのCRも取り除いて、ようやくログインできるようになりました。
復活
最終的に、掲示板の表示、書き込み、一覧表示、削除、管理者ログインまで、すべて動くことを確認できました。パスワードの暗号化の仕組みも、Linux上でそのまま問題なく動いています。
今回はエラーの原因が「パス」「改行コード」「古い文法」「大文字・小文字」と次々に入れ替わりましたが、Claude Codeはエラーメッセージから原因を切り分けて、1つずつ確実に潰してくれました。特に改行コードの問題は、自分だけでは気づくまでにかなり時間がかかっていたと思います。
次回
次回は、ホームページにGoogle Analyticsを導入した話です。
