開発コメントを残すNetBeansのプラグインの作り方を簡単に紹介します。Moduleプロジェクトの作成NetBeansのプラグインはmoduleという単位でNetBeans本体に追加できます。NetBeans本体もプラグインと同じmoduleが集まって構成されています。moduleのプロジェクトの作成方法は2通りあります。違いはビルドツールで、1つはAnt、もう1つはmavenです。NetBeans本体はAntプロジェクトでつくらていますが、モダンなツールはmavenです。どちらでつくっても動作は同じですが、外部のライブラリなどを使って開発したい場合は、mavenのプロジェクトを使ったほうが管理が楽だと思います。ウィザードを開きます。Moduleを選択して、[Next]ボタンを押します。プロジェクト名を入力して、[Next]ボタンを押します。Nameを入力して[Finish]ボタンを押すと、プロジェクトが作成されます。Moduleを選択して、[Next]ボタンを押します。必要な情報を入力して、[Finish]ボタンを押すとプロジェクトが作成されます。これらの情報はあとからpom.xmlファイルを修正して変更できます。Version:はRELEASE82までしか選択できないので、pom.xmlでRELEASE110に変更しましょう。(バグ報告しました:https://issues.apache.org/jira/browse/NETBEANS-2628)以下、Antプロジェクトを使って説明しています。コーディング(Actionの追加)NetBeansにはplugin(module)用のコードのテンプレートが用意されています。用意されているものに関してはウィザードに従って値を入力していくと、コードが自動で生成されます。ここでは、例としてActionを追加する方法を紹介します。Numberに変換するアクションを追加してみましょう。File]をクリックします。Actionを選択して[Next]をクリックします。特定の条件でアクションを実行するようにもできますが、ここでは常に有効なアクションでつくってみましょう。選択して[Next]をクリックします。次にアクションをどこに追加するのかを設定します。以下のように設定して[Next]をクリックします。ここでは[Edit]メニューの一番最初にアクションを追加します。デフォルト(メニューの先頭)最後にクラス名や表示されるアクション名を入力してFinishをクリックすると、ファイルが生成されます。ここでは、以下のように設定します。アイコンを表示したければ、16×16で制作してBrowseボタンから追加してください。Numberこのような感じでファイルがつくられて、コードが生成されます。actionPerformed()の中身です。アクションが実行されたときにここが呼びだされます。最初に、コンポーネントを取得し、エディタの文字列を取得します。ここでは最後にフォーカスされたエディタのコンポーネントを取得して、文字列を変換することにします。コンポーネントを取得するために下記のメソッド(EditorRegistry.lastFocusedComponent())を呼び出します。EditorRegistry.lastFocusedComponent();}このままでは、赤のアンダーラインが表示されて、エラーになります。moduleの依存関係を追加する必要があります。追加する方法は次の3つです。Propertiesから追加するプロジェクトのノードを右クリックしてPropertiesをクリックします。Propertiesダイアログが表示されます。DependenciesのAddボタンをクリックします。Dependenciesダイアログが表示されます。Filterのテキストフィールドにテキストを入力すると、関係するmoduleの一覧が表示されるので必要なものを追加します。これでエラーがなくなるはずです。エラーが出ている場合は、import文が不足していないか確認してください。[I]で追加されます。[Enter]/エディタのライン番号のバルブ)から追加するエディタのライン番号のところにバルブのアイコンが表示されている場合は、ヒントの機能を利用できます。バルブのアイコンをクリックします。Dependencyダイアログが表示されるので、そこでmoduleを選択して追加できます。クリックしても同様に追加できます。コードの続きを書いていきます。Numberに変換するメソッドを追加します。ここでは、アルファベット等を変換しない等の処理は入れずに、単純に全部の文字を変換するメソッドにしています。}actionPerfomed()の残りも書きます。選択されたテキストを取得して、変換して、documentに挿入するようにします。Variable]を選択すると、変数に代入するコードを追加してくれます。}補足ですが、documentの文字列を削除して変換された文字列を挿入している部分は、NetBeansの履歴では削除と挿入として残ります。「戻る」を実行したときに一旦、削除後の状態に戻り、さらに「戻る」を実行すると元の状態に戻ることになります。ドキュメントの複数の操作を1つの履歴として扱いたい場合は、NbDocument(https://bits.netbeans.org/dev/javadoc/org-openide-text/org/openide/text/NbDocument.html)のrunAtomicUser()もしくはrunAtomic()メソッドを使います。全体のコードは以下のようになります。}}実行コードを書き終えたら、実行してみましょう。実行する方法は下記のようにいくつかあります。好きなところから実行してください。Project]ボタンプロジェクトのコンテキストメニューの[Run]デフォルトのショートカットキーの[F6]実行するともう1つNetBeansが初期設定の状態で起動します。この起動したNetBeansの中でプラグインが有効になっています。Number]があるはずです。実際にテキストを選択して、アクションを実行してみます。ユーザーディレクトリ(オプションなどの設定があるディレクトリ)は、本体とは別に各プラグインごとにつくられます(build/testuserdir)。プロジェクトのコンテキストメニューから[Clean]を実行するとこれらは初期化されます。うまく動かなかったりする場合は、デバッグしてみましょう。デバッグデバッグする方法も実行するときと同様で、下記の場所からデバッグを開始できます。[F5]ブレークポイントはライン番号をクリックすると有効/無効の切り替えができます。nbmプラグインを配布・インストールするには、拡張子がnbmのファイルが必要です。nbmを生成プラグインはnbmファイルを生成して、それをインストールすることで有効になります。NBM]を実行してください。SUCCESSFULが表示されます。nbmファイルはbuildディレクトリ内につくられます。nbm(プラグイン)のインストールインストールは、[Tools]メニューの[Plugins]から行います。[Tools]メニューの[Plugins]をクリックすると、Pluginsダイアログが表示されます。Plugins...]ボタンを押して、生成したnbmファイルを選択します。他のプラグインをダウンロードしてきたときも同様です。agreements.]にチェックを入れて[Install]を押して、途中の警告も[Continue]すれば、インストールできます。ライセンスファイルを追加していないと上のような表示になるので、正しいライセンスファイルを追加しておきましょう。(下のプロジェクトの設定を参照)nbm(プラグイン)の配布プラグインを配布する方法は下記のようにいくつかあります。Portalに登録するには、最初にアカウントを作成して、nbmファイルをアップロードします。Portalに登録されているものですが、登録したものすべてが表示されるわけではありません。一覧に表示されるようにするためには、nbmファイルに署名する(sign)必要があります。ディレクトリをignoreするようにしてください。(mavenプロジェクトの場合はkeystoreファイルがignoreされるようにしてください。ようにgitでバージョンのタグをつくって、そこにnbmファイルをアップロードします。独自のアップデートセンターをつくるこれに関しては省略しますが、特定のURLをNetBeansに登録してもらって、ダウンロードしてもらうこともできます。テストユニットテストも追加しておきましょう。(JUnitに関する詳細はおぐぐりください)このままだとactionPerformed()メソッドは、JTextComponentをテスト時に取得できないので、スタブをつくってテストできるように、ConvertToHtmlEntityNumberActionクラスのfinal修飾子を削除して、getComponent()メソッドを導入します。以下のコードの部分をメソッドにします。event)から呼び出すようにして、その追加したメソッドをテストすればよさそうです。ヒントを表示して、メソッドを導入できます。(これはNetBeansのリファクタリングの機能です)というのを選択します。ダイアログが表示されます。NameとAccessを適切に設定してOkボタンを押すと、メソッドが追加されます。冗長であれば必要に応じて、メソッドの中身を修正します。Tests]から作れます。ダイアログが表示されます。Bodyなどいらなければチェックをはずします)OKボタンをクリックすると、テストファイルが作成されます。コードを書かなければいけないのは、test****()メソッドのbodyです。各メソッドのテストを書きます。コードを書いていきましょう。}getComponent()メソッドをオーバーライドしてテストのデータを変更できるようにしましょう。[INS])の機能を使う方法もありますが、1つだけオーバーライドしたい場合は、コード補完からオーバーライドする方法が速いです。overrideを選択すると、メソッドが挿入されます。以下のようにテストを追加してみました。未実装のテストメソッドや足りないテストケースは追加してみてください。}}テストの実行テストもプロジェクトの実行の時と同様に実行する方法はいくつかあります。Package])だったり、プロジェクト([Test])だったり、選択中のノードによってテストの対象が変わります。プロジェクトのコンテキストメニューから[Test]を実行してみましょう。テストが成功すればグリーンの表示結果になります。失敗した場合は、進捗バーがレッドになります。テストが間違ってなければ、実装を修正しましょう。NbTestCase別のディレクトリにテストデータを用意しておいて、それらを使ってテストするときなどは、テストクラスにNbTestCase(エラーがでたら依存関係の修正)を継承させて使うと便利だと思います。コンストラクタに引数があるので注意。例外が発生する場合は、処理を正常に終了させ、どこで問題が起きたのかLoggerを追加してログを残しましょう。[INS])の機能でコードを生成できます。キャレット位置にコードが生成されます。部分をLoggerに置き換えてみましょう。よいメッセージがあれば、メッセージ部分を変更してください。}プロジェクトの設定(バージョン等)プロジェクトのPropertiesでJavaのバージョンやプラグインのバージョン等を設定できます。moduleの依存関係を追加したときと同様に、プロジェクトのコンテキストメニューで[Properties]を選択します。通常必要と思われる部分だけ紹介します。Propertiesのダイアログです。Propertiesの項目が異なる部分があります。Javaのバージョンです。これはヒント等に使用されます。Levelを1.7にしておくと、ラムダ式を使っている箇所ではエラー表示されます。Levelを1.8にしておくと、ラムダ式が使える箇所では、ラムダ式に変更できるよと提案のヒントが表示されます。使いたいJavaのバージョンの文法でエラーになる場合は、ここの設定を確認してみてください。Display基本的には、プラグインをインストールする時等に、プラグインの情報として表示されます。プラグインを修正して、新しいバージョンを配布するときは、忘れずにバージョンを変更しましょう。中身が違っていても、バージョンの情報が同じなら、すでにそのバージョンはインストールされているものとみなされ、プラグインを更新するために、一度インストール済みのプラグインを削除しなければなりません。Packagingプロジェクト内にライセンスファイルを作って、適切なライセンスを設定しましょう。Pageには、ソースコードのリポジトリのアドレス等を設定するといいかと思います。ライセンスヘッダーライセンスヘッダーの設定をしていない場合、新規にファイルを作成すると、ファイルの先頭に下記のコメントが追加されます。*/ファイルはテンプレートを使用して作成されています。どのライセンスを使用するか設定しておくと、このコメントの部分に適切なライセンスヘッダーが挿入されるようになります。Propertiesにライセンスヘッダーを設定できるカテゴリーがあるのですが、Antのプロジェクトにはそれがありません。その場合は、nbproject/project.propertiesファイルを編集します。2.0を使用したい場合は下記のように書きます。name]の部分は、デフォルトのライセンスのテンプレートのファイル名で決まります。name]をproject.licenseに使用できます。Managerダイアログを開いて、Licensesの特定のライセンスを右クリックして、Propertiesから確認できます。file]を追加してください。下記のように書きます。project.licensePath=./nbproject/licenseheader.txtリファレンス英語ですが下記のチュートリアル動画やWikiが参考になると思います。わからないことや質問があれば、メーリングリストやSlackで聞いてみてください。あれはどうやって取得するんだろうと思うことがあれば、NetBeans本体のコードをありそうなメソッド名などでgrepしてみるのも1つの方法です。getFileObjectなど。indexさらなる改善?これを読んで実際に実行してみる人はいないかもしれませんが、もしいましたら、次のような機能の追加・改善が考えられるので、それらを実装してみるのも練習になると思います。逆の変換の(元の文字列に戻す)アクションを追加する特定の文字は変換の対象からはずすこのプラグインのためのオプションを追加する文字列が選択されていなかったときに、ダイアログでメッセージを表示する変換するstaticメソッド(convert***)をUtilitiesクラスを作って、そちらに移動するActionListenerではなくEditor用のActionを使って実装・登録してみるアクション用のアイコンを追加するなどなど長々と書いて、クソコードだったりする部分もあるかもしれませんが、もし何かありましたらご指摘いただけると助かります。NetBeansとプラグインの作成に興味をもってくれた人がいれば幸いです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。このフォームを使用することにより、このウェブサイトによるデータの保管および取り扱いに同意するものとします。コメントデータの処理方法の詳細はこちらをご覧ください。