自宅サーバーをClaude Codeで引っ越し(3):ファイル名の大文字・小文字問題
前回は、WSL2 + nginx の土台を作って、既存のホームページを新しいサーバーで表示できるところまでを紹介しました。今回は、その直後に見つかった「ファイル名の大文字・小文字」の問題を、Claude Codeに修正してもらった話です。
表示はされたけれど…
トップページは無事に表示されたので一安心したのですが、実際にページをあちこち開いてみると、画像が表示されなかったり、リンクをクリックすると「404 Not Found」になったりする箇所がたくさんありました。
原因は、ファイル名の大文字・小文字の扱いの違いです。
- Windows(旧サーバーのIIS)は、大文字と小文字を区別しない
- Linux(新サーバーのUbuntu + nginx)は、大文字と小文字を区別する
例えば、HTMLの中では photo/ と書かれているのに、実際のフォルダ名は Photo だったり、bind/ と書かれているのに実際は Bind だったり。Windowsではこれでも問題なく表示されていたので、何年も気づかないままになっていました。長年いろいろな方法で更新を重ねてきたので、表記の揺れがあちこちに溜まっていたのだと思います。
手作業では無理な量
Takesa’s Homepage だけで16.5万ファイル以上あります。どこに不一致があるのかを1つずつ探して直すのは、現実的ではありません。しかも前回書いたとおり、サイトを作った編集ソフト(BiND 5)はもう起動できないので、ソフト側で作り直すこともできません。
そこでClaude Codeに状況を伝えたところ、サイト全体を自動でチェックして修正するシェルスクリプト scan_and_fix_links.sh を作ってくれました。おおまかには、
- HTMLファイルの中から、リンクや画像の参照先を拾い出す
- 参照先のファイルが実在するかを、大文字・小文字を区別せずに探す
- 表記が違うだけで実在していれば、HTML側の記述を実際のファイル名に合わせて書き換える
という流れです。実行してみると、サイト全体で479件の不一致が見つかり、まとめて修正されました。これだけの数を自分で探していたら、何日かかっていたのか分かりません。
後から見つかった落とし穴
これで解決…と思っていたのですが、後日、別の不具合を調べていたときに、おかしな画像パスを見つけました。
Race.gif/RACE.gif
本来は Race.gif を RACE.gif に「置き換える」はずが、ごく一部のケースで2つが「つながって」しまっていたようです。一括修正のスクリプトに、まれにしか起きないバグが潜んでいました。
ここでもClaude Codeに相談して、「〇〇.gif/△△.gif のような同じ壊れ方をしている箇所がほかにないか」をサイト全体で調べ直してもらいました。その結果、該当はレース関係のページの2か所(MotorSports/Race/Race.htm と MotorSports/Kart/Entrant.htm)だけだと確認でき、そこを直して今度こそ完了です。
振り返り
十数万ものファイルを相手にするような作業は、AIにスクリプトを作ってもらうと一気に片付くのが本当にありがたいです。一方で、一括で直したものは、まれに意図しない壊れ方をすることがあるので、
- 何件見つかって、何件直したのかを確認する
- おかしな箇所を1つ見つけたら、同じパターンがほかにないかも調べてもらう
という確認を挟むのが大事だと感じました。ここまでセットでお願いすれば、Claude Codeは嫌な顔ひとつせずに、あっという間にやってくれます。
次回
次回は、ホームページに設置していたアクセスカウンターの移行です。1997年製のC言語のプログラムを、今のLinux環境でビルドして動かすまでの話になる予定です。
