301リダイレクトできない代替えトラブルと解決

301リダイレクトできない代替えトラブルと解決

実際にやってみると一筋縄では行かなかった

VS Codeで788個のHTMLを一括置換したら1,600回も書き換える羽目になった話と、その解決策
ブログの引っ越しやバックアップデータの整理で、数百個のファイル中身を一気に書き換えたい時がある。
「VS Codeなら一瞬でしょ?そう思っていた時期が私にもありました。
しかし、いざやってみると788個のファイルに対して、なぜか1,600回以上の置換作業を繰り返すという謎のループに。
なぜそんな不条理なことが起きたのか? どうすればスマートに終わったのか? 私が格闘した全記録をまとめました。

1. 最初の罠:良かれと思った「正規表現」が仇になる。
ネットでよく見る「ファイル全体を選択する魔法の呪文 」。 これを使ったのが迷走の始まりでした。^[\s\S]*
トラブル: 検索をかけた瞬間にVS Codeがフリーズ気味になり、ヒット件数が数件しか出ない。
原因: VS Codeの検索エンジンには「2万件制限」がある。 ファイル全体を読み込もうとすると、数ファイル分で処理の限界を超え、残りのファイルを「無視」してしまう。
教訓: 正規表現は使わない! や といった「どのファイルにも必ず1つある単語」を検索ワードにするのが最速と考え<!DOCTYPEを検索キイワードに。

2. 第2の罠:置換したのに「増える」ヒット件数
30件置換して、よし終わった! と思いきや、再検索するとまた40件出てくる。 この繰り返しで、気づけば置換回数は1,600回を超えていた。
トラブル: 置換しても置換しても「未処理」として同じファイル(あるいは隠れていたファイル)が後出しで出てくる。
原因は保存の遅延: 「置換」ボタンを押しただけでは、ファイルは上書きさない。 VS Codeが「まだ古いデータ(HTML)」をメモリに持っているため、幽霊のように何度も検索に引っかかる。
スキャンの遅延: VS Codeは一度に全フォルダを見ない。 一部の処理が終わると、次のフォルダをのぞきに行く「後出しジャンケン」のような挙動をする。

3. 解決編:1,600回繰り返さないための「3種の神器」
この無限ループを断ち切るために、最終的にたどり着いた「三種の神器」がこれなのだが。
① 除外設定(これが最強! )
検索パネルの「詳細(…)」を開き、「除外するファイル」に「置換後のURLの一部(例:snowoffice.blog)」を入れる。
これで「すでに書き換わったファイル」は物理的に画面から消える。 二重書き込みを100%防ぎ、本当の残り件数だけが見えるようになる。
② 「すべて保存」の徹底
置換ボタンを押したら、すぐにメニューの 「ファイル」>「すべて保存」 をクリック。
これでVS Codeに「このファイルはもう新しい内容になったぞ!」と強制的に認識させる。
③ 迷ったら「再起動」
挙動が変だと思ったら、VS Codeを一度閉じてメモリをリセット。 これで「幽霊ヒット」は消え去るはず。

4. 初心者向け:最短・最速の実行手順
これからやる人は、この通りに設定してください。
検索ボックス: (正規表現はOFF! )
置換ボックス: 転送コードを貼り付け
含むファイル: ./*/.html (全階層を対象にする)
除外するファイル: 自分の転送先URL (二重書き防止)
実行: 「すべて置換」→「画面上の置換ボタン」→「すべて保存」
最後に
788個のファイルに対して1,600回も格闘したのは、VS Codeが「高速化のために古いデータを保持する」というお節介な機能を持っていた可能性がある。
最終的には「結果が見つかりませんでした」という表示が出た時、それが置換完成のはずですが・・・

最終的に書き換えられた方法

今回のトラブルの原因は、「検索キーワードが実際の記述と微妙にズレていたため、置換処理が空振りしていた」ことだった。
一括置換を確実に成功させる手順を、改めて整理した。
1. 検索キーワードを「正確」に指定する。
ポイント: 今回のように <!DOCTYPE… など長い行を置換する場合、手入力ではなく検索結果に表示された行をそのままコピー&ペーストするのが最も確実だ。
理由: 1文字でも(今回の場合は ! など)欠けていると、VS Codeは「一致する箇所なし」または「中途半端な不一致」と判断し、書き換えを実行しないので、できるだけ一連の置換文字を指定することが肝要のようだ。

2. 置換の「確定操作」を二段階で行う。
サイドバーの置換は、以下の2アクションが必要だ。
置換アイコン(AB→C)をクリック: これで「準備」が整う。
画面上部の青い「置換」ボタンをクリック: これで初めて「実行(ファイルの書き換え)」が行われる。
※結果一覧からファイル名が消えれば、実行成功のサインだ。

3. 「保存」の挙動を理解する。
自動保存 (Auto Save) がオンの場合: 置換が実行された瞬間に、VS Codeが裏側で自動的にファイルを上書き保存される。
「すべて保存」がグレーの場合: すでに保存が完了しているか、あるいは内容に変更が加えられなかった(置換が空振った)ことを意味する。

4. 便利な「正規表現」の活用(応用)
行の内容がファイルごとに微妙に違う場合(例:スペースの数が違うなど)は、検索欄の .* アイコン(正規表現)をオンにして、以下のように入力すると便利だ。
検索: ^<!DOCTYPE.* (意味:DOCTYPEで始まる行を、その行の最後まで全部指定)
検索における「(アスタリスク)」は、ワイルドカード(文字の代用)として機能し、文字や単語の一部が分からない場合や、複数のバリエーションをまとめて検索したい場合に使用する。