3ステップでできる!かんたんMovableTypeの高速化(PHPと外部ファイル化)
このサイトはMovableTypeにて運用していますが、元々非力なサーバだったこともあり、記事数30ですでに再構築にかなりの時間がかかるようになってしまいました。
そこでPHP化と外部ファイル化を行ったところ、構築時間が1/5まで短縮することができました。
以下やり方をまとめます。
動作対象
- サーバでPHPが使える
- PHPでincludeが使える
- httpd.confか、.htaccessにてブログをおいている場所でapacheの設定変更ができる。(AddTypeが使える)
- サーバでFTPが使える
3つ目が出来なくてもファイル名を.phpにすることで高速化はできますが、URLは変わってしまいます。
高速化の仕組み
大体のブログは、
| ヘッダ | |
| 本文 | サイドバー (左右) |
| フッタ | |
のようなページ構成になっていると思います。本文は個々のページで異なりますが、他の部分はほとんど同じだと思います。これが記事数分+カテゴリ別や月別一覧分あります。
MovableTypeで静的に構築する設定になっていた場合、これら全ページが毎回作成されます。新しい記事が追加された場合には過去に書いた記事もサイドバー部分の内容が最新記事一覧の追加などで変わるためいちいち作り変えが起こります。またこのサイドバー部分は作成時月毎やカテゴリ毎の記事数などを集計する必要があって重い処理になりますが、標準状態だと各ページごとに毎回集計されるので時間がかかってしまっています。
そこで以下のやり方でサイドバーの部分を別のファイルに一度書き出し、全てのページでその部分だけ別のファイルを動的に読み込むことで高速化を図ります。その場合、過去の記事分は作り変える必要がなく、また作り変えたとしてもそれほど重い処理にはなりません。
ちなみに動的に読み込みといっても、読み込まれるファイルは静的に作られたものなのでページ閲覧時に遅くなることはありません。
制限
外部ファイル化した部分はどのページでも共通になりますので、ページごとに変えている部分は共通化できません。例えばヘッダ部分は共通化できるように見えますが、ページのタイトル(ブラウザの上に出ている名前)がページごとに異なっているため共通化すると同じ名前になってしまいます。(フッタは共通可能ですが、元々軽い処理で変更箇所が多い割りにあまり効果がありません。)
やり方
以下の3ステップで実現できます。
1.外部化したい部分(横枠)を別ファイル化する
管理画面のメニューの「デザイン」「テンプレート」→「インデックステンプレートを作成」
テンプレート作成画面で以下のように作成
名前:サイドバーファイル(任意)
内容: <$MTInclude module=”サイドバー”$>
出力ファイル名:sidebar.inc
これを保存し、「このテンプレートを再構築する」をクリックします。

これで、サイトパスの直下にsidebar.incという横枠部分のページが作られます。一度FTPで落とすか、http://ブログURL/sidebar.incをブラウザで見て確認しましょう。
ちなみにサイトパスは管理画面のメニューの「設定」「ブログの設定」「公開」で確認できます。
![]()
2.PHPを有効にする
URLが変わらないようにHTMLでそのままPHPが動作するようにしています。
・サイトパスに、
AddType application/x-httpd-php .htmlと1行書いた.htaccessというファイルを置く。
これで各ページでPHPが使えます。ここまでは各ページに何も影響がないと思います。
3.テンプレートを修正する
先ほど作ったsidebar.incを動的に読み込むようにします。横枠は、全てのページが、フッターテンプレートより作成されているようです。(MobableType4.1にて。)
ですのでフッターテンプレートを修正するのみです。
管理画面のメニューの「デザイン」「テンプレート」→右側の「テンプレートモジュール」→「フッター」で以下のように編集
<$MTInclude module=”サイドバー”$>
↓
<?php include “(ブログのサイトパス)/sidebar.inc”;?>
(ブログのサイトパス)は上で確認したサイトパスをフルパスにて指定してください。相対パスだと月別ページなどで問題が出ます。
これを保存し、ページすべてを再構築します。
これで終了です。
終わったら
ブログの各記事に問題ないか、確認してみてください。もしエラーが出る場合は、まずは3.を元に戻し再構築し、ページを直した上で再度設定を確認してみてください。
ちなみに各記事をFTPなどでダウンロードして確認すると横枠の部分が書かれず先ほどの
<?php include "(ブログのサイトパス)/sidebar.inc";?>
がそのまま書かれていると思います。
これにより、再構築時この部分は1行出力されるだけですみ、閲覧時に一つだけ作成したsidebar.incを各ページで使いまわすことで高速化が図れます。
sidebar.incは外部から見えても問題ないと思いますが、気になる方は
.htaccessに
<FilesMatch "\.inc$"> Order allow,deny Deny from all </FilesMatch>
などを追記し隠しましょう。






