UnxUtils / UnxUpdates による MTOS のビルド
「TortoiseSVN のインストールと MTOS ソースコードのチェックアウト」の続きで、今回は SVN でチェックアウトした MTOS ソースコードのビルドを実行し、デフォルトの言語を日本語にします。
「ビルド」とは、ソースコードに対してコンパイルやリンケージなどを行ない、バイナリファイルなどの実行可能なファイルを作成することを指します。
Windows 上でビルドするため(というかLinux環境の導入)には Cygwin がよく用いられますが、ここでは Six Apart の記事「MTOS を Windows 環境で利用する」で紹介されている、
- UnxUtils
- UnxUpdates
を利用したいと思います。
UnxUtils は Windows で実行可能な UNIX(Linux)コマンドユーティリティです。UnxUpdates には UnxUtils からアップデートされたコマンドが含まれています。
以下、ビルドまでの手順を紹介します。
注:このエントリーでは、AcivePerl がローカル PC にインストールされていることを前提にしています。
1.UnxUtils.zip/UnxUpdates.zipのダウンロード
UnxUtils より「Download UnxUtils」をクリック。

「Download」をクリック。

画面やや下に表示された UnxUtilsSrc.zip と UnxUtils.zip をクリックすればダウンロードが開始します。

または、下記のサイトからでも UnxUtils.zip をダウンロードできます。
UnxUtils.zip GNU utilities for native Win32
UnxUpdates.zip は、UnxUtils.zip のファイル名を変更した、以下のURLでダウンロードできます。とりあえず両方のリンクを掲載しておきます。
なお、検索で一番ヒットした下記のサイトはダウンロードで 403 Forbiden になるので、このエントリーを書いている時点では NG です。
ダウンロードした UnxUtils.zip/UnxUpdates.zip をそれぞれ解凍します。
UnxUpdates.zip の ファイルを、UnxUtils.zip で解凍した中にある、
C:¥UnxUtils¥usr¥local¥wbin
に上書きします。
ここでは、UnxUtils フォルダが C ドライブ直下で作業する前提で進めますが、
可能であれば ActivePerl のある usr フォルダ配下に UnxUtils¥usr¥local を
移動して、
¥usr
¥local
¥include
¥lib
¥share
¥wbin
とすれば、フォルダが整理されて良いでしょう。
2.パスを通す
「パスを通す」というのは、Windows や Linux 等でコマンドを実行するときに、コマンド名だけを入力すれば良い状態を指します。
今回の場合、wbin フォルダ配下にある make というコマンドを実行しますが、パスが通っていないと
C:¥UnxUtils¥usr¥local¥wbin¥make
と入力しなければなりません。また make の中に他のコマンドを実行する記述があると、パスが通っていないと実行されない可能性があります。
「マイコンピュータ」を右クリックして「プロパティ」を選択。

詳細設定タブをクリック。

環境変数をクリック。

「システム環境変数」にある「Path」を選択して「編集」をクリック。

「変数値」の最後にパスの区切り文字";"を記述し、その後に下記を追加します。

C:¥UnxUtils¥usr¥local¥wbin
パスが通っている確認は、
「スタート」→「プログラム」→「アクセサリ」→「コマンドプロンプト」を開いて、チェックアウトしたフォルダに cd コマンドで移動します。
cd C:¥svn
移動したフォルダで、
ls

パスが通っていないと下のようになります。

なお、システム環境変数を設定する前に開いたコマンドプロンプトではパスが通らないので、ウィンドウを閉じて、新しいコマンドプロンプトを開いてください。
3.Makefile の修正
Windows 上で Makefile が正常に動作するための修正を行います。
TortoiseSVN で MTOS をチェックアウトしたフォルダにある「Makefile」を任意のエディタで開き、シングルクォーテーション「'」をダブルクォーテーション「"」に全て置換します。
変換前の例(抜粋)

変換後の例(抜粋)

手でひとつずつ探して置換しても良いですが、エディタの置換機能を使ってまとめて変換した方が誤りがなくて良いでしょう。
4.ビルドする
それでは MTOS をビルドします。
2項のコマンドプロンプトを使います。TortoiseSVN で MTOS をチェックアウトしたフォルダに移動してください。
ビルドする場合は、
C:¥svn¥MTOS> make me
と入力します。Warning 等が出ますが、とりあえず出来上がっているようです。

