Ark SiteFor Developers Arkアーキテクチャ
TOP プラグイン作成講座 CalcArk編 第1回




みなさんこんにちは。最近DVDの買いすぎでお金のないCalcArkプラグイン担当のTです。
CD、MD、MO、CD-ROM、CD-R、CD-RWにDVD、そしてUFOと、光る円盤には昔から弱いんです。
さて、本コーナーでは今回から数回にわたって、CalcArkのプラグインについて解説していきます。
今回は初回ということで、CalcArkのプラグインの仕組みをざっと説明したあと、実際のプラグインの中身を少しだけ覗いてみます。
プラグインの詳細な実装方法は次回以降に譲ることにして、とりあえずプラグインについての概要をつかんでいただくのが今回の目的です。
それでは、早速プラグインの世界へ入っていくことにしましょう。

そもそも「プラグイン」とは何のことでしょうか。
プラグインとは、簡単な操作でアプリケーションに組み込んだり、取り外したりすることができる「追加機能」のことです。
Just Arksの各アプリケーションは、いずれもこのプラグイン機能をサポートしています。
プラグインの技術的な仕組みなどについては、一太郎Arkのプラグイン作成講座 第1回に解説してありますので、詳しくはそちらをご覧いただくとして、ここではポイントだけまとめておきます。

プラグインとは
簡単な操作で組み込むことができる「追加機能」です。
新機能が入ったプラグインをあとから追加したり、使わなくなったプラグインを取り外すことも可能です。

プラグインモジュール
プラグインは「〜.jar」という別ファイルの中に格納されています。これをプラグインモジュールと呼びます。
所定の位置にプラグインモジュールを置いてCalcArkを起動すると、プラグインがロードされて使用できるようになります。
ひとつのプラグインモジュールには複数のプラグインを含めることが出来ます。

プラグインの設定
[ツール-プラグイン-設定]コマンドで、プラグインの設定を行えます。
このコマンドで開く「プラグインの設定」ダイアログで、プラグインの状態を見たり、プラグインを使用停止・使用開始させることができます。
プラグイン設定ダイアログ
【図1】プラグイン設定ダイアログ

プラグインがどんなものか、ざっくりとまとめました。
CalcArkの製品には、12個のプラグインモジュールに計14種類のプラグインが標準搭載されていますが、必要に応じてさらに新しいプラグインを実装することが可能です。
次項では、プラグイン実装のためのファーストステップとして、CalcArkのプラグイン内部の仕組みについて解説します。

CalcArkプラグイン内部の仕組み
CalcArkのプラグイン機能は、基本的には一太郎Arkのプラグイン機能をベースに設計しています。
そのうえで、新しいプラグインをより簡単に実装するための様々な工夫を施しています。
したがって、すでに一太郎Arkでプラグインを自作したことがある方にも、CalcArkではじめてプラグインを実装する方にも、比較的容易に取り組んでいただけるはずです。
それでは、CalcArkの内部的な構造について見ていきましょう。

プラグインの内部構成
図2は、今回ArkSiteよりダウンロード提供しているプラグインや、次回以降に提供予定のプラグインのうち、3つのプラグイン(オートサムプラグイン、サンプルワークシート関数プラグイン、サンプルソート方法プラグイン)を元にした、CalcArkプラグインのクラス図です。
CalcArkプラグインクラス図
【図2】CalcArkプラグインクラス図

インターフェイスや抽象クラスがたくさんあってかなり複雑そうですが、よく見てください。
下のほうにある水色の線より上のクラスは、すべてCalcArk本体に含まれており、線より下のクラスだけが各プラグインモジュールに含まれています。
このことは、プラグインに必要な処理のほとんどは本体のほうに吸収されており、各プラグインで実装するべき内容が少ないことを表しています。
では次に、各クラスの役割について見ていきましょう。

