以前、rails routes を便利に扱う、IntelliJ Platform Plugin の Railroads を作りました。
- RubyMine 2023.3系から、rails routes を便利に扱える Railways プラグインが動かなくなったので、代替プラグイン Railroads を作りました - メモ的な思考的な
- https://plugins.jetbrains.com/plugin/24076-railroads
また、プラグインのMarketplaceのページにてNotificationの設定をしていることもあり、時々JetBrainsから [Notification] Verification results for the Railroads plugin という件名のメールが届きます。
これにより、「新しいIDEの新しいバージョンとプラグインの互換性」を把握でき、メンテナンスをするきっかけになります。
そんな中、
IntelliJ IDEA Ultimate 2024.2 eap (242.19890.14) 1 missing mandatory dependency. 2 possible compatibility problems, some of which may be caused by absence of dependency in the target IDE 242.19890.14
という内容のメールが届きました。
気になったため、該当のバージョンのIDEへRailroadsプラグインをインストールして動作確認したところ、「該当のバージョンのIDEでは、ToolWindow上のRailroadsアイコンが消えてしまう」と分かりました。
今までのRailroadsプラグインでは、アイコン作成の手間を省くためにJetBrains IDEが内部で持っているアイコンを使用していました。
ただ、そのアイコンを使うためのAPIが内部APIだったっぽく、該当のバージョンで内部APIに何らかが発生した結果、アイコンが消えたようでした。
そこで、「いつかはアイコンを何とかしたほうが良いかも...」と思っていたこともあり、新しいアイコンを作成・対応することにしました。
また、他にも互換性のwarningが出ていたので、そちらも合わせて対応し、バージョン 0.2.0 としてpublishすることにしました。
次に、新しいバージョンのpublish作業について考えました。
今まで同様「Marketplaceのページからビルドしてできたjarファイルをアップロードする」ことも考えました。
ただ、Railroadsプラグインは IntelliJ Platform Plugin Template ベースなため、GitHubのRelease機能と連動してpublishすることもできます。
https://github.com/JetBrains/intellij-platform-plugin-template?tab=readme-ov-file#continuous-integration
そのため、GitHubのRelease機能によるpublishを行うことで
- publishまで自動的に行えるので、手間が減る
- 今までのように「ローカルでビルドした結果をアップロードする」というpublish方法だと、どのソースコードを元にしてビルドした結果なのかが不明瞭
- 一方、Release機能と連動するのであれば、タグとpublish結果が一致するので明瞭
- プラグインをインストールする側も不安が減るのでは
- 一方、Release機能と連動するのであれば、タグとpublish結果が一致するので明瞭
と考えました。
そこで、今後は「GitHubのRelease機能と連動してプラグインのpublishも行う」として作業を行ったため、内容をメモしておきます。
目次
環境
0.2.0のリリース内容
ここでは、0.2.0のリリースノート的な内容を記載します。
GitHub Actionsによるpublishを知りたい方は読み飛ばしてください。
Railroads のアイコンの変更について
以前の記事で
ただ、時間の都合上、Railwaysで使っている png 形式のアイコンを svg 形式で用意するのは難しかったことから、今のところ JetBrains で用意しているアイコンで代替しています。
と書いた通り、Railroadsの元となったRailwaysのアイコンは使えませんでした。
「こんなときは生成AIでアイコンを作ろう」とも考えましたが、アイコンに関する知識不足のため、良さげなアイコンを生成する適切なプロンプトを書くことができませんでした。
そこで今回は、「ライセンス的に問題ないSVGファイルをベースに、一部編集し、Railroadsのアイコンとして使う」ことにしました。
ライセンス的に問題ないSVGアイコンを調べたところ、WikipediaにあるRailsのアイコンがCC0でした。
https://en.wikipedia.org/wiki/File:Ruby_On_Rails_Logo.svg
そこで、「01:47, 16 January 2017」の「Dorianinou」さん版のSVGファイルをベースに編集することにしました。
次に、SVGファイルを編集するツールの使い方が分からないので、以下の方法で編集しました。
- テキストエディタでSVGファイルを開いて、文字など不要そうなオブジェクトを消していく
- Figmaで修正後のSVGを開き、余白を削除する
- 理由
- エディタで消すだけでは不要な余白が含まれてしまい、かなり小さめのSVGになってしまったため
- 参考
- 理由
その結果、最終的にはこんな感じのアイコンになりました。

レール上に、1つだけプラグインをイメージした箱を乗せています。スクリーンショットだと分かりづらいので、画像の詳細はこちらのプルリクを参照してください。
https://github.com/thinkAmi/railroads/pull/38/files
plugin signing の設定
以前の記事でふれた、 plugin signing の設定を追加しています。
IntelliJ Platform Plugin開発にて、Plugin Signing を試してみた - メモ的な思考的な
なお、プラグインの機能には影響ありません。
関係するプルリクはこちら。
https://github.com/thinkAmi/railroads/pull/8
テストコードの追加
こちらも、以前の記事でふれたものです。
IntelliJ Platform Plugin開発にて、KotestやBasePlatformTestCaseを使ったテストコードを書いてみた - メモ的な思考的な
これもプラグインの機能には影響ないです。プルリクはこちら。
https://github.com/thinkAmi/railroads/pull/10
互換性のwarningへの対応
互換性のwarningが出ていたので、対応したものになります。
プルリクはこちら。
https://github.com/thinkAmi/railroads/pull/9
依存ライブラリのバージョンアップ
dependabotが上げてくれたプルリクのうちおそらく影響が少なそうなものについて、動作確認をした上でバージョンアップしています。
なお、dependabotのプルリクをそのまま適用してもうまく動作しない場合は、別のプルリクを作成しています。
ちなみに、2024/8/17 11:30現在、Openなdependabotのプルリクは8個あります。よく調べないとアップデートしづらい...と思ったものがメインです。
今後、時間を見てメンテナンスしていこうと思います。
GitHubのRelease機能を使った、プラグインのpublish
ここからが本題です。
IntelliJ Platform Plugin Template にはGitHub Actionsのワークフローファイルが含まれます。
その中には、publish用のワークフロー Release も含まれています。Releaseワークフローについて、READMEには以下のように記載されています。
- Triggered on
releasedevent.- Updates
CHANGELOG.mdfile with the content provided with the release note.- Signs the plugin with a provided certificate before publishing.
- Publishes the plugin to JetBrains Marketplace using the provided
PUBLISH_TOKEN.- Sets publish channel depending on the plugin version, i.e.
1.0.0-beta->betachannel.- Patches the Changelog and commits.
では、どんな感じになるか実際に試してみます。
事前準備
Railroadsリポジトリではまだ一度もRelease機能を使ったpublishを行なっていないため、事前準備が必要です。
ちなみに、一度でもpublishできている場合は不要なため、この事前準備をスキップできます。
publishに必要な環境変数(secret)を設定
READMEによると、GitHub Actionsを使ったpublishでは4つの環境変数(secret)が必要そうでした。
https://github.com/JetBrains/intellij-platform-plugin-template?tab=readme-ov-file#environment-variables
また、secretはGitHubのリポジトリ設定にある、 Secrets and variables > Actions > Repository secrets > New repository secret にて設定すれば良さそうでした。
では、それぞれの値を見ていきます。
PRIVATE_KEY
設定する値について、READMEでは以下のように記載されています。
Certificate private key, should contain:
-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----
これについては、以前 Plugin Signing を試してみたときに作った *.pem ファイルの中身を設定します。
IntelliJ Platform Plugin開発にて、Plugin Signing を試してみた - メモ的な思考的な
ちなみに、手元の秘密鍵は -----BEGIN PRIVATE KEY----- で始まっていますが、これでも問題ありませんでした。
PRIVATE_KEY_PASSWORD
Plugin Signing で秘密鍵を生成したときのパスワードを設定します。
CERTIFICATE_CHAIN
Plugin Signing で生成した *.crt ファイルの中身を設定します。
PUBLISH_TOKEN
JetBrains Marketplaceで公開するためのTokenを設定します。
TokenはJetBrains Marketplaceのprofileの中にある、 Tokens タブにて生成できます。
https://plugins.jetbrains.com/author/me/tokens
今回はToken Nameを Github Action Publish Token として生成しました。
その他環境変数
Release用のワークフローファイルを見てみると、 GITHUB_TOKEN という環境変数も参照しています。
ただ、GITHUB_TOKEN は
各ワークフロー ジョブの開始時に、GitHub によって、ワークフローで使用する一意の GITHUB_TOKEN シークレットが自動的に作成されます。 GITHUB_TOKEN はワークフロー ジョブでの認証に使用できます。
ということから、環境変数への設定は不要です。
GitHub Actionsがプルリクを作成できるように設定
Release用ワークフローの中では、GitHub ActionsがCHANGELOG.mdを変更するプルリクを作成します。
https://github.com/thinkAmi/railroads/blob/v0.2.0/.github/workflows/release.yml#L77
ただ、GitHubのリポジトリのデフォルト設定では、GitHub Actionsがプルリクを作成できません。
そこで、以下の記事を参考に、 Allow GitHub Actions to create and approve pull requests へチェックを入れます。
GitHub ActionsでのPR操作権限はデフォルトでオフになったよ
URL的には以下のページです。
https://github.com/thinkAmi/railroads/settings/actions
ちなみに、GitHub Actionsがプルリクを作成できなくても、JetBrains Marketplaceへのプラグインのpublishはできてしまいます。
その場合、Actionsの結果はこんな感じになります。
https://github.com/thinkAmi/railroads/actions/runs/10419491498/job/28857646112
GitHubのRelease機能を実行
Create a new release より新しくリリースを作成します。
- タグを指定
v0.2.0など、prefixとしてvを付与
- リリースノートを記載
その後、 Publish release ボタンをクリックします。
すると、GitHub Actionsが動作し、プラグインのpublishまで行われます。
合わせて、「Plugin approval status: Railroads plugin version 0.2.0」という件名で、以下のような内容を含むメールも届きました。
Thank you for submitting version 0.2.0 of the Railroads plugin to JetBrains Marketplace. It has been successfully uploaded and is now pending JetBrains' review and approval.
The review process normally takes two business days. You will receive a notification as soon as the status of this review changes.
しばらくするとレビューも終わり、正式にRailroads 0.2.0 が公開されました。
https://plugins.jetbrains.com/plugin/24076-railroads/
今回のpublishで分かったこと
What's Newに、GitHubのReleaseに記載したリリースノートが表示される
GitHubのリリースノートには以下のように書きました。
## What's Changed * add settings of plugin signing by @thinkAmi in https://github.com/thinkAmi/railroads/pull/8 * Fix: Use methodName.name instead of RContainer.getName() by @thinkAmi in https://github.com/thinkAmi/railroads/pull/9 * Add model tests and parser tests by @thinkAmi in https://github.com/thinkAmi/railroads/pull/10 * change railroads icon by @thinkAmi in https://github.com/thinkAmi/railroads/pull/38 * update CHANGELOG.md by @thinkAmi in https://github.com/thinkAmi/railroads/pull/43 * update pluginVersion to 0.2.0 by @thinkAmi in https://github.com/thinkAmi/railroads/pull/44 * update dependencies by dependabot
すると、Pluginの What's Newにリリースノートで記載した内容が表示されていました。
VersionはGitHubのタグとは連動していない
GitHubのタグには v0.2.0 と設定しました。
一方、PluginのVersionsタブを確認すると、GitHubのタグではなく、gradle.properties ファイルの pluginVersion の値が表示されました。
GitHubのprerelease機能と、JetBrains Marketplace機能のリリースチャンネルは連動していない
GitHub Actionsのワークフローファイルを見ると
name: Release on: release: types: [prereleased, released]
という設定になっていました。
そのため、GitHubのRelease機能で Set as a pre-release にチェックを入れた場合でも、ワークフローが動作するようでした。
また、IntelliJ Platform Plugin SDKのドキュメントによると、リリースチャンネルを切り替えることもできそうに見えました。
https://plugins.jetbrains.com/docs/intellij/publishing-plugin.html#specifying-a-release-channel
これらより、「もしかして、 Set as a pre-release にしたら、いい感じでリリースチャンネルを設定してくれるのでは」と考え、
- GitHubの設定で、タグ名を
v0.2.0-alphaにする - GitHubでのリリース実行時に
Set as a pre-releaseにチェックを入れる - gradle.properties ファイルの
pluginVersionは0.2.0のまま
として、GitHubのRelease機能を使ってみました。
しかし、
- GitHub上では
Pre-releaseと表示された - JetBrains Marketplace上では
0.2.0バージョンとして、デフォルトのリリースチャンネルでリリースされた- つまり、 0.2.0 が正式バージョンとしてリリースされた
という事態になりました。
これより、次回以降にアルファチャンネルなどでリリースしたい場合は、Specifying a Release Channelのドキュメントを読んで対応する or 諦めるとしたいと思いました。
https://plugins.jetbrains.com/docs/intellij/publishing-plugin.html#specifying-a-release-channel
同一の pluginVersion を指定すると、publishできない
上記の通り、0.2.0-alpha をリリースするつもりが 0.2.0 がリリースされてしまいました。
そこで、整合性を取るために、pluginVersion は変更せず、改めてGitHubのタグ v0.2.0 を作成してpublishしてみました。
すると、以下のエラーメッセージが表示され、publishすることができませんでした。
* What went wrong:
Execution failed for task ':publishPlugin'.
> Failed to upload plugin: Upload failed: The com.github.thinkami.railroads plugin already contains version 0.2.0 in channel
https://github.com/thinkAmi/railroads/actions/runs/10419812646/job/28858622696
これより、もしpublishしたい場合は、 0.2.1 などのようにpluginVersionを変更する必要がありそうでした。
今回は「0.2.0がリリースできているし、まぁいいか...」ということで対応を見送りました。
ReleaseのAssetsにはビルド結果が含まれない
Releaseページを見たところ、以下のスクリーンショットのようにソースコードのみ含まれていました。
そのため、IntelliJ Platform Plugin Templateのリリースワークフローでは、ビルド結果がGitHub上に残らないことが分かりました。
これにより、「GitHub Actionsでビルドしたプラグインをダウンロードし、直接インストールする」ができなくなります。
ただ、正式なルートでないプラグインのインストールは避けられるので、これはこれでよいのかなと思いました。
おわりに
JetBrains IDEでプラグインを作る際、IntelliJ Platform Plugin Templateをベースに作っておけば、プラグインのpublishまで自動化できることが分かりました。
publishの手間や心配事が解決できたため、今後も引き続きRailroadsのメンテナンスを行なっていきたいと思います。