日本語化にする場合は「MTOS を Windows 環境で利用する」で提示されている
C:¥svn¥MTOS> make me 'BUILD_LANGUAGE=ja'
では現時点で有効にならないようです(Makefile に設定される BUILD_LANGUAGE の値が "en_US" のまま)。正常に動作しないため、シングルクォーテーション「'」をダブルクォーテーション「"」に変更し、
C:¥svn¥MTOS> make me "BUILD_LANGUAGE=ja"
としてください。これで日本語対応のファイル(mt-check.cgi/MT.pm 等)が出力されると思います。

Windows 上で MTOS を動作させる場合は、MTOS フォルダが xampp 等で実行可能な位置にあれば、そのままインストールすることもできます。なお、サイトURL/サイトパスは MTOS 以外の他のフォルダを指定した方が良いでしょう(index.html 等が上書きされるため)。
認識誤りや設定誤り等ありましたらご指摘ください。
2008.01.30
日本語設定の記述を修正しました。
TortoiseSVN のインストールと MTOS ソースコードのチェックアウト
TortoiseSVN のインストールと MTOS ソースコードのチェックアウト方法を紹介します。目的は、Windows で MTOS をビルドすることで、本エントリーはその1回目です。
また「MTOSリリースと日本語化手順」ではかなりいい加減な手順を公開してしまったので、その反省を兼ねてます。
1.TortoiseSVN のダウンロード
TortoiseSVN は、Subversion バージョン管理システム用のオープンソースクライアントです。ファイルやディレクトリを時系列で管理することができます。
TortoiseSVN のサイトの「Download」のリンクをクリック。

ここでは Windows 32bit 用のインストーラを選択。

画面が切り替わってダウンロードが開始します。

「ファイルを保存」をクリックしてインストーラを任意のフォルダに保存します。

2.TortoiseSVN のインストール
保存した(現時点のバージョン)「TortoiseSVN-1.4.7.11792-win32-svn-1.4.6.msi」をクリックするとインストーラが開始するので「Next」をクリック。

「I accept ~」を選択して「Next」をクリック。

インストール先を確認して、このまま(C:¥Program Files¥TortoiseSVN¥)でよければ「Next」をクリック。変更する場合は、「Browse」をクリックしてインストール先を変更してください。

「Install」をクリックするとインストールが開始します。

インストール実行中です。

完了したら「Finish」をクリック。

変更履歴が表示されますので、確認して画面を閉じてください。

変更履歴の表示とほぼ同時に再起動を求められるので、すぐに再起動してよければ「Yes」をクリック。後で再起動する場合は「No」をクリック。

3.MTOS ソースコードのチェックアウト
再起動後、「スタート」→「マイコンピュータ」を起動し、Cドライブ(またはチェックアウトしたいドライブ)を右クリックして
「SVN Checkout...」を選択。SVN のメニューはこのようにドライブやフォルダに表示されます。

「URL of repository:」 に
http://code.sixapart.com/svn/movabletype/tags/mt4.1
を設定し、「Checkout directory:」に
C:¥svn
を設定し、後の項目は画面のような状態で「OK」をクリックします。
なお、XAMPP をローカル PC で動かしているのであれば、ドキュメントルート配下にチェックアウトして、そのまま(チェックアウトしたファイルを移動せずに)PC に MTOS をインストールすることができます。

ファイルのダウンロード(svn では「チェックアウト」と言います)が開始します。すべて終了するまでにしばらく時間がかかります。

「Completed」が表示されれば完了です。「OK」をクリックしてください。

チェックアウトしたファイルは、エクスプローラ上でこのような感じで表示されます。これはファイルが SVN の管理下におかれていることを示すものです。

4.SVNでプロキシ超えをする
プロキシ超えをする場合は、
C:¥Documents and Settings¥ユーザー名¥Application Data¥Subversion
を任意のエディタで開いて、下記のホスト名とポートのコメントアウトを外し、右辺をプロキシサーバの内容に修正します。
### Information for the first group:
# [group1]
# http-proxy-host = proxy1.some-domain-name.com
# http-proxy-port = 80
### Information for the first group:
# [group1]
http-proxy-host = proxy1.some-domain-name.com
http-proxy-port = 80
ただしこれでは不完全かもしれません。
MTOSリリースと日本語化手順
MTOS(Movable Type Open Source)がリリースされました。

