こちらは「コドモン Advent Calendar 2024」の 13日目の記事です
こんにちは! プロダクト開発部の村松です!
みなさんはどのようなエディタを使っていますでしょうか?
弊社ではIntelliJ IDEAを使うメンバーが多く、日々IntelliJ IDEAの便利な機能を活用しながらコーディングを行っています。
プラグインも充実していますが、自分が欲しいプラグインが既存で存在しないこともあります。
そこで今回、自分が欲しかったIntelliJ IDEAのプラグイン開発にチャレンジしました。
本記事ではプラグイン開発の始め方と作ってみた感想についてご紹介します。
プラグインの作り方
リポジトリの作成
プラグイン開発者のためのテンプレートが、公式から提供されています。
下記のリポジトリの「Use this template」からクローンすることができます。
サンプル実装も用意されているため、プラグインの動作をIntelliJ IDEAで確認することができます。
Java 17系のJDKを設定し、ビルドを行うとプラグインを実行することができます。
プラグインの実行は「Run Plugin」で実行できます。
※ 今回はプラグイン開発の始め方を中心にご紹介するため、詳しい実装方法は下記の公式ドキュメントをご参照ください。
プラグインの公開方法
プラグインを公開するにはJetBrainsの個人アカウントが必要になります。
まだ未作成の方はアカウントを作成する必要があります。
JetBrains Marketplaceにログインするとプラグインをアップロードすることができます。
アップロードするプラグインの成果物はmainブランチにpushするとGitHub Actionsで自動で作成されます。
成果物はBuildのワークフローから、ダウンロードすることができます。
(画像の例ではsandbox-0.0.1をアップロードします)
無事アップロードが完了すると審査に入り、審査に合格すると晴れて作成したプラグインが公開されます。(審査には営業日で2, 3日程かかります)
CI/CD
新規のプラグインは手動でアップロードする必要がありますが、自動でプラグインをアップロードするためのCI/CDも用意されています。
CI/CDでプラグインを公開するには、Repository secretsを設定する必要があります。
PUBLISH_TOKENはJetBrains Marketplaceでトークンを作成し、設定します。
PRIVATE_KEYは下記のコマンドで作成できます。
openssl genpkey\ -aes-256-cbc\ -algorithm RSA\ -out private_encrypted.pem\ -pkeyopt rsa_keygen_bits:4096
PRIVATE_KEY_PASSWORDは下記のコマンドで作成できます。
openssl rsa\ -in private_encrypted.pem\ -out private.pem
CERTIFICATE_CHAINは下記のコマンドで作成できます。
openssl req\ -key private.pem\ -new\ -x509\ -days 365\ -out chain.crt
※ 執筆時点ではJetBrains Marketplaceに公開鍵を登録することはできません。詳しくは下記の公式ドキュメントを参照ください。
後はリリースノートのドラフトをpublishにすることで、プラグインが自動でアップロードされます。
自作プラグインで工夫した点
私が今回作成したプラグインは、下記のリンクからインストールすることができます。
工夫した点としては下記のとおりです。
- 補完候補の取得は公式プラグインのJavaScript and TypeScriptで実装されているクラスを活用しました。
- 設定画面で設定したディレクトリ直下のStepのみ、補完候補としてサジェストされるように実装しました。
- Step名が複数ある場合は1番目のみを補完候補としてサジェストするように実装しました。
エディタのプラグイン開発自体が初めてということもあり、JetBrains Marketplaceでソースコードが公開されているプラグインをいくつか参考にしながら作成しました。
作ってみた感想
テンプレートが公式で用意されていることもあり、思っていたよりもスムーズにプラグインを公開できました。
できることの幅もかなり広く、どのようなプラグインにするか考えるのもすごく楽しかったです。
私のいるチームではGaugeでテストを作成することが多いのですが、プラグインのおかげでテスト作成が効率的で楽しくなりました。
ぜひ皆さんも自分好みのプラグインを作ってみてはいかがでしょうか?
最後まで読んでいただきありがとうございます!