MTの環境変数を知ろう
何事も無かったようにブログを再開。本日はMovable Type Advent Calendar 2013の12日目です。
テーマはMTのリリースノートに名前を載せる秘訣Movable Typeの環境変数です。
どうもMTのインストールやアップグレードの敷居が高く思われているようで、ちゃんとコツを覚えておけばそう難しくはないんですが、それをすこーし低くしてみたいなと思っているのですが、その事前知識として環境変数を知っておくとよいです。
MTの環境変数とは
MTの環境変数がどのようなものかはmt-config.cgiの内容を少しでもみたことがあれば何となくわかっているかと思います。
環境変数を端的に説明するものとして公式っぽいドキュメントには次のような説明があります。
誤解を恐れず一言で表すと「mt-config.cgiで設定できる項目」になります。
もう少し言葉を足すと、Movable Typeの設定で「環境変数」と呼ばれ、mt-config.cgiで設定を行います。
Movable Type の設定ファイル mt-config.cgi で設定可能な環境変数の紹介
以前は私も上記のように認識していましたが今は少し違っていて、環境変数は環境で一意の設定という説明が適切ではないかと考えています。
使い方 (mt-config.cgi)
環境変数は主にmt-config.cgiファイル内に記述して使います。
なぜ「主に」かというと、環境変数はデータベースにも保存されているためですが、まずはmt-config.cgiの内容を見てみましょう。
サンプルとしてはこんな感じ。
CGIPath /cgi-bin/mt/ EmainAdressMain mail@example.com DebugMode 0 #ExelionMode 1 PluginPath plugins PluginPath plugin2
設定内容はパス、1か0によるオンオフ、メールアドレスなど自由入力、などなど様々な指定があります。中には複数行に記述することで配列として機能するものもあります。
mt-config.cgi内では以下のフォーマットを守って記述します。
- 行頭に環境変数名、次に半角スペースによる区切り、最後に設定する値、の順序で記述する
- 改行コードはLF
- 行頭が#の場合はコメント行
- 一行に一つの設定(設定を複数行にまたぐことはできない)
- 環境変数名は大文字・小文字を区別しない
- 配列にならない設定は後に記述したものが有効になる
上記のサンプルでいえばCGIPathが環境変数名、/cgi-bin/mt/が「設定する値」です。行頭が#のExelionModeはコメント行となり、指定した1は機能しません。区切りである半角スペースの数に制限はないのでサンプルのように設定の桁を揃えることも可能です。
使い方 (mt_configテーブル)
さきほどちらっと触れましたが、環境変数の値はデータベースにも保存されています。
保存されている場所はmt_configテーブル内のレコードです。
たとえば私の環境のmt_configをのぞいてみるとこんな感じです。
見ての通り、mt-config.cgiと同様に、環境変数名+半角スペース+値、というフォーマットです。
このmt_configテーブルについて間違えてはいけないのは、mt-config.cgiの設定が保存されるのではないという事です。
mt_configテーブルの設定はmt-config.cgiとは別に保存されています。
たとえばシステムレベルの全般設定画面の設定のほとんどは環境変数としてmt_configテーブルに保存されます。
優先順位
環境変数はmt-config.cgiに設定し、データベースのmt_configテーブルにも保存されていると説明しました。
では、両方に設定があるときはどうなるのか、環境変数の設定は次の優先順位で決定します。
- mt-config.cgiの設定
- mt_configテーブルの設定
- 環境変数の初期値
環境変数には初期値が存在するものがあり、mt-config.cgiとmt_configのどちらにも設定がない場合には初期値が利用されます。
私が環境変数を環境で一意の設定と感じるのはこの動作が理由です。
まとめ(仮)
ここまで押さえておけば環境変数については大丈夫でしょう。
環境変数に興味がわいた方は環境変数リファレンスをのぞいてみると新しい発見があるかもしれません。
環境変数をもう少し深く知りたい方は、もう少しだけおつきあいください。
定義のいらない自由な宣言
環境変数は定義の必要がなく、プラグインなどを作らなくても自由な宣言ができます。
たとえばmt-config.cgiに環境変数リファレンスにないSuperModeを設定してもエラーになったりはしません。
(※もし環境変数SuperModeをご利用のプラグインがありましたらお知らせ願います)
SuperMode 1
必要に応じて自由に設定してください。
とはいえ好きに書いて何に使えるのか、というと……。
テンプレートタグで使う
環境変数はテンプレートタグで取得することができます。
取得するために専用のテンプレートタグはありませんが、少し独特な書き方をします。
たとえば、環境変数EmailAddressMainを取得したい場合には次のようなテンプレートを記述します。
<$MTGetVar name="config.EmailAddressMain"$>
このように変数を扱うタグでconfig.環境変数名(コンフィグドット変数名)という書式で変数名を指定すると環境変数の値が扱えます。
環境変数の値で分岐する記述も可能です。
<$MTIf name="config.DebugMode"$>
DebugMode が有効です
<MTElse>
DebugMode ではありません
</MTIf>
ここで自由に宣言した環境変数の出番です。
<$MTIf name="config.developer"$>
ここは開発環境です。
</MTIf>
このように環境固有の分岐を行うことができます。
これはデータに手を加えたくない場合、プラグインの追加など構成を変更したくない場合に有効です。
ここまで
本当はもう少し書きたいんですが、12日目が過ぎてしまいそうなので今日はここまで。
では、またいつの日か。
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
コメントはまだありません。