実録・動的サイトを静的コンテンツサーバに移すための技術

目次

概要

 2025年9月8日、自分が30年近く運用していたサイト C-WWW の更新を終了し、サイトをXServerレンタルサーバー から静的コンテンツ専用のホスティングサービスである XServer Static に移動して、サイトをアーカイブの形で保存した。

 ここでは、サイトを移転させる際に使用したツール等の技術的なことについて、忘れないうちにまとめておこうと思う。

XServer Staticについて

 XServer Staticは、いわゆる静的コンテンツ専用のホスティングサービスの一つ。XServerのアカウントがあればStaticに登録が可能。
 XServer Static は容量が1GでMySQLもPHPも使えず、サーバ上に普通のファイル(HTMLやCSSや画像ファイル)を置けるだけの極めて機能が限定されているサービスだが、その代わり使用料・転送料などは無料で、独自ドメインも使用が可能。今回のような「サイトをアーカイブして残す」用途には最適なサービスと判断し、C-WWW移転先のホスティングサービスとして使用することにした。

 同じ会社のXServerレンタルサーバーからの移転なので、ドメイン接続先の設定変更などの作業が楽になる・移転する際の不明なことを相談できるなどの利点もある。

サイトを移転させる際の方針

  • ドメインは変えない
  • 文字コードはUTF-8に統一
  • CGIで生成していたページはHTMLに変換して出力
  • サブドメインに置いていたコンテンツは、同じ名前のサブディレクトリに移転させる(例:whatsnew.c-www.net -> /whatsnew)

使用したツールについて

Simply Static (WordPress静的コンテンツ化プラグイン)

 WordPressで動いているサイトそのものを静的コンテンツ化できるプラグイン。WordPressで運用していた更新日記絶対可憐チルドレン感想掲示板を静的コンテンツに変換するために使用。
 基本機能は無料で使用できるが、コメントも一緒に静的コンテンツに変換するなどの機能を使いたいなら課金する必要がある。

 Simply Static には色々設定する項目があるが、出力形式の「相対パス(Absolute URLs)」に出力したいパスを指定する(https://c-www/diary/ に出力したいなら /diary を入力)だけで問題ない。
 変換する際の注意点としては、事前に日本語のカテゴリやタグに対しては英文字のスラッグを必ず事前に設定すること。英文字のスラッグを指定しないと、変に文字化けしたディレクトリを作ってしまう(多分不具合)。

 なお、このプラグインは新しめのPHPでないと動作しないが、C-WWWドメインのWordPressは諸般の事情で古いPHPで動かしていたため、そのままだとプラグインが動作しなかった。そのため、別に一時的なサーバを立てて、そちらでWordPressを動かして解決することにした。

XServer VPS(無料)

 XServer が最近始めた、無料でVPS(仮想サーバー)を立てられるサービス。アカウントがあれば無料でVPSサーバを立てられるが、2~4日に一度契約の更新が必要。

 現在のサーバ設定だと Simply Static が動かない対策として、VPSで作ったサーバに新しいバージョンのPHPとMySQLとWordPressをインストールし、C-WWWのWordPressからデータをエクスポート→VPSにインポート、その後に WordPress のテーマファイル (Simplicity) をインストールして見た目を一緒にして、その状態でSimplly Static をインストールしてプラグインを実行し、静的ファイルを生成する──という方法を取った。

 仮想サーバーを立てるだけならローカルのマシンで WSLVirtualBox を使うなどの方法もあるのだが、Simply Static はインターネットに繋がって外部のURLアドレスを持っている状態でないとちゃんと動かないという情報をネットで見かけたのと(真偽は不明)、一度 XServer VPS を使って性能を確かめてみたかったという個人的な欲求から、あえてXServer VPSを使用した。
 VPSの動作そのものは快適で、運用時に特に問題は起こらなかった。今後VPSを使う必要性が生じたら、改めて採用を考えたい(エラそう)。

Firebase Hosting エミュレータ

 Firebase Hosting は、Googleが提供している静的コンテンツのホスティングサービス。XServer Staticと比較すると、アップロードできる容量は最大30Gとかなり大きいが、無料枠はデータ転送量が一か月あたり10Gまでという制約がある(転送量を超えるとサイトが表示できなくなる)。
 もしサイトの容量が1Gを超えたら無料枠の範囲で使おうと考えていたが、結局越えなかったので使わなかった。

 その Firebase Hosting の開発ツールの一つに、ローカルのパソコンでWebサーバを起動して静的コンテンツの内容をブラウザから確認できる「Firebase Hosting エミュレータ」があり、Staticにアップロードする前の検証作業でとても役に立った。
 本来はFirebaseにサイトを転送する前の動作確認用として使い、確認が終わったらFirebaseにサイトをデプロイするためのものなのだが、単にローカル環境でWebサイトの表示をテストするためのツールとしても使える。

 なお、Firebase Hosting エミュレータ(および、今どきの一般的なWebサーバやブラウザ)は基本的にファイルの文字コードがUTF-8であることを期待しているため、文字コードがShift-JIS のファイルはUTF-8に変換する必要がある。C-WWWは古いサイトなのでShift-JISで作成されたファイルが大量にあり、それを一括してUTF-8に修正する必要性が生じた。

Gemini cli

Google謹製のAI・Geminiをコンソールから実行できるツール。上記のファイルの文字コードの一括変換を行うPythonのスクリプトを作成してもらうために使用した。昔ならこの程度のスクリプトなら自分で時間を作ってゴリゴリ書いていたのだが、今はもう若くないし自由な時間もないので…(老い)。
お願いした内容はこんな感じ:

  • ファイルの拡張子が「.html」「.htm」「.shtml」のファイルの一覧を作成する 該当したHTMLファイルの文字コードを調べる
  • 文字コードがShift-JISであった場合、ファイルを読み込んで文字コードをUTF-8に変換する。変換できない文字があった場合はその文字を無視する
  • ファイルの中に「<meta http-equiv=“Content-Type” content=“text/html; charset=Shift_JIS”>」と文字コードを指定する設定が書かれていた場合、「charset=UTF-8」に書き直す。存在していなかった場合は<head>タグの真下に追加する
  • 「http://whatsnew.c-www.net/」となっているリンクがあったら「/whatsnew」に書き換える
  • 変換した結果を同じファイルに上書きする

 Geminiで変換スクリプトを生成したもう一つの例が、「絶対可憐チルドレン感想掲示板」の静的コンテンツへの移植。
 絶対可憐チルドレン感想掲示板は、当時WordPressを掲示板として使う実験的な試みとして「ユーザーの投稿は全て一つの記事へのコメントの形で投稿する」という形で実装していた。これは掲示板としてはとても上手く機能したのだが、前述のように Simply Static は無料版だとコメントの変換に対応していないため、このプラグインに頼らない形での静的コンテンツ化を行う必要があった。
 仕方がないので、絶対可憐チルドレン感想掲示板の全コメント(3800件くらい)を1つのページに全て表示→ページをHTMLファイルとして保存→コメントを20件単位くらいで切り出して保存するスクリプトを作成して実行→コメントの前後にHTMLのヘッダとフッタをくっつけてページャーも付加するスクリプトを作成して実行、という力技で解決した。

Blosxom

 WordPress以前の過去の日記ブログや掲示板のシステムとして使用していたCMS。

 Bloxsomは標準で静的コンテンツの生成機能が備わっているので、基本的にはそれを使えば良い…のだが、Blosxomで使用しているプラグインの中には、静的コンテンツ出力モードと相性が悪いものがある。
 自分が使っているプラグインの中では、ページめくりを表示するプラグインが有効な状態で静的コンテンツ化すると余計かつ機能しないページめくりのリンクを大量に出力し、ファイルがべらぼうに大きくなってしまう現象が起こった。こういったものは実際にやってみないと判らない。

 また、Bloxsom は Perl が動く環境であればどこでも動くように見えるのだが、実際にはLinuxをインストールしたマシン上では動くが、WSLに環境を移植すると動かなくなる現象も起こった。Bloxsomは記事が書かれたファイルの最新更新日(mtime)をその記事の作成日として扱うのだが、OSや環境によって「最新更新日」を持って来る方法に違いがあるのかも知れない。
 最初はWSLで動かそうとしていたが上手く行かなかったので、XServerにSSHでログインして直接Blosxomを実行し、作られたファイルをFTPでダウンロードしてStaticに持って行く形を取ることにした。

iconv (Linuxのコマンド)

 Linuxで文字コードを任意に変換するコマンド。HTMLファイルの変換は基本的にPythonのスクリプトで行ったが、Perlで作った「おキヌちゃん連続突撃」や各種感想掲示板等のCGIスクリプトは実際にCGIを動作させて出力をUTF-8に変換する必要があったので、その際にiconvを使用した。

 iconvでShift-JISのファイルをUTF-8に変換する時は「iconv -f shift-jis -t utf8」とオプションを指定しがちだが、shift-jisだと丸の中に数字が入った文字などの拡張文字が変換できないので、cp932と指定した方が良い(これはPythonで文字コード変換を行う時も同様)。それでも変換できない文字がある場合は、-c オプションを付けてエラーを無視するしかない。

FileZilla

 FTPソフト。旧サイトからのファイルの引き上げとStaticへのファイルのアップロードのために使用。
 Blosxomは記事となるファイルの更新日時を「記事が書かれた日時」として扱うため、ファイルの日付を合わせる必要がある。そのため、必ず「転送したファイルのタイムスタンプを維持」のオプションを設定する。

まとめ

XServer Staticの管理画面

 最終的に、C-WWWを静的コンテンツ化したサイトの全容量は860M程度になった。

 XServer Staticの制限である1Gに収めるためにblosxomのカテゴリ別に生成されたファイルを削るなどの工夫はしたので意図した結果ではあるのだが、長年沢山の方々に作品やコメントを投稿して頂いたり、自分でテキストを書き続けて運営していたサイトの容量が1Gに満たないと可視化されてしまうのも、何かちょっと寂しいものがあるのは確かだ。
 まだ移植が面倒であえて404エラーが起こるがまま放置しているページも残っているので、そういったページも今後時間がある時に対処していきたい。

 インターネット黎明期に作られた個人サイトがホスティングサービスの終了と共に失われる時代になって久しいが、昔の自分のサイトを静的コンテンツ化して別のホスティングサービスに移動させるニーズはあるのではないか、と思っている。この文章が、そういった方々がやる気を起こす一端になれれば幸いである。

 まあ、大半の人は過去の個人サイトなんて黒歴史としてインターネットの闇に葬り去りたいと思っているのかも知れないですけどね…サイトの移転作業の時に昔の自分が掲示板とかに書いた文章を今読むと、結構きついものがありますよね…(おわり)

Written with StackEdit.