実践ログ|2026年8月8日
Claude CodeでFTPの既存サイトを編集した記録
Claude Codeの解説は、Gitリポジトリのある新規プロジェクトを前提にしたものがほとんどです。しかし現実には、GitHubに載っていない、レンタルサーバーにFTPで置いてあるだけのサイトを運用している人の方が多いはずです。このページはまさにその環境で、実際に十数ページを書き換えて本番反映するまでの記録です。うまくいった型と、過去に踏んだ失敗の両方を残します。
このサイトは Anthropic や Claude の公式サイトではありません。実践ログでは、認証情報・サーバー構成・非公開の運用情報は伏せ、一般化した作業内容と考え方のみを掲載しています。
結論の型──「ローカルにミラーを作ってから触る」
先に完成形を書きます。FTPサイトをClaude Codeで安全に触るなら、次の4段構えが最も事故が少ないという結論に落ち着きました。
- 作業用フォルダを1つ作る──サイトごとに用意します。ここがClaude Codeの作業場になります
- 触る予定のファイルだけFTPで落とす──全部落とす必要はありません。「これから直すページ」と「参考にする既存ページ」だけで十分です
- ローカルで編集させ、そこで検品する──文字数の計測、リンク切れの確認、表記ゆれの検査まで全部ローカルで済ませます
- まとめてアップし、HTTPで実測確認する──アップ後に必ず、公開URLへ実際にアクセスしてステータスとtitleを確認します
ポイントは「サーバー上のファイルを直接書き換えさせない」ことです。ローカルに一段挟むだけで、失敗しても本番が壊れません。Gitが使えるならローカルのミラーをGit管理下に置くと、さらに巻き戻しが楽になります。
実際の頼み方
特別なことはしていません。「FTPでこのサイトの一覧を取って」「このページとこのページを落として」「本文の文字数を測って」と日本語で頼むだけで、Claude Codeが接続用のスクリプトを書いて実行します。
コツとして効いたのは次の3つでした。
- 認証情報はファイルに置いて、パスだけ教える──会話に直接貼ると履歴に残り続けます。「この場所のファイルから読んで、中身は表示しないで」と指示する運用にしています
- アップロード先は毎回明示する──ドキュメントルートの位置をCLAUDE.mdに書いておくと、毎回説明する手間が消えます
- アップは最後にまとめて──1ファイル直すたびにアップすると、途中の中途半端な状態が公開されます。ローカルで全部仕上げてから一括で上げます
踏んだ失敗1:バックアップを公開フォルダの中に作ってしまった
これは他サイトでの失敗ですが、共有する価値があるので残します。
「上書き前にバックアップを」という発想自体は正しいのですが、その置き場所を公開フォルダの中にしていました。つまり、旧版のページがインターネットからそのまま読める状態になっていた、ということです。検索エンジンにも拾われ得ますし、内容によっては見せたくないものが公開されます。しかもバックアップが増えるほどクロールの無駄も増えます。
対処は2つでした。今後は公開フォルダの外に置くこと、そして既存分はサーバー設定でアクセスを遮断することです。今回の作業でも、バックアップはすべてローカル側に取り、サーバーには一切置いていません。
付随して学んだこととして、「いくつか見てみて大丈夫だったから全部大丈夫」は成立しません。この件では標本を見て安心しかけましたが、全件を機械的に確認したら残っているものがありました。Claude Codeは全件走査が得意なので、こういう確認こそ任せるべきでした。
踏んだ失敗2:FTPで見えるファイルと、実際に配信される内容が違った
これは何度も引っかかった罠です。
/sitemap.xml を直したのに内容が変わらない──原因は、サーバー設定の書き換えルールによって別のファイル(PHPで動的に生成しているもの)が配信されていたことでした。FTPで見えている sitemap.xml は、もう誰も参照していない置物だったわけです。同種のパターンは複数のサイトで見つかりました。
そこで手順に加えたのが「触る前に、HTTPで取得した内容とFTP上のファイルを突き合わせる」という一手間です。一致しなければサーバー設定を読む。Claude Codeなら「この2つを比較して」で済むので、コストはほぼゼロです。
同じ発想で、公開後の確認もHTTPで実測するようにしています。アップロードが成功したことと、意図した内容が配信されていることは別問題だからです。今回も最後に全ページへ実際にアクセスし、ステータスコードとtitleを一覧で確認しました。
文字数を測る時の注意
ページの内容量を機械的に測る場面がよくありますが、ここにも罠があります。ヘッダー・ナビゲーション・フッターを含めて測ると、実際より多く見えます。さらに、ページ下部の共通ブロック(FAQ、関連リンク、注意書き)が全体の半分以上を占めることもあり、これを分離しないと「十分な分量がある」と誤判定します。
実際に別サイトで測った時は、共通の末尾ブロックが全体の54〜62%を占め、そこが74〜91%一致していました。本文自体は問題なかったのに、テール構造が原因で重複と判定されていたわけです。測る範囲を本文に限定してから数えるのが正しい手順でした。
この型が向く人
- WordPressではない、静的HTMLで作った古いサイトを持て余している人
- Gitを導入していないサイトを、いまさら移行せずに改善したい人
- 複数サイトを1人で運用していて、横断で同じ修正を当てたい人
逆に、既にGitHubで管理しているプロジェクトなら、この記事の工夫はほぼ不要です。そちらはGit・GitHub連携ページの内容がそのまま使えます。
AIガイド群
FAQ
Claude CodeはFTPに標準対応していますか?
専用機能があるわけではなく、接続用のスクリプトをその場で書いて実行する形になります。使う側から見れば「FTPで落として」と頼めば通るので、対応しているかどうかを意識する場面はほとんどありません。
WordPressのサイトでも同じ方法が使えますか?
テーマファイルの編集など、ファイルとして触れる範囲は同じ考え方で扱えます。ただし記事本文はデータベース側にあるため、そちらを触るなら管理画面かデータベース接続の話になります。まずはテーマとテンプレートから始めるのが安全です。
本番サイトを直接触らせるのは怖くないですか?
怖いので直接は触らせていません。ローカルのミラーで作業させ、確認してからアップする、という一段を挟むのが本記事の主旨です。加えて、大きな作業の前はプランモードで計画を確認しています(プランモードの解説)。
認証情報をAIに渡して大丈夫ですか?
会話に貼るのは避けています。ファイルとして置き、パスだけを伝えて中身は表示させない運用です。共有パソコンや、履歴を他人が見る可能性のある環境では特に注意してください。