MTOS: Movable Type オープンソース・プロジェクト
Movable Type の進化を、さらに加速するための、新たなチャレンジです。2001年の誕生以来、Movable Type はコミュニティーと共に進化を続けてきました。インターネット上で公開されている、豊富なプラグインやテンプレートに加え、いただいたバグレポートやフィードバックも、製品の開発における重要な位置を占めています。このたび開始されるオープソース・プロジェクトは、このような活動を、より一層押し進めることを目的としています。
具体的には、『Movable Type コア部分の、GPL による公開』と『開発プロセスのオープン化』をおこないます。拡張性の高い Movable Type 4 の新アーキテクチャと、オープンソースの開発スタイルを組み合わせることで、スピーディーで、幅広いソリューションの開発を目指します。
MTOS は以下のページからダウンロードできます。
2008.02.01 追記:MTOS 4.1(全ローカライズ版)は「LocalizedPackages/MTOS-4.1」からダウンロードできます。
2008.01.29 追記:MTOS 4.1 日本語版は「MTOS-4.1-jaパッケージの作り方」からダウンロードできます。
以下、日本語化手順を示します。1~3の3通りを示してますので、一通り読み終えてから選択することをお勧めします。
1.日本語化する
MTOS(MTOS-4.1-en)はデフォルトで英語表示になっています。管理画面の日本語化はインストール途中で「Japanese」を選択すれば良いのですが、ブログの表示や文字コード等、すべてを日本語化する場合は、インストール時に下の画面