抽象クラス:ChocoPlugin
このクラスは、すべてのCalcArkプラグインに共通する抽象クラスです。CalcArkプラグインは、このクラスの派生クラスとして実装する必要があります。
一太郎ArkのプラグインではArkPluginに相当するクラスで、ほぼ同等の内容をもっています。
(ArkPluginについては、一太郎Arkのプラグイン作成講座 第2回を参照ください。)

抽象クラス:BasicPlugin
このクラスは、プラグインの基本的な挙動を担うための抽象クラスです。
ほとんどのプラグインにとって必要な処理を、個別に実装する必要がないよう吸収するために用意しました。
現状は、リソースの登録・抹消に関わる処理を担っています。
したがって、少なくともこのクラスの派生でプラグインを実装すれば、リソースに関する手続きを実装する手間が省けます。
(プラグインのリソースについては、一太郎Arkのプラグイン作成講座 第2回を参照ください。)

プラグインインターフェイス
CalcArkプラグインでは、プラグインの種類ごとにインターフェイスを用意しており、そのインターフェイスを実装することで同種のプラグインを作成できるようになっています。

UIPlugin
このインターフェイスは、実装するとプルダウンメニューの[ツール]以下にメニュー項目を追加することができます。
ArkSiteからダウンロードできる「オートサムプラグイン」はこのインターフェイスを実装しています。
一太郎Arkにも用意されており、内容もほぼ同等です。

FunctionPlugin
このインターフェイスは、関数プラグインを実装するためのものです。
製品に搭載されている「組み込みワークシート関数プラグイン」や、ArkSiteからダウンロード提供する予定の「サンプルワークシート関数プラグイン」は、このインターフェイスを実装しています。
「サンプルワークシート関数プラグイン」の実装方法については、次回以降に詳しく説明する予定です。

SortMethod
このインターフェイスは、ソート方法を実装するためのものです。
製品に搭載されている「日本語辞書順ソートプラグイン」や、ArkSiteからダウンロード提供する予定の「サンプルソート方法プラグイン」は、このインターフェイスを実装しています。
「サンプルソート方法プラグイン」の実装方法については、次回以降に詳しく説明する予定です。

なお、CalcArkにはこの3種類のほかにも様々なプラグインインターフェイスを用意しています。それらについては、また機会があればご紹介します。

各インターフェイス用の抽象クラス
プラグインインターフェイスごとに、共通で必要な処理を吸収する抽象クラスも用意しています。
これらの抽象クラスを派生して実装することで、各プラグイン具象クラスの実装がより容易になります。

AbstractUIPlugin
UIプラグイン用の抽象クラスです。
プラグインの使用開始・使用停止のタイミングに、UIプラグイン自身を登録・抹消する処理を実装しています。

AbstractOptionalFunctionPlugin
関数プラグイン用の抽象クラスです。
このクラスの派生で関数プラグインを実装すれば、図3のように、「プラグインのプロパティ」ダイアログに、このプラグインに実装した関数の一覧を表示することができます。
プラグインプロパティダイアログ
【図3】組み込みワークシート関数プラグインのプロパティダイアログ

AbstractSortMethodPlugin
ソート方法プラグイン用の抽象クラスです。
プラグインの使用開始・使用停止のタイミングに、実装したソート方法を登録・抹消する処理を実装しています。

各プラグインの具象クラス
AutoSumPlugin/SampleFunctionPlugin/SampleSortPlugin
これらは、各プラグインモジュールに実装するプラグイン具象クラスです。
これがプラグインの本体になります。

まとめ
すべてのプラグインはChocoPluginの派生クラスとして実装します。
プラグインの種類ごとにインターフェイスが用意されており、さらに各インターフェイス用に共通処理を吸収した抽象クラスがあります。
これらの抽象クラスを利用すれば、プラグインごとに特化した処理を記述するだけで簡単にプラグインを実装できます。
以上、CalcArkプラグインの内部構造を見てきました。
つづいては、実際のプラグインモジュールの中身を少しだけ覗いてみることにしましょう。

