第2回】レジストリ、YAMLについて
このページは既にhttps://github.com/movabletype/Documentation/wiki/Japanese-plugin-dev-1-2に移行されています。
はじめに
シックス・アパートの上野初仁(はつひと)です。
今回は、プラグイン開発の中心となるMovable Typeのレジストリについてと、プラグインやテーマのレジストリ設定に利用するYAML形式のファイルについて解説します。
レジストリの解説
レジストリとはMovable Typeの内部構造を階層的に保持するための仕組みです。階層的に設定を保持するという意味でMS Windowsのレジストリと似ています。
MT::Core ($MT_DIR/lib/MT/Core.pm)にある"$core_registry"をご覧ください。設定項目や初期値が細かく記述されていることが解ります。現時点で内容を把握する必要はありませんが、プラグイン開発の際に迷った場合など参照する事で解決策が見つかる場合もあります。
BEGIN { $core_registry = { version => MT->VERSION, schema_version => MT->schema_version, object_drivers => { 'mysql' => { label => 'MySQL Database (Recommended)', dbd_package => 'DBD::mysql', config_package => 'DBI::mysql', display => [ 'dbserver', 'dbname', 'dbuser', 'dbpass', 'dbport', 'dbsocket' ], }, (中略) applications => { 'xmlrpc' => { handler => 'MT::XMLRPCServer', }, 'atom' => { handler => 'MT::AtomServer', }, 'feeds' => { handler => 'MT::App::ActivityFeeds', }, 'view' => { handler => 'MT::App::Viewer', }, 'notify' => { handler => 'MT::App::NotifyList', }, 'tb' => { handler => 'MT::App::Trackback', }, 'upgrade' => { handler => 'MT::App::Upgrade', }, 'wizard' => { handler => 'MT::App::Wizard', }, 'comments' => { handler => 'MT::App::Comments', tags => sub { MT->app->load_core_tags }, }, 'search' => { handler => 'MT::App::Search::Legacy', tags => sub { MT->app->load_core_tags }, },
他にもたくさんのレジストリ情報が記載されています。たとえば、メニューに関連するレジストリの初期値はMT::App::CMS ($MT_DIR/lib/MT/App/CMS.pm)に記載されています("&core_menus", "&core_compose_menus")。
sub core_menus { my $app = shift; return { 'website' => { label => "Websites", order => 50, }, 'blog' => { label => "Blogs", order => 100, }, 'entry' => { label => "Entries", order => 200, }, (略) 'tools:do_export_theme' => { order => 10000, mode => 'do_export_theme', view => [ 'blog', 'website' ], display => 0, }, 'tools:backup' => { order => 10000, mode => 'backup', view => [ "blog", 'website', 'system' ], display => 0, }, }; }
sub core_compose_menus { my $app = shift; return { compose_menus => { label => 'Create New', order => 100, menus => { 'entry' => { label => "Entry", order => 100, mode => 'view', args => { _type => 'entry' }, permission => 'create_post', view => "blog", }, (略) 'blog:create' => { label => "Blog", order => 400, mode => 'view', args => { _type => 'blog' }, permit_action => 'use_blog:create_menu', view => "website", }, }, }, }; }
プラグインにより設定や表示を変更する場合、レジストリへ項目を上書きや追加します。これによりMovable Typeをカスタマイズすることができます。
YAMLとは?YAMLの利便性
YAMLは"YAML Ain't a Markup Language"の略で、HTMLのようなマークアップ言語ではありません。テキストで書かれデータ構造を記載するのに適した記法になっています。同じような理由でつかわれる言語としてXMLがありますが、YAMLの記載がシンプルであることより、設定やAPIからのデータ転送などにもYAMLが利用することが増えてきています。
XML <xml version="1.0"> <address> <first_name>Taro</first_name> <last_name>YAMADA</last_name> <email>ytaro@example.com</email> <company> <name>Six Apart Ltd.</name> <street_address> 5-2-39 Akasaka, Entsuji-Gadelius Bldg. 7F, Minato-ku, Tokyo, 107-0052, Japan </street_address> </company> </address>
YAML address: first_name: Taro last_name: YAMADA email: ytaro@example.com company: name: Six Apart Ltd. street_address: > 5-2-39 Akasaka, Entsuji-Gadelius Bldg. 7F, Minato-ku, Tokyo, 107-0052, Japan
Movable Typeのプラグイン開発やテーマ作成でもYAMLは活用されています(config.yaml, theme.yaml, etc.)
id: MyPlugin01 name: Sample plugin registration version: 1.0 description: Sample plugin registration author_name: Plugin author author_link: http://www.example.com/about/ doc_link: http://www.example.com/docs/
YAMLの文法
YAMLの記述方法はとてもシンプルです。インデントをきっちりそろえる必要があるのが注意点です。
インデント(スペース2個、もしくは4個が多い。TABは利用できません) parent: child: grandchild: hoge
インデント 悪い例(childとfooが、grandchildとbarが同じインデントなっていない。
parent: child: grandchild: hoge foo: bar: foobar
同じ階層なものはインデントを明示的に合わせる必要があります。)
配列 - foo - bar
ハッシュ child01: foo child02: bar
改行を保持したままの記述(設定内容 2行) description: | StyleCatcher lets you easily browse through styles and then apply them to your blog in just a few clicks. => StyleCatcher lets you easily browse through styles and then apply them to your blog in just a few clicks.
改行を保持しない記述(設定内容 1行、改行をスペース一文字に置き換え) description: > StyleCatcher lets you easily browse through styles and then apply them to your blog in just a few clicks. => StyleCatcher lets you easily browse through styles and then apply them to your blog in just a few clicks.
まとめ
今回はプラグイン開発に必須なレジストリの概念と、YAMLの利用方法について解説しました。
レジストリについてはハードルが高いと思いますが、プラグイン開発を進めると徐々に解ってきますので次のステップに進みましょう。
プラグイン開発ステップ・バイ・ステップ インデックス
- 第1回】プラグイン開発のためのファーストステップ
- 第2回】レジストリ、YAMLについて
- 第3回】Config Directiveについて
- 第4回】プラグインのローカライゼーションについて
- 第5回】テストドリブンでのプラグインの開発について
- 第6回】グローバル・モディファイアプラグインの開発について
- スタートガイド
- 導入ガイド
- 操作ガイド
- 管理者ガイド
- サイト管理
- [MTA] LDAP 連携
- ユーザーとグループの管理
- システム管理
- [MTA][CLOUD]サーバー配信
- ユーザーガイド
- 管理画面での検索と置換
- コンテンツの作成と管理
- Movable Type で利用できるコンテンツの種類について
- コンテンツデータの管理
- 記事の管理
- ウェブページの管理
- タグの管理
- アセットの管理
- コメント/トラックバックの管理とスパム対策
- デザイナーガイド
- 参考情報
-
2024.12.11
-
2024.12.11
-
2024.12.11
-
2024.12.11
-
2024.11.06