Kiln

Movable Type をやめても、サイトは作り直さない

Kiln は既存の Movable Type サイトの記事・テンプレート・URL を引き取り、同じ HTML をあらかじめ書き出したファイル(静的ファイル)として出力します。URL も見た目も変わりません。公開サーバーで Perl とデータベースを動かし続ける必要がなくなり、記事1本の修正で全ページを作り直すこともなくなります。MIT ライセンスのオープンソースです。

いま判断していただきたいのは、本番を載せ替えるかどうかではありません。検証環境で自社のデータとテンプレートを一度通してみるかどうかです。MT の本番には触らず、データベースの写し1つで済みます。

本番運用の実績はまだありません。商用サポートの窓口もありません。制約は後半の「正直に書いておくこと」にまとめました。

59パターン・27ファイル本物の Movable Type 8.8.1 が出した HTML と、1文字も違わない
7,500通りどの順で編集しても、変更分だけを公開した結果が、全ページを作り直した結果と一致する
このページ自体いま読んでいるこのページも、Kiln が書き出した静的ファイル

何を引き取り、何が変わるか

引き取るのは MT のデータベース1つだけです。記事、カテゴリ、タグ、アイテム、コメント、コンテンツタイプ、カスタムフィールド、そしてテンプレートまで、すべてそこから読みます。MT のインストールを動かす必要はありません。

判断軸Movable Type の構成Kiln の構成
記事1本を直したときの公開その記事が載るページをまとめて作り直す変更が影響するページだけを作り直す
公開サーバーに必要なものPerl、CGI、データベース接続HTML ファイルを置ける場所だけ
管理画面の置き場所公開サーバー上手元か社内。公開側に動くプログラムが無い
テンプレートの履歴と巻き戻しデータベースの中。差分も履歴もないファイルなので Git の履歴とレビューが使える
サイト内検索mt-search.cgi が毎回検索する公開時に索引を書き出し、ブラウザ側で絞り込む
ライセンス費用年額の製品ライセンスなし(MIT ライセンス)
障害時の問い合わせ先ベンダーまたは制作会社なし。社内か制作会社で対応する

「変更が影響するページだけ」が本当に正しいかは、機械検査で確かめてあります。どんな編集をどの順で行っても、必要な分だけ作り直した結果が全ページを作り直した結果と1文字も違わないことを、7,500通りの編集の組み合わせで検証しています。

記事の書き方も、情報設計も、サイトの見た目も変わりません。変わるのは公開の仕組みだけです。だからリニューアルとは切り離し、その前か後に行う作業になります。

「変わらない」の根拠と、その限界

本物の Movable Type 8.8.1 を実際に動かし、同じ素材から出た HTML を1文字ずつ比べています。改行や空白をそろえる処理も挟みません。確かめたのは6通りで、それぞれ別の疑いに答えています。

比べた内容一致
テンプレートの機能を1つずつ59パターンすべて
同じ59パターンを、MT のデータを読み込んだあとの状態から59パターンすべて
見本サイト1つの公開を MT の「サイトの再構築」と27ファイルすべて
MT のデータを入れて公開するまでの通し運転27ファイルすべて
同じ公開を、記事の保存先を替えて27ファイルすべて
生成される URL を MT 自身の公開記録と照合全件

比較に使ったのはテンプレートの機能を一通り並べた見本サイトで、企業サイトとしては小規模です。だから、この結果で言えるのは「Kiln はテンプレートを MT と同じに読む」というところまでです。自社のサイトが通るかどうかは、別に確かめる必要があります。その確かめ方は変わらないと言える根拠に書きました。

検索順位と外部からのリンクを守るうえで効くのは最後の行です。MT は、自分が公開したファイルの一覧を持っています。Kiln はその一覧と、これから作る URL を1件ずつ照合します。消える URL が1件でもあれば、移行を止められます。

記事を書く画面は、日本語で動きます

移行したあとに記事を書く場所が必要です。Kiln には管理画面があり、ブラウザの設定に従って日本語で表示されます。MT にもある用語は、MT と同じ呼び方にしました(アイテム、サインイン)。

Kiln の管理画面。左の列に記事の一覧、中央に編集欄、右に実際のテンプレートで描いたプレビューが並び、項目名はすべて日本語で表示されている。
説明用に作ったサイトの画面です。左から記事の一覧、編集欄、プレビュー。右のプレビューは、公開に使うのと同じテンプレートで描いています。上の「サイトを公開」を押すまで、保存した変更は公開されません。画面が小さいときは、画像を開くと原寸で読めます。

日々の運用でいちばん変わるのは、公開のしかたです。保存しても、まだ公開されません。保存した変更は溜まっていき、「サイトを公開」を押したときにまとめて公開されます。

画面ごとの使い方はユーザーマニュアルにあります。

3段階目まで、MT の本番には触りません

移行は4段階に分かれています。やめても失うのは調査の時間だけです。

段階やることやめる費用
1. 読み込みデータベースの写しから記事・テンプレート・URL を取り出すゼロ
2. 突き合わせ自社のデータで MT の出力と1文字ずつ比べるゼロ
3. 並行運転MT で記事を書き続けながら、Kiln 側も公開しておくゼロ
4. 切り替え公開先を Kiln の出力に向ける公開先を戻すだけ