プラグイン本体クラスの実装
この項では、今回ArkSiteよりダウンロード提供を開始したオートサムプラグインを例に、プラグインの実装をさわりだけ見てみます。

オートサムプラグインとは
集計関連の関数を自動入力する便利なプラグインです。文字通り、表計算ソフトでお馴染みの「オートサム」機能相当の役割をします。
プルダウンメニューの[ツール]に[オートサム]が追加され、カスケードで5つのメニュー[合計/平均/最大値/最小値/データの個数]が出ます。
各メニューを選択すると、カレントセルを基準に集計対象範囲を自動的に判定して、関数を入力してくれます。

それでは、プラグイン本体のソースファイルであるAutoSumPlugin.javaを見てみましょう。
(注。抜粋しているソースの行番号は、必ずしもダウンロードされたソースファイルの行番号と一致しているわけではありません。)

リスト1AutoSumPlugin.java の抜粋

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049

import	java.awt.event.ActionEvent;
import	javax.swing.AbstractAction;
import	javax.swing.Action;

import	jp.co.justsystem.choco.plugin.AbstractUIPlugin;
import	jp.co.justsystem.choco.plugin.UIPlugin;

public class AutoSumPlugin extends AbstractUIPlugin {
	/**
	 * デフォルトコンストラクタ
	 */
	public AutoSumPlugin() {
		_init();
	}

	private void _init() {
		actions_ = new Action[] {
			new Paste(new SUM()),
			new Paste(new AVERAGE()),
			new Paste(new MAX()),
			new Paste(new MIN()),
			new Paste(new COUNT()),
		};
	}

	/**
	 * Actionを取得(登録)する
	 */
	public Action[] getActions() {
		return actions_;
	}

	/**
	 * MenuItemを取得(登録)する
	 */
	public UIPlugin.MenuItem[] getMenuItems() {
		UIPlugin.MenuItem[] items = new UIPlugin.MenuItem[1];

		UIPlugin.Menu menu = new UIPlugin.Menu(ID + ".menu1");
		for (int i = 0; i < actions_.length; i++) {
			String actionName = (String)actions_[i].getValue(Action.NAME);
			menu.addMenuItem(new UIPlugin.MenuItem(actionName + ".item", actionName));
		}
		items[0] = menu;

		return items;
	}
	(その他の実装については、略)
}

このプラグインはCalcArk本体にメニューを追加するプラグインなので、UIプラグインとして実装しています。
8行目にあるように、UIプラグイン用の抽象クラスAbstractUIPluginの派生クラスとし、必要なメソッドをオーバライドするかたちで実装しています。

まず注目したいのは、ChocoPluginに定義されている、プラグインの基本動作(初期化、使用開始、使用停止、破棄)に関するメソッドについては何も記述していない点です。これらはすべて、スーパークラスの実装を利用しているためです。

29行目getActionsと34行目getMenuItemはインターフェイスUIPluginのメソッドで、このプラグインに固有の処理を実装しています。

このプラグインは、それなりに複雑な動作をするプラグインですが、プラグイン本体クラスの記述量は意外に少ないと思われたかもしれません。
繰り返しになりますが、抽象クラスを利用することで、必要最低限の記述だけで実装しているためです。
ここではこのプラグインについてのこれ以上詳しい説明は省きます。メニューを追加するUIプラグインの詳細については一太郎Arkのプラグイン作成講座 第3回をご覧下さい。

おわりに
以上、第1回では、CalcArkプラグインの概要について説明してきましたが、いかがでしたか。
次回以降は、具体的なプラグインの実装方法について詳しく見ていきます。
プラグインは応用次第で便利な機能を追加できるので、この連載記事を参考に、是非自作プラグインにチャレンジしてみてください。

ソースファイル
AutoSumPlugin.java

jp.co.justsystem.choco.plugin パッケージ
AbstractUIPlugin
BasicPlugin
ChocoPlugin
UIPlugin


TOP プラグイン作成講座 CalcArk編 第1回