プラグインのつくりかた

出典: FlashDevelop.jp

FlashDevelopは、プラグインによって拡張することができます。 言語はC#ですが、似たようなものなのでAS3のノリで書いていけると思います。 さらに、PluginCoreというプラグインのための仕組みが提供されているので、思ったよりはラクに構築することができます。

目次

[編集] 開発環境をインストールしよう

FlashDevelopは.NET Framework 2.0、C#で構築されています。

まずはじめに無料の開発環境、Visual C# 2008 Express Edition をインストールしましょう。

FlashDevelopにそっくりなので、プラグインを作ってみようなんて考えるような余力のある皆さんならすぐに使いこなせると思います。

Visual Studio 2008 Express Editionはこちらからインストールできます。 (ISOイメージの取得はこちら。)

環境によってはPowerShellのインストールが必要な場合があります。 その場合はこちらから取得して、インストールをしてください。

[編集] ソースコードを入手する

[編集] TortoiseSVNの取得&インストール

TortoiseSVN downloadsからアプリケーションをダウンロードしてください。

32bitと64bitバージョンが存在するので自分の環境にあったバージョンを取得します。

インストールはすべてデフォルトで[Next]ボタンを押していけば問題ありません。

PCを再起動して準備は完了です。


[編集] FlashDevelopのソースコードの取得

C:\にFlashDevelopフォルダを作成します。(フォルダの場所は例えですので任意の場所でもかまいません。)

FlashDevelopフォルダを右クリックし、SVN Checkoutを選択します。

URL to repository:に"http://flashdevelop.googlecode.com/svn/trunk/FD3/"と入力します。

Checkout directory:が"C:\FlashDevelop"になっていることを確認してください。

[OK]ボタンを押すとソースのダウンロードを開始します。

[編集] プラグイン作成前の準備

ソースコードを取得して、「さぁ、作るぞ~」と思っても色々あってすぐにそうはいきません。

C:\FlashDevelop\FlashDevelop.slnをダブルクリックしてソリューションを開きます。

ソリューションファイル(*.sln)とはVisualStudioで使用するプロジェクトファイルをひとくくりにまとめたファイルです。

ひとつのソリューションファイルに複数のプロジェクトファイルがぶら下がっています。

プロジェクトファイルがひとつのexeもしくはdllになります。


[編集] 文字化け&ビルドエラー回避

ソリューションファイルを開いた状態でビルド(メニューのビルド→ソリューションのビルドもしくはF6キー)を実行するとコンパイルエラーが発生します。

画面下部にエラー一覧が表示されるのでかなりの数がエラーになっていますが、"定数の 新しい行です。"とあるところをダブルクリックしてください。

(それ以外のエラーは参照DLLが未コンパイルされていないためのエラーなので無視してください。)

ASCompletionプロジェクトのCompletionフォルダ内のASDocumentation.csの387行

return " ・ + GetTipShortDetails(cb, highlightParam);
return " ・" + GetTipShortDetails(cb, highlightParam);

同じくASCompletionプロジェクトのCompletionフォルダ内のASDocumentation.csの429行

if (lines.Length > 2) text += " ・;
if (lines.Length > 2) text += " ・";

それぞれ、上段の状態から下段ようにの編集します。

ビルドが成功すると下記フォルダに実行環境(FlashDevelop.exeやdllなど)ができているはずです。(フォルダはSVNで取得した状態で存在します。)

"C:\FlashDevelop\FlashDevelop\Bin\Debug"

[編集] プラグインをつくる

FlashDevelop.slnを開いた状態でスタートします。


[編集] 新規プロジェクトの追加

新規のプロジェクトを作成します。

1)ソリューションエクスプローラのソリューションファイルを右クリックして追加→新しいプロジェクトを選択します。
2)テンプレートからクラスライブラリを選択します。
3)プロジェクト名を入力します。(ここでは便宜上"TestPlugin"とします。)
4)場所の所の参照ボタンを押して"C:\FlashDevelop\External\Plugins"を選択します。
5)OKボタンを押します。

これで、新規のプロジェクトが追加されました。


[編集] プラグインの準備

初期状態で作成されているClass1.csはソリューションエクスプローラから右クリックで削除しておいてください。(プロジェクトから除外ではなく削除。)

プロジェクトの設定を行います。

1)ソリューションエクスプローラのTestPluginを右クリックしてプロパティを選択し、プロパティ画面を表示させます。
2)左のタブからアプリケーションをクリックします。(すでにアプリケーションタブなら不要です。)
3)対象のフレームワークを3.5から2.0に変更します。(ダイアログが出ますが[はい]を選択してください。→プロパティ画面を再表示してください。)
4)アセンブリ情報ボタンを押して必要な情報(タイトルからファイルバージョンまで)を入力します。(このウィンドウのGUIDは後に使用しますので覚えておいてください。)
5)OKを押してウィンドウを閉じます。
6)ビルドタブをクリックします。(重要:下記は画面上部のツールバーのコンボボックスでDebugが選択されている状態で行ってください。)
7)出力パスの参照ボタンを押して、"C:\FlashDevelop\FlashDevelop\Bin\Debug\Plugins\"を選択します。
8)ツールバーの保存、またはすべてを保存で保存します。 

プラグインの参照設定を行います。

1)ソリューションエクスプローラのTestPluginプロジェクトの下の参照設定を右クリックし参照の追加を選択します。
2)参照の追加ウィンドウのプロジェクトタブをクリックします。
3)Ctrl+クリックでFlashDevelopとPluginCoreを同時に選択します。
4)OKボタンを押します。
5)参照設定のツリーの下のSystem.Data.DataSetExtensionsとSystem.Xml.Linqを右クリックして削除します。(.NETFramework3.5用のDLLのため)

この状態で一度ソリューションのビルドを行ってください。

ビルドエラーが出ないことを確認して次に進んでください。


[編集] クラスファイルの追加

プラグインのメインとなるクラスファイルの追加の手順です。

1)ソリューションエクスプローラのTestPluginプロジェクトファイルを右クリックして追加→新しい項目を選択します。
2)テンプレートからクラスを選択します。
3)ファイル名に"PluginMain"と入力します。(拡張子は入力しなくても自動で追加されます。)

[編集] PluginMain.csの編集

ファイル上部のusing(Importに相当)の部分に下記を追加します。(本来なら必要なものだけあれば良いですが)

using PluginCore.Localization;
using PluginCore.Utilities;
using PluginCore.Managers;
using PluginCore.Helpers;
using PluginCore;

クラス宣言部分の"class PluginMain"を下記に変更します。

public class PluginMain : IPlugin

ソースのIPluginの所にマウスカーソルを当ててクリックすると青色のアンダーバーがでてきます。

マウスカーソルをアンダーバーのところに移動してドロップダウンメニューを表示します。

インターフェース'IPlugin'を実装します。を選択してください。

(明示的にがついている、いないの違いの話は別のところでお願いします。)

自動的にプロパティやメソッドが追加されるのでSamplePlugin等を参考にして書き換えてください。

Name,GUID,Help,Author,Description,Settingsの中身を変更してください。

Dispose()とInitialize(),HandleEvent()の3つはとりあえず空白でOKです。(実際には必要ですが空のということで)

[編集] ビルド&実行

作成したPluginMain.csのInitialize()の行の所にブレークポイントを挿入して実行します。

実行時にエラーが出る場合はエラー内容にしたがってプログラムを修正してください。

1)指定の行にカーソルを移動しF9をおすか、行のヘッダー部分をクリックしてブレークポイントを挿入します。
2)ソリューションエクスプローラでFlashDevelopプロジェクトが太文字になっている事を確認します。※1
3)F5を押してソリューションを実行します。
4)FlashDevelopが起動してブレークポイントでプログラムの実行がと止まっているのを確認。

※1:ソリューション内でスタートアッププロジェクトに設定されているプロジェクトが太文字になります。

PluginMain.cs内でInitialize()は名前のとおり、初期化を行う箇所です。

FlashDevelop.exeからプラグインの読込み時に初期化(もしくは初期処理)を記述しておいてください。

ここまでFlashDevelop側から読み込まれるだけのプラグインが完成しました。

[編集] ちょっとしたTips

[編集] サンプルプラグインの読込み

サンプルを参考にするの良い手法のひとつです。

SVNで取得したソースコードの中にSamplePluginが含まれています。

[表示方法]

1)ソリューションエクスプローラの一番上のソリューションファイルを右クリック→追加→既存のプロジェクトを選択
2)C:\FlashDevelop\External\Plugins\SamplePluginにあるSamplePlugin.csprojを選択

※SamplePlugin.slnもありますが、プラグインを作成するための最小構成でソリューションが組まれています。

(構成を把握する目的でFlashDevelop.slnの使用をオススメします。慣れればこちらでも問題ないです。)

SamplePluginは.NETFrameworkのバージョンが3.5になっているので2.0にしておきましょう。


[編集] ビルド対象外の設定

プラグインを作成して実行(F5)を押すたびにすべてのプロジェクトファイルがリビルドされます。

この場合、自分が編集しているプロジェクトのみビルドできていれば問題ないので他のプロジェクトをビルド対象外にします。

[設定方法]

1)ソリューションエクスプローラの一番上のソリューションファイルを右クリック→構成マネージャを選択
2)アクティブソリューションの構成がDebugになっている事を確認
3)自分が作成したプロジェクト以外のビルドの項目のチェックをはずす
4)閉じるボタンを押す

これで実行時にリビルドされずにすみ、起動が早くなります。

チェックをはずしたプロジェクトのリビルドを実行するにはソリューショネクスプローラのプロジェクトファイルを右クリックしてリビルドを選択します。

(Ctrl+クリックで複数の選択とビルドが可能です。)


[編集] ソリューションエクスプローラとファイルの同期

FlashDevelop.slnはかなりのプロジェクトがぶら下がっているので見ているソースファイルの位置が把握しにくいです。

その場合、現在開いているソースファイルがどのプロジェクトかわかり易いようにするオプションです。

[設定方法]

1)メニューのツール内のオプションを選択
2)設定ウィンドウの左下のすべての設定を表示をチェック
3)ツリーのプロジェクトおよびソリューションを選択
4)右側のアクティブな項目をソリューションエクスプローラで選択された状態にするをチェック


また、良いTipsを思いついたら追記します。

[編集] ありがちな質問

[編集] ActionScriptでいう、traceはどうやるの?

まずこの名前空間を追加して、

using System.Diagnostics;

このように記述します。

Debug.WriteLine("デバッグ文字");

[編集] 出力結果を手軽に表示したい

なにか出力したら、結果をどこかに表示したいですね! とりあえずOutputパネルに表示させるのがカンタンです。 このように記述すれば、Outputパネルに出力できます。

TraceManager.Add("Hello World!");

[編集] Resultsパネルの書式がわからん!

Resultsパネルは、Resultsパネルに直接表示するAPIというものはなく、 TraceManagerに入ってきたメッセージのなかからResultsパネルの書式に一致するものを拾って表示する仕様です。 ですから、書式がちょっとでも違うと表示してくれません。 調べてわかったことをメモしておきます。

TraceManager.Add(C:¥Dev¥project¥src¥Main.as(124): col:2 文章, 1);

ファイルパスの部分は、PCにそのパスが存在しない場合は表示されません。 第二引数は省略することができます。省略した場合はinfoになります。 col:は文字の位置を指定できます。省略可。