変わらないと言える根拠
記事ページとテンプレートは本物の MT と1文字ずつ比べてあります。止まるのは「読者が何かを送る」機能だけです。先にそちらを読んでください。
「MT 互換」と書いてあるソフトウェアは珍しくありません。確かめる方法がないと、その言葉は何も保証しません。読み方の宣言にすぎません。Kiln では本物の Movable Type 8.8.1 を動かし、同じ素材から出た HTML を1文字ずつ比べています。ただし比べられるのは HTML を書き出す部分だけです。サーバー上で動いていた機能は別の話になるので、そちらを先に書きます。
サーバー上で動いていた機能はどうなるか
公開されるのが HTML ファイルだけになる、ということは、公開サーバーでプログラムが動かなくなるということです。MT のサイトでサーバーが引き受けていた機能は、止まるものと、別の仕組みに置き換わるものに分かれます。
| 機能 | 静的化するとどうなるか | 代わりの考え方 |
|---|---|---|
| お問い合わせフォーム | 送信を受け取れなくなる | 外部のフォームサービスに置き換える。Kiln は代わりを持っていません |
| 会員限定ページ・Basic 認証 | MT 側の認証が使えなくなる | 配信先(CDN やホスティング)のアクセス制御に寄せる |
| コメントの受け付け | 投稿できなくなる | 既存コメントの表示はできます。受け付けは外部サービスへ |
| サイト内検索 | 仕組みは変わりますが、動きます | 公開のときに索引を書き出し、ブラウザ側で絞り込みます。次の節 |
| アクセス解析 | Google Analytics などのタグはそのまま動く | サーバーのアクセスログは配信先に依存します |
止まるのは、読者が何かを送る機能です。お問い合わせフォームと、コメントの受け付け。このうちフォームは、企業サイトならほぼ必ず持っています。移行の検討は、この移し先を決めてから始めるものだと筆者は考えています。静的サイトでは一般的な課題で、解決手段は確立しています。ただし Kiln はその手段を同梱していません。ここを曖昧にしたまま進めると、切り替え直前に止まります。
サイト内検索は、仕組みが変わって動きます
mt-search.cgi は、読者が検索するたびに Perl が記事を探して結果ページを描いていました。公開されるのが HTML だけになると、その場で探してくれる相手がいません。Kiln はこの仕事を、公開のときとブラウザ側の2つに分けます。
公開のときに、テーマの検索結果テンプレートを全記事ぶん1回描き、1件ぶんずつの HTML を索引ファイルに書き出します。読者が検索すると、ブラウザ側の小さなスクリプトがその索引を絞り込み、該当した分をページに差し込みます。読者が見るのは、自社のテンプレートが描いた検索結果そのものです。見た目を似せた別物ではありません。索引は記事50件ずつに分けて書き出すので、記事を1本追加したときに書き換わるのは1ファイルだけで、読者が最初に読み込むのも1ファイルだけです。
MT の検索結果テンプレートは、移行のときにそのまま引き取ります。手で直すのは1か所だけで、読み込みの報告にも出ます。テーマの検索フォームの送信先です。MT のテーマはそれを mt-search.cgi に向けているので、公開された検索ページ(/search/)に向け直します。入力欄の名前は変えずに済みます。
できないことも並べておきます。
| 項目 | どうなるか |
|---|---|
| 並び順 | 日付順です。関連度順にはなりません(MT の検索も日付順です) |
| 探す範囲 | 記事の題名・本文・続き・概要・キーワードの5つ。mt-search.cgi と同じ範囲です |
| 件数の表示 | 索引を全部読み終えるまで「12+」のように増える形になります。MT は表が目の前にあるので最初から数を出せました |
| コンテンツタイプ | MT 7 のコンテンツレコードは索引に入りません。記事とウェブページが対象です |
| 読み込み量 | 索引はサイトの文章量とともに大きくなります。1件も該当しない言葉で検索したときだけ、索引を最後まで読むことになります |
設計の詳細は英語ですが検索の設計文書にあります。
記事とテンプレートは、6通りに比べて1文字も違わない
HTML を書き出す部分については、本物の Movable Type 8.8.1 と比べてあります。
| 比べた内容 | 一致 |
|---|---|
| テンプレートの機能を1つずつ(MT 自身に描かせた出力と) | 59パターンすべて |
| 同じ59パターンを、MT のデータを読み込んだあとの状態から | 59パターンすべて |
| 見本サイト1つの公開を、MT の「サイトの再構築」と | 全ファイル |
| 移行の通し運転(MT のデータを入れて公開するまで) | 全ファイル |
| 同じ公開を、記事の保存先を替えて | 全ファイル |
| 生成される URL を、MT 自身の公開記録と照合 | 全件 |
比較に使ったのは、テンプレートの機能を一通り並べた見本サイトです。27ファイル規模です。企業サイトとしては小さい。だからこの数字が保証するのは「Kiln のテンプレート解釈が MT と同じであること」で、自社サイトが通ることではありません。自社サイトについての保証は、移行作業の2段階目で自社のデータを通して初めて得られます。そこは移行の進め方の工程に入っています。
6通りある理由は、それぞれ別の疑いに答えているからです。テンプレートの解釈、MT のデータを読み出す部分、どのページを作るかの判断、移行作業の全体、記事の保存先、そして URL。1つ通っても、他は何も保証しません。順番に増やすたびに、前の段では見えなかった欠陥が出てきました。
URL が1つも変わらないことは、別に確かめている
検索結果の順位と、他サイトから貼られたリンクと、社内資料に書かれた URL は、どれも移行で失いやすいものです。
Movable Type は自分が公開したファイルの一覧を持っています。Kiln はそれを読んで、自分が作ろうとしている URL と1件ずつ照合します。結果は「同じ」「移動した」「無くなった」に分かれ、無くなったものが1件でもあれば移行を止める、という使い方ができます。移動したものはリダイレクトの設定を自動で書き出せるので、どうしても変える必要がある場合も読者を迷子にしません。
この照合は、自社のデータでも同じように回せます。MT の本番を止める必要はありません。
ウェブサイトの下に複数のブログがある構成
MT 5 以降のサイトはたいていこの形です。ウェブサイトが1つあり、その下にブログが並び、ウェブサイトのトップページは下のブログの記事を集めて作られている。これはまとめて引き取れます。
読み込みのときに、指定したブログの上にあるウェブサイトと、その下の全ブログを一度に取り出します。テーマはブログごとに分かれたまま、公開は1つのツリーに対して1回です。ブログ横断の記事一覧も、ウェブサイトから配る共通ヘッダーも、MT と同じ書き方のまま動きます。管理画面にはサイトの選択が出て、権限も MT と同じくブログごとに与えます。
3つだけ、人が決める必要のあるものがあり、読み込みの報告に出ます。
- ブログが独自のサブドメインにある場合。ウェブサイトのツリーの外になるので、そのブログのファイルは別の置き先に配信します
- ブログの URL がウェブサイトの URL と完全に同じ場合。MT ではこれが起こり、互いに上書きし合います。ファイルは分けて出すので失われませんが、どちらをどこに置くかの指定が必要です
- 1つのデータベースにウェブサイトが2つ以上ある場合。共有しているのはデータベースとユーザーだけなので、2つの別プロジェクトになります
確かめていない範囲
判断のいちばん大事な材料だと思うので、隠さず並べます。
本番で動いているサイトが、まだありません
これが最大の未検証項目です。検証はすべて検証環境で行っており、実際のアクセスと実際の運用に何週間もさらした経験はありません。筆者は、いま本番を載せ替える段階ではなく、評価と試行に入る段階だと考えています。
比べた相手は Movable Type 8.8.1 の1バージョンだけです。それより古い MT ではデータの持ち方が違う箇所があります。読み込めない項目は作業中にすべて報告に出ますが、一致を保証した範囲には入りません。
Markdown で記事を書いている場合、その変換結果は MT と突き合わせていません。MT が同梱しているものと同じ仕様に沿って作ってありますが、細かい書き方で差が出る可能性は残ります。「改行を変換する」設定の記事は突き合わせ済みです。Textile 記法の記事はそのまま持ってきて報告に出します——自社が該当するかどうかは、移行作業の1段階目の報告で分かります。
MT のプラグインが追加したテンプレートの機能は動きません。どのプラグイン機能が実際に使われているかは、こちらも1段階目で機械的に調べられます。
それでも、判断材料としては足りている
フォームとコメント受け付けの移し先が決まっていて、見た目と URL が変わらないかを確かめたいだけなら、検証環境で実際に回せます。1日かければ、自社のテンプレートとデータで同じ比較ができます。確かめようがないのは「本番で何週間も動くか」の一点です。そこは誰にも先には答えられません。
そこまで確かめたうえで、どう進めるか。移行の進め方と引き返し方に、途中でやめられる形の手順を書きました。