判断の材料は、2段階目で出てくる報告です。自社のテンプレートが通るか、プラグインの機能がいくつ足りないか、URL が1件も消えないか。推測ではなく、数で出ます。段階ごとの中身は移行の進め方と引き返し方にあります。

向いているサイトと、いま見送るべきサイト

向いている

  • 記事数が数千を超えて、全ページの作り直しが運用の邪魔になっている
  • テンプレートが標準に近い
  • 公開側のセキュリティ対応に毎回追われている
  • ウェブサイトの下に複数のブログを置いている(1つのサイトとしてまとめて公開され、ブログをまたぐ一覧も MT と同じテンプレートの書き方で作れます)

いま見送るべき

  • 本番停止時に、契約上の問い合わせ窓口が必要な組織
  • お問い合わせフォームやコメントの受け付けを止められず、移し先も決められない
  • 会員限定ページや Basic 認証を MT 側で持っている
  • プラグインの機能がテンプレートに深く入り込んでいる

MT のバージョンが 8.8.1 より古い場合は、確かめてから決めてください。読み込めない項目は作業中にすべて報告に出るので、1段階目を回せば判断できます。

ランニングコストはたいてい下がります。下がった分は、障害が起きたときに自分たちで調べる体制に回す必要があります。そこが実質的な価格です。金額の目安と体制は費用・体制・向き不向きにまとめました。

正直に書いておくこと

Kiln で本番運用されているサイトは、まだありません。互換性は本物の Movable Type 8.8.1 と6通りに突き合わせて確かめてありますが、実際のアクセスと実際の運用に何週間もさらした実績がありません。商用サポートの窓口もありません。本番停止時に契約上の連絡先が必要な組織では、現時点では採用できません。

そして「投稿を受け付ける」機能は静的化すると止まります。お問い合わせフォームと、コメントの受け付けです。静的なページには送信先がないので、Kiln はそれを受け取るふりをする仕組みを持っていません。どちらも外部サービスに移すのが定石ですが、Kiln がそのサービスを同梱しているわけではありません。移し先が必要になるのは4段階目の切り替えです。1段階目と2段階目の検証は、決まっていなくても回せます。

開発が止まったらどうなるかは、先に答えておきます。Kiln は個人が開発しているソフトウェアで、会社が後ろにいるわけではありません。開発が止まる可能性は十分あります。そのとき失われるのは今後の改善で、動いているサイトではありません。公開されるのは HTML ファイルなので、Kiln が無くても配信は続きます。コードは MIT ライセンスなので、社内に抱えて自分たちで直すことも、制作会社に引き取ってもらうこともできます。乗り換えが必要になった場合も、記事のデータは JSON またはデータベースに平文で入っていて、取り出せます。

次の一歩

MT のデータベースの写しを1つ用意して、テンプレートを読める方1人に、このページの URL と下のブロックを渡してください。標準テンプレートに近いサイトなら、数日で結果が出ます。

技術担当者に渡す分

必要なのは Node.js 22 以上だけです。データベースサーバーも Perl も要りません。npm には公開していないので、リポジトリを clone してビルドします。本番には触りません。

git clone git@github.com:matsu911/kiln.git
cd kiln && npm install && npm run build
export PATH="$PWD/node_modules/.bin:$PATH"

kiln import sqlite:/path/to/mt.db --out ~/mysite --timezone Asia/Tokyo
cd ~/mysite && kiln check         # 読めないテンプレートを行番号つきで出す
kiln urls diff /path/to/mt.db    # 生成する URL を MT の公開記録と照合する

kiln check が何も言わず、kiln urls diff が消える URL を1件も出さなければ、2段階目は通っています。導入の手順はインストールマニュアルにあります。MySQL のデータベースは SQLite に書き出してから渡します。

何を決めて、何を材料にするかは費用・体制・向き不向きの最後に表でまとめました。社内に持ち帰るときはそこを使ってください。

導入の相談や、うまくいかなかった報告は GitHub の Issues で受けています。返答の期限は約束できませんが、報告は今後の改善の優先順位に反映します。

何が変わるのか

速くなるのは公開作業です。更新のたびに全ページを作り直す構造をやめると、待ち時間と障害の両方が消えます。

変わらないと言える根拠

記事ページとテンプレートは本物の MT と1文字ずつ比べてあります。止まるのは「読者が何かを送る」機能だけです。先にそちらを読んでください。

移行の進め方と引き返し方

4段階に分け、どの段階でも MT をそのまま動かし続けられる形で進めます。引き返す判断は3段階目まで取り消し費用ゼロで持てます。

費用・体制・向き不向き

ソフトウェアは無料です。値段にあたるのは、サポート契約が存在しないことと、障害を自分たちで調べる体制です。

設計の判断、検証の手順、技術的な詳細はリポジトリの docs/(21本)にあります。日本語で書いてあるのは、インストールマニュアル、ユーザーマニュアル、Cloudflare の調査メモの3本です。ほかは英語です。