が表示された時点で、インストールを中断。mt-config.cgi を任意のエディタで開き、一番最後に下記の内容を追加します。
DefaultLanguage ja
MailEncoding ISO-2022-JP
ExportEncoding Shift_JIS
DefaultTimezone 9
CategoryNameNodash 1
NewsboxURL http://www.sixapart.jp/movabletype/news/newsbox.html
LearningNewsURL http://www.movabletype.jp/newsbox.html
NewsURL http://www.sixapart.jp/movabletype/
追加後、mt-config.cgi を元のディレクトリにアップロードして、インストールを続行します。
上記の環境変数の意味は、下記のリンクからドキュメントを参照してください。
- DefaultLanguage
- MailEncoding
- ExportEncoding
- DefaultTimezone
- CategoryNameNodash
- NewsboxURL
- LearningNewsURL
- NewsURL
2.インストールウィザードも日本語化する
上記の変更では、インストールウィザードが途中まで英語表示のままです。インストールウィザードの最初(一番最初の画面は除く)から日本語表示にしたい場合は、インストール前に次のファイルの内容を変更してください。
また、インストール途中で上記の mt-config.cgi の変更もお忘れなく。
mt-check.cgi 60行目
変更前
my $lang = 'en_US';
変更後
my $lang = 'ja';
lib/MT.pm 917行目
変更前
$mt->set_language('en_US');
変更後
$mt->set_language('ja');
3.完全に日本語化する
上記の「インストールウィザードも日本語化する」は、インストールウィザードを中断し、環境変数の設定は mt-config.cgi に依存する(プラグラムを必要以上に手を加えない)手順で書きましたが、インストールウィザードも中断したくない場合、次の部分を書き換えればすべて日本語化できます。
mt-check.cgi 60行目
変更前
my $lang = 'en_US';
変更後
my $lang = 'ja';
lib/MT.pm 917行目
変更前
$mt->set_language('en_US');
変更後
$mt->set_language('ja');
lib/MT.pm 962行目あたり
変更前
$defaults->{DefaultLanguage}{default} = 'en_US';
$defaults->{NewsboxURL}{default} = 'http://www.sixapart.com/movabletype/news/mt4_news_widget.html';
$defaults->{LearningNewsURL}{default} = 'http://learning.movabletype.org/newsbox.html';
$defaults->{SupportURL}{default} = 'http://www.sixapart.com/movabletype/support/';
$defaults->{NewsURL}{default} = 'http://www.sixapart.com/movabletype/news/';
#$defaults->{HelpURL}{default} = '__HELP_URL__';
$defaults->{DefaultTimezone}{default} = '0';
$defaults->{MailEncoding}{default} = 'ISO-8859-1';
$defaults->{ExportEncoding}{default} = '';
$defaults->{LogExportEncoding}{default} = '';
$defaults->{CategoryNameNodash}{default} = '0';
変更後
$defaults->{DefaultLanguage}{default} = 'ja';
$defaults->{NewsboxURL}{default} = 'http://www.sixapart.jp/movabletype/news/newsbox.html';
$defaults->{LearningNewsURL}{default} = 'http://www.movabletype.jp/newsbox.html';
$defaults->{SupportURL}{default} = 'http://www.sixapart.jp/movabletype/support/';
$defaults->{NewsURL}{default} = 'http://www.sixapart.jp/movabletype/';
#$defaults->{HelpURL}{default} = '__HELP_URL__';
$defaults->{DefaultTimezone}{default} = '9';
$defaults->{MailEncoding}{default} = 'ISO-2022-JP';
$defaults->{ExportEncoding}{default} = 'Shift_JIS';
$defaults->{LogExportEncoding}{default} = 'Shift_JIS';
$defaults->{CategoryNameNodash}{default} = '1';
上記の変更は4.1の設定を参考にしています。
なお、Movable Type ドキュメントによれば、LogExportEncoding は ExportEncoding に置き代わっているので、特に設定を変更する必要はありません。
サポートURLは単に日本語サイトに振り替えただけですので、「サポートされる」という意味ではありません。
4.ライセンス
MTOSは無償で商用利用可能です。ユーザー数も無制限、再配布可能です。Movable Type4.1とほぼ同機能です(カスタムフィールドと汎用ウェブサイトテンプレートセットはサポートされていません)。
ただし、Six Apartのサポートはありませんので、コミュニティ等で解決する必要があります。
MTOS のライセンスについては、WebSig24/7の記事の小川さんの資料が役に立つでしょう。
2008.01.26
日本語化手順の内容を2パターンから3パターンに変更しました。
Movable Type 4.1 / MTOS における変数での算術演算子の利用方法
昨日エントリーした「Movable Type 4.1 / MTOS における配列とハッシュの利用方法」に加え、MT4.1/MTOS では算術演算子の利用が可能になりました。
詳細は後述しますが、可能な演算は、
- 加算(+)
- 減算(-)
- 乗算(*)
- 除算(/)
- 剰余(%)
- インクリメント(++)
- デクリメント(--)
で、変数の演算結果を同一変数に保持したり、MTIf タグ等での判定や、判定と同時に演算すること等が可能です。
ということで、こちらについても以下に利用方法をまとめてみました。なお、利用可能と思われるテンプレートタグは下記の通りです。
- MTIf
- MTUnless
- MTGetVar
- MTSetVar
- MTSetVarBlock
- MTSetVarTemplate
1.加算
フォーマット
op モディファイアに"+"または"add"を設定します。定義済みの変数に加算する場合は value モディファイアを記述し、加算したい値を設定します。
値を加算のみする場合
<$mt:setvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:setvar name="[変数名]" op="add" value="[加算値]"$>
加算後に表示する場合
<$mt:getvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:getvar name="[変数名]" op="add" value="[加算値]"$>
加算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="+" value="[加算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="add" value="[加算値]" eq="[比較値]">
サンプル
変数hogeに+1した結果を設定
<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="+" value="1"$>
変数hogeに+1した結果を表示
<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="+" value="1"$>
変数hogeに+1した結果が2であるかを判定
<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="+" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>
2.減算
フォーマット
op モディファイアに"-"または"sub"を設定します。定義済みの変数に減算する場合は value モディファイアを記述し、減算したい値を設定します。
値を減算のみする場合
<$mt:setvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:setvar name="[変数名]" op="sub" value="[減算値]"$>
減算後に表示する場合
<$mt:getvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:getvar name="[変数名]" op="sub" value="[減算値]"$>
減算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="-" value="[減算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="sub" value="[減算値]" eq="[比較値]">
サンプル
変数hogeから-1した結果を設定
<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="-" value="1"$>
変数hogeから-1した結果を表示
<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="-" value="1"$>
変数hogeに-1した結果が2であるかを判定
<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="-" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>
3.乗算
フォーマット
op モディファイアに"*"または"mul"を設定します。定義済みの変数に乗算する場合は value モディファイアを記述し、乗算したい値を設定します。
値を乗算のみする場合
<$mt:setvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:setvar name="[変数名]" op="mul" value="[乗数値]"$>
乗算後に表示する場合
<$mt:getvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:getvar name="[変数名]" op="mul" value="[乗数値]"$>
乗算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="*" value="[乗数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mul" value="[乗数値]" eq="[比較値]">
サンプル
変数hogeに2倍した結果を変数に設定
<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="*" value="2"$>
変数hogeを2倍した結果を表示
<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="*" value="2"$>
変数hogeに2倍した結果が6であるかを判定
<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="*" value="2" eq="6">
OK
<mt:else>
NG
</mt:if>
4.除算
フォーマット
op モディファイアに"/"または"div"を設定します。定義済みの変数に除算する場合は value モディファイアを記述し、除算したい値を設定します。
値を除算のみする場合
<$mt:setvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:setvar name="[変数名]" op="div" value="[除数値]"$>
除算後に表示する場合
<$mt:getvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:getvar name="[変数名]" op="div" value="[除数値]"$>
除算した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="/" value="[除数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="div" value="[除数値]" eq="[比較値]">
サンプル
変数hogeを2で割った結果を変数に設定
<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="/" value="2"$>
変数hogeを2で割った結果を表示
<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="/" value="2"$>
変数hogeを2で割った結果が3であるかを判定
<$mt:setvar name="hoge" value="6"$>
<mt:if name="hoge" op="/" value="2" eq="3">
OK
<mt:else>
NG
</mt:if>
5.剰余
フォーマット
op モディファイアに"%"または"mod"を設定します。定義済みの変数に剰余する場合は value モディファイアを記述し、剰余したい値を設定します。
値を剰余のみする場合
<$mt:setvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:setvar name="[変数名]" op="mod" value="[剰余値]"$>
剰余後に表示する場合
<$mt:getvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:getvar name="[変数名]" op="mod" value="[剰余値]"$>
剰余した結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="%" value="[剰余値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mod" value="[剰余値]" eq="[比較値]">
サンプル
変数hogeを3で割った余りを変数に設定
<$mt:setvar name="hoge" value="5"$>
<$mt:setvar name="hoge" op="%" value="3"$>
変数hogeを3で割った余りを表示
<$mt:setvar name="hoge" value="5"$>
<$mt:getvar name="hoge" op="%" value="3"$>
変数hogeを3で割った余りが1であるかを判定
<$mt:setvar name="hoge" value="7"$>
<mt:if name="hoge" op="%" value="3" eq="1">
OK
<mt:else>
NG
</mt:if>
6.インクリメント
「インクリメント」とは、値に1を加算することを指します。
フォーマット
op モディファイアに"++"または"inc"を設定します。なお、定義済みの変数にしかインクリメントすることはできません。
値をインクリメントのみする場合
<$mt:setvar name="[変数名]" op="++"$>
または
<$mt:setvar name="[変数名]" op="inc"$>
インクリメント後に表示する場合
<$mt:getvar name="[変数名]" op="++"$>
または
<$mt:getvar name="[変数名]" op="inc"$>
インクリメントした結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="++" eq="[比較値]">
または
<mt:if name="[変数名]" op="inc" eq="[比較値]">
サンプル
変数hogeをインクリメント
<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="++"$>
変数hogeをインクリメントした結果を表示
<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="++"$>
変数hogeをインクリメントした結果が2であるかを判定
<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="++" eq="2">
OK
<mt:else>
NG
</mt:if>
7.デクリメント
「デクリメント」とは、値から1を減算することを指します。
フォーマット
op モディファイアに"--"または"dec"を設定します。なお、定義済みの変数にしかデクリメントすることはできません。
値をデクリメントのみする場合
<$mt:setvar name="[変数名]" op="--"$>
または
<$mt:setvar name="[変数名]" op="dec"$>
デクリメント後に表示する場合
<$mt:getvar name="[変数名]" op="--"$>
または
<$mt:getvar name="[変数名]" op="dec"$>
デクリメントした結果を判定する場合(例は等しい場合を判定)
<mt:if name="[変数名]" op="--" eq="[比較値]">
または
<mt:if name="[変数名]" op="dec" eq="[比較値]">
サンプル
変数hogeをデクリメント
<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="--"$>
変数hogeをデクリメントした結果を表示
<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="--"$>
変数hogeをデクリメントした結果が1であるかを判定
<$mt:setvar name="hoge" value="2"$>
<mt:if name="hoge" op="--" eq="1">
OK
<mt:else>
NG
</mt:if>
8.注意事項
文字列や数字を含んだ文字列に演算を行っても何も行われません。また、ベータ1a版の動作確認では、他のリスト系テンプレートタグとの組み合わせでは初期値が1でないと機能しないようです(下記)。
NG(初期値0)
<$mt:setvar name="hoge" value="0"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">
OK(初期値1)
<$mt:setvar name="hoge" value="1"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">
Movable Type 4.1 / MTOS における配列とハッシュの利用方法
公にアナウンスされていないようですが、MT4.1/MTOS では変数で配列とハッシュの操作が可能になり、変数処理がよりプログラマブルになりました。
ということで、以下に利用方法をまとめてみました。
1.配列
配列とは、同じ型のデータを連続的に並べた集合を指します。同一の変数名にインデックス(添え字)を付与することでデータを識別することができます。
例えば、week という変数に、Monday から Sunday までの文字列を設定するには、
week[0] = 'Monday'
week[1] = 'Tuesday'
week[2] = 'Wednesday'
week[3] = 'Thursday'
week[4] = 'Friday'
week[5] = 'Saturday'
week[6] = 'Sunday'
という感じになります。
MTSetVar による配列の設定
MTSetVar タグで配列を設定する方法は2通りあります。name モディファイアの変数名に直接インデックスを記述して、value モディファイアに値を設定するか(下)、
<MTSetVar name="week[0]" value="Mon">
<MTSetVar name="week[1]" value="Tue">
<MTSetVar name="week[2]" value="Wed">
:
index モディファイアを記述し、そこにインデックスを設定します(下)。value モディファイアは同じです。
<MTSetVar name="week" index="0" value="Mon">
<MTSetVar name="week" index="1" value="Tue">
<MTSetVar name="week" index="2" value="Wed">
:
MTSetVarBlock による配列の設定
MTSetVar タグに配列を設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接インデックスを記述し、value モディファイアの代わりにブロック内に値を記述します。
<MTSetVarBlock name="week[0]">
:
</MTSetVarBlock>
<MTSetVarBlock name="week[1]">
:
</MTSetVarBlock>
<MTSetVarBlock name="week[2]">
:
</MTSetVarBlock>
:
または、index モディファイアを記述し、そこにインデックスを設定します(下)。
<MTSetVarBlock name="week" index="0">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" index="1">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" index="2">
:
</MTSetVarBlock>
:
MTFor による配列の設定
単純な数値であれば MTFor で設定することも可能です。
下記に、0~6の値を配列に設定するサンプルを示します。MTFor タグの var モディファイアの変数名に配列のインデックスが設定されます。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTSetVar を記述して、配列のインデックスとなる $x を記述します。
<mt:for var="x" from="0" to="6">
<MTSetVar name="week[$x]" value="$x">
</mt:for>
MTSetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。
<mt:for var="x" from="0" to="6">
<MTSetVar name="week" index="$x" value="$x">
</mt:for>
繰り返し処理による配列の設定
下記に、ブログ記事タイトルを配列の値に設定するサンプルを示します。
<MTEntries>
<MTSetVarBlock name="counter"><$MTGetVar name="__counter__"$></MTSetVarBlock>
<MTSetVarBlock name="entrytitle[$counter]"><$MTEntryTitle$></MTSetVarBlock>
</MTEntries>
2行目の counter は、インデックス値となる __counter__ の値を3行目に直接設定できないため、MTSetVarBlock でワンクッションおいてます。3行目でブログ記事タイトルを配列に設定しています。
配列の取得
配列の内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにインデックスつきの変数名を指定します。
<MTGetVar name="week[0]">
<MTGetVar name="week[1]">
<MTGetVar name="week[2]">
:
実行結果
Mon
Tue
Wed
:
または、MTGetVar(または MTVar)で name モディファイアと別に index モディファイアにインデックス値を指定します。実行結果は同じです。
<MTGetVar name="week" index="0">
<MTGetVar name="week" index="1">
<MTGetVar name="week" index="2">
:
さらに MTFor タグを使うことで、繰り返しによる取得も可能です。
MTFor タグの var モディファイアの値が配列のインデックス値となります。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTGetVar を記述して配列の値を取得します。MTGetVar の name モディファイアにインデックス値となる $x を記述します。
<mt:for var="x" from="0" to="6">
<MTGetVar name="week[$x]">
</mt:for>
MTGetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。
<mt:for var="x" from="0" to="6">
<MTGetVar name="week" index="$x">
</mt:for>
配列の要素数を求める
count 関数により、配列を設定した後の要素数を求めます。
フォーマットは、
<MTGetVar name="count(week)">
で、name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果
7
または、
<MTGetVar name="week" function="count">
と書いても同じです。function モディファイアに関数名 count を記述します。
配列の最後からデータを取得する
pop 関数により、配列の最後からデータを取得し、配列から取得データを削除します。
フォーマットは、
<MTGetVar name="pop(week)">
で、name モディファイアに関数名(pop)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんが配列のインデックスが-1されています)
Sun
または、
<MTGetVar name="week" function="pop">
と書いても同じです。function モディファイアに関数名 pop を記述します。
配列の先頭からデータを取得する
shift 関数により、配列の先頭からデータを取得し、配列から取得データを削除します。
<MTGetVar name="shift(week)">
で、name モディファイアに関数名(shift)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんが配列のインデックスが-1されています)
Mon
または、
<MTGetVar name="week" function="shift">
と書iいても同じです。
2.ハッシュ
ハッシュは、配列のインデックスが文字列となったものです。この文字列となったインデックスを「キー」と呼びます。先の1週間の例では、
week[mon] = 'Monday'
week[tue] = 'Tuesday'
week[wed] = 'Wednesday'
week[thu] = 'Thursday'
week[fri] = 'Friday'
week[sat] = 'Saturday'
week[sun] = 'Sunday'
となります。
MTSetVar にハッシュの設定
MTSetVar タグにハッシュを設定する方法は2通りあります。name モディファイアの変数名に直接キー({}で囲まれた部分)を記述するか(下)、
<MTSetVar name="week{mon}" value="Monday">
<MTSetVar name="week{tue}" value="Tuesday">
:
key モディファイアを記述し、そこにキーを設定します(下)。
<MTSetVar name="week" key="mon" value="Monday">
<MTSetVar name="week" key="tue" value="Tuesday">
:
MTSetVarBlock にハッシュの設定
MTSetVarBlock タグにハッシュを設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接キーを記述し、value 属性の代わりにブロック内に値を記述します。
<MTSetVarBlock name="week{mon}">
:
</MTSetVarBlock>
<MTSetVarBlock name="week{tue}">
:
</MTSetVarBlock>
:
または、key モディファイアを記述し、そこにキーを設定します(下)。
<MTSetVarBlock name="week" key="mon">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" key="tue">
:
</MTSetVarBlock>
:
ハッシュの取得
ハッシュの内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにキーつきの変数名を指定します。
<MTGetVar name="week{mon}">
<MTGetVar name="week{tue}">
:
実行結果
Monday
Tuesday
:
または、MTGetVar(または MTVar)で name モディファイアと別に key モディファイアにインデックス値を指定します。実行結果は同じです。
<MTGetVar name="week" key="mon">
<MTGetVar name="week" key="tue">
:
ハッシュの要素数を求める
ハッシュを設定した後の要素数は次の方法で求めます。
<MTGetVar name="count(week)">
name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果
7
または、
<MTGetVar name="week" function="count">
と書いても同じです。
ハッシュから要素を削除する
ハッシュから指定したキーの要素を取得し、同時にハッシュから該当要素を削除します。
<MTGetVar name="delete(week)" key="a">
name モディファイアに要素数を求める関数名(delete)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんがハッシュのキーが削除されています)
Monday
または、
<MTGetVar name="week" key="a" function="delete">
と書いても同じです。
以上です。
さらに複雑な制御も可能と思われますがとりあえずこの辺で。
MTOS(Movable Type オープンソース版)Nightly Build リリース
オープンソース版の MTOS(Movable Type Open Source)の Nightly Build がリリースされました。

As of today, and forever forward, Movable Type is open source. This means you can freely modify, redistribute, and use Movable Type for any purpose you choose. Just want the details and downloads? Skip to the bottom. But you might like the story of how we got here.
下記のダウンロードページにある「» Browse the nightly build archive」のリンクより、MTOSのビルドアーカイブをダウンロードできます。URLが変更されていますので、下記のリンクより取得してください。
バージョンは 4.1 となっています。
その他、冒頭の記事中に掲載された、MTOSの特徴等を抜粋でピックアップしておきます。
- MTOS の機能は MT4.0 と同等です。
- MT4で動作するプラグイン、テーマ、テンプレート、デザイン、およびAPIはMTOSでも動作します。
- MTOSは、ブログ数無制限、ユーザ数無制限、およびOpenIDによるサインインがサポートされた唯一のオープンソースの1つです。
- MTOSはスタンダードなGPLライセンスでリリースされます。


