プラグイン(拡張アプリ)開発の基本

プラグイン(拡張アプリ)として拡張機能を作ることにより、様々な拡張を1パッケージにして、ブログ単位でインストール出来るようになります。

拡張できる機能

  • 校正オプションの拡張
  • フック処理の拡張
  • Validatorの拡張
  • 独自GETモジュールの追加
  • 独自POSTモジュールの追加
  • テンプレートの挿入(テンプレートの拡張)

最低限必要なファイル

プラグイン(拡張アプリ)を作るためには、以下のファイルが最低限必要になります。

  • extension/plugins/プラグイン(拡張アプリ)のディレクトリ/ServiceProvider.php

ディレクトリ名は、名前空間 Acms\Plugins\{ディレクトリ名} の最後の部分と同じにしてください(例: extension/plugins/SamplePlugin/ → Acms\Plugins\SamplePlugin)。ハイフンなど、PHP の名前空間に使えない文字はディレクトリ名に使えません。ディレクトリ名と名前空間が一致しないと、アプリ管理画面に表示されません。

このファイルがあれば、最小限のプラグイン(拡張アプリ)として成立し、管理画面からインストールもできるようになります。このファイルは、アプリのバージョンや説明やインストール・アップデート時の処理や起動の初期処理を記述できるファイルになっています。詳しく見ていきましょう。

ServiceProvider.php

下のコードは、 ServiceProvider.php の 基本的なコードになります。

<?php

namespace Acms\Plugins\SamplePlugin;

use ACMS_App;

class ServiceProvider extends ACMS_App
{
    /**
     * @var string
     */
    public $version = '1.0.0';

    /**
     * @var string
     */
    public $name = 'SamplePlugin';

    /**
     * @var string
     */
    public $author = 'com.appleple';

    /**
     * @var bool
     */
    public $module = false;

    /**
     * @var bool|string
     */
    public $menu = false;

    /**
     * @var string
     */
    public $desc = 'サンプルのプラグインです。';

    /**
     * サービスの初期処理
     */
    public function init()
    {

    }

    /**
     * インストールする前の環境チェック処理
     *
     * @return bool
     */
    public function checkRequirements()
    {
        return true;
    }

    /**
     * インストールするときの処理
     * データベーステーブルの初期化など
     *
     * @return void
     */
    public function install()
    {

    }

    /**
     * アンインストールするときの処理
     * データベーステーブルの始末など
     *
     * @return void
     */
    public function uninstall()
    {

    }

    /**
     * アップデートするときの処理
     *
     * @return bool
     */
    public function update()
    {
        return true;
    }

    /**
     * 有効化するときの処理
     *
     * @return bool
     */
    public function activate()
    {
        return true;
    }

    /**
     * 無効化するときの処理
     *
     * @return bool
     */
    public function deactivate()
    {
        return true;
    }
}

プロパティ


プロパティ名 説明
$version バージョンを指定します。インストール済みのバージョンと PHP の version_compare() で比較し、値が異なる場合に、アプリ管理画面でアップデートを促します。「1.2.0」のように、数字をドットで区切った形式(セマンティックバージョニング)で付けてください。ファイルを更新したら、この値を変えてからアプリ管理画面でアップデートを実行すると、update が呼ばれます。
$name プラグイン(拡張アプリ)の名前を指定します。ここの名前が管理画面に表示されます。特に命名規則はありません
$author 作者を指定します。
$module ここにString(英数字)を指定すると、その名前でモジュールID作成の時、選択肢として表示されます。(非推奨)
$menu ここにString(英数字)を指定すると、そのURLでプラグイン(拡張アプリ)の管理画面が作成されます。
例: 'sample_index'
URL: /bid/1/admin/app_sample_index/
パス: themes/system/admin/app/sample/index.html
$desc プラグイン(拡張アプリ)の詳細を記述します。管理画面で表示されます。

メソッド


メソッド名 説明
init プラグイン(拡張アプリ)が有効になっているブログで、リクエストのたびに実行されます。Hook のバインド、テンプレートの挿入、autoload の設定など、毎回必要な準備を書きます。毎リクエスト実行されるため、重い処理やデータベースへの書き込みは書かないでください(テーブルの作成などは install / update に書きます)。
checkRequirements インストール前のチェックに利用します。「false」を返すとインストールが出来ません。
install ルートブログのアプリ管理画面からインストールしたときに実行されます。データベースの初期化処理などに利用ください。続けて activate も実行され、ルートブログで有効になります。ほかのブログでは、各ブログのアプリ管理画面で有効化するまで動作しません。
uninstall ルートブログのアプリ管理画面からアプリのアンインストール時に実行されます。データベースの削除処理などに利用ください。
update プラグイン(拡張アプリ)のアップデート時に利用します。データ構造の変更などある場合に利用します。
activate プラグイン(拡張アプリ)の有効時(ブログ単位)に動作します。インストール時にもここが実行されます。
deactivate プラグイン(拡張アプリ)を無効化したとき(ブログ単位)に動作します。アンインストール時には実行されません。アンインストール時に必要な後始末は uninstall に書いてください(無効化してからアンインストールするとは限りません)。

activate / deactivate / update の戻り値は使われません。インストールを止められるのは、checkRequirements が false を返したときだけです。install / uninstall / update / activate / deactivate の中で処理を失敗として扱いたいときは、例外(Exception)を投げてください。install が例外を投げた場合は activate は実行されず、アプリは登録されません。uninstall が例外を投げた場合は、アプリの登録は削除されません。

ポイント

  • extension/plugins/ の名前空間は 「Acms\Plugins」 です。
  • \ACMS_App を継承します。

これでプラグイン(拡張アプリ)開発の基本は終了です。次から実際の拡張方法について見ていきます。