技術資料

Movable Typeプラグイン開発:独自オブジェクトの定義と操作ガイド

作成日:2025.09.26

Movable Typeのプラグイン開発において、独自オブジェクトの定義と操作方法を具体例とともに解説します。config.yamlでの設定記述から、Perlモジュールでのオブジェクト実装、そして基本的なロードや保存の操作まで、一連の手順を紹介。

Movable Type でプラグインを開発する際に、独自のオブジェクトを新規に作成する方法について解説します。

今回は MT::Shop というオブジェクトを MT:Entry の子オブジェクトとして追加するプラグインを例に説明していきます。

MTプラグイン開発の基本的な手順については、Movable Typeプラグイン開発入門:第一回 基本的なプラグインの作成方法 などを参照。

config.yaml の記述

新規にオブジェクトを追加するには、プラグインの config.yaml ファイルに以下のように記述します。

schema_version: 1.00
object_types:
    shop: MT::Shop

上記の例では、shop というオブジェクトタイプを MT::Shop クラスとして定義しています。

schema_version の値は、プラグインのアップデートなどによりテーブルのカラムを追加・変更した場合などに変更します。

MT/shop.pm の作成

続いて、プラグインディレクトリ内に lib/MT/shop.pm というファイルを作成し、以下のように記述します。

package MT::Shop;
use strict;
use base qw( MT::Object );

__PACKAGE__->install_properties ({
    column_defs => {
        'id' => 'integer not null auto_increment',
        'entry_id' => 'integer not null',
        'name' => 'text',
        'tel' => 'text',
        'address' => 'text',
        'enabled' => 'integer',
    },
    indexes => {
        id => 1,
        entry_id => 1,
    },
    defaults => {
        'enable' => 0,
    },
    child_of => 'MT::Entry',
    audit => 1,
    datasource  => 'shop',
    primary_key => 'id',
    class_type  => 'shop',
});

1;

上記の例では、MT::Shop クラスを MT::Object クラスから継承し、install_properties メソッドでオブジェクトのプロパティを定義しています。

各プロパティの意味は以下の通りです。

column_defs
オブジェクトのカラム定義をハッシュリファレンスで指定します。上記の例では、identry_idnameteladdressenabled の6つのカラムを定義しています。
indexes
インデックスを設定するカラムをハッシュリファレンスで指定します。上記の例では、identry_id にインデックスを設定しています。
defaults
カラムのデフォルト値をハッシュリファレンスで指定します。上記の例では、enabled カラムのデフォルト値を0に設定しています。
child_of
このオブジェクトが属する親オブジェクトを指定します。上記の例では、MT::Entry の子オブジェクトとして定義しています。
audit
オブジェクトの作成日時や更新日時を自動的に管理するかどうかを指定します。1 を指定すると有効になります。
自動的に管理されるカラムは以下の通りです。
  • created_on
  • created_by
  • modified_on
  • modified_by
datasource
データベースのテーブル名を指定します。上記の例では、shop が指定されているため mt_shop というテーブル名になります。
primary_key
プライマリキーとなるカラムを指定します。上記の例では、id カラムがプライマリキーになります。
class_type
オブジェクトのタイプを指定します。上記の例では、shop が指定されています。

動作確認

以上で、MT::Shop オブジェクトの定義は完了です。MTの管理画面でプラグインを有効化すると、データベースに mt_shop テーブルが作成されます。

独自オブジェクトの操作方法

独自オブジェクトの操作は、他の MT オブジェクトと同様に行います。以下に基本的な操作例を示します。

my $entry_id = 123;
my $shop = MT->model('shop')->load( { entry_id => $entry_id } );
if (!$shop) {
    $shop = MT->model('shop')->new;
    $shop->entry_id($entry_id);
}

$shop->name('My Shop');
$shop->tel('123-456-7890');
$shop->address('奈良県奈良市西大寺本町12345');
$shop->enabled(1);
$shop->save() or die $shop->errstr();

上記の例では、entry_id が 123 の MT::Shop オブジェクトをロードし、存在しない場合は新規作成しています。その後、各カラムに値を設定し、save メソッドで保存しています。

このようにして、独自オブジェクトを定義し、操作することができます。

この記事を書いた人

※上が私です。

奈良市を拠点に、26年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールWeb制作会社様向け業務案内一般企業様向け業務案内もご覧くださいね。

Movable Type システムログ出力ガイド ― MT::App の log メソッドでエラーメッセージを記録する方法

2025.06.03

Movable Type のシステムログにエラーメッセージや各種情報を出力する方法について、MT::App の log メソッドを利用した具体的な実装例を解説します。ログレベル、クラス、カテゴリを指定することにより、出力内容を柔軟に分類・管理できる仕組みを詳述し、管理画面でのログ確認方法やデータベーステーブルでの確認方法も合わせて説明します。

Movable Type Perl

Movable Type プラグインで実現するエラー画面・ログイン画面の出力方法

2025.04.10

Movable Typeプラグイン開発において、エラー画面やログイン画面をどのように出力すべきか、その基本手法を具体的なコード例を交えて解説します。MT::App の show_error および show_login メソッドの利用方法や各オプションの効果を理解することで、プラグインにおけるユーザーインターフェースのカスタマイズが容易になります。

Movable Type Perl

Movable Type プラグインによるユーザーアクションメニュー制御 ― condition設定の実践的解法

2025.04.07

Movable Type プラグインを使用したユーザーアクションメニューの制御方法を解説します。特に、config.yamlでの condition 設定の制限とその回避策について、core_user_actions のオーバーライドによる実践的な解決方法を、具体的なコード例とともに紹介します。

Movable Type Perl

Movable Typeプラグイン入門:MT::Author で実現するロール付与の手法

2025.03.26

本記事では、Movable Type のプラグイン開発において、MT::Author オブジェクトを利用したユーザーへのロール付与手法を詳しく解説します。具体的なコード例とともに、ユーザー、ブログ、ロールの各オブジェクトの取得方法や、add_role メソッドを活用したロール付与処理の流れを紹介。実務に直結する実装ポイントを分かりやすく解説しています。

Movable Type Perl

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP