📚

Ktor Plugin Registryに自作プラグインを公開しよう

2024/04/24に公開

Ktor Plugin Registryについて

先日、Ktor Plugin RegistryというものがJetbrainsの公式Blogにて発表されました。
https://blog.jetbrains.com/kotlin/2024/04/the-ktor-plugin-registry/
自作のKtorプラグインを公開することで、これまでは公式プラグインのみが選択できたKtor Project GeneratorやIntelliJ IDEAのKtorプロジェクト生成画面に自作プラグインを加えることができます。
以前Ktorを使ってLINE Botを作ったことがあり、Webhookの署名検証の部分をプラグインとして作っていたので早速公開してみました。一応Blogにも大まかな公開の手順は乗っているのですが、ハマりそうなところも多々あったのとREADMEをちゃんと読まなかった自分自身への反省も兼ねて解説していこうと思います。

公開の手順

プラグインの公開に必要なものは以下の通りです。

  • Maven Centralまたは他の公開MavenリポジトリにApache 2.0ライセンスで公開したプラグイン
  • group.ktor.yaml:プラグインの作成者の情報を記入
  • documentation.md:プラグインの使い方などを記入。Project Generatorでプラグインを選択すると表示される。
  • install.kt or routing.kt:生成されたプロジェクトに挿入されるプラグインのコードを記入
  • versions.ktor.yaml:Ktorのバージョンとプラグインのバージョンの対応を記入
  • manifest.ktor.yaml:プラグイン同士の依存関係やバージョン管理システムのリンクなどを記入

Ktorのカスタムプラグインには

  • すべてのRouteに適用されるApplicationPlugin
  • 特定のRouteのみに適用させるRouteScopedPlugin

の二種類があります。公開するプラグインがApplicationPluginの場合はinstall.ktと必要に応じてrouting.ktRouteScopedPluginの場合はrouting.ktを作成しましょう。私の場合はWebhookを受け付けるのは特定のRouteだけなので、RouteScopedPluginとなります。
また、各ファイルの記入例はtemplatesにあるので適宜確認してください。
では早速プラグインを公開していきます。
まず、以下のリポジトリをForkします。
https://github.com/ktorio/ktor-plugin-registry
ローカルへのクローンですが、ファイル名の関係でWindowsだとうまく行きません。公式リポジトリのIssuesにある通り、Gitの設定をいじれば解決するらしいのですが、この程度ならGithubのCodeSpaceを使ったほうが楽だと思います。
以下のように必要なファイルを作成してください。

plugins
└── server
    └── <group>
        ├── group.ktor.yaml
        └── <plugin-id>
            ├── versions.ktor.yaml
            └── 2.0
                ├── manifest.ktor.yaml
                ├── install.kt(or routing.kt)
                └── documentation.md

templateの記入例を見ながら、公開するプラグインに関する情報を記入してください。
ファイルの作成が終われば./gradlew buildRegistryを実行し、作成したファイルに問題がないかチェックしてください。また、./gradlew buildTestProjectを実行することでサンプルプロジェクトを作成できます。install.ktやrouting.ktが期待通りに配置されているか確認しましょう。
これらが終われば、PRを作成することでKtorチームが審査を行います。

最後に

拙い文章でしたが最後まで見ていただきありがとうございます。是非皆さんでKtor、ひいてはKotlinを盛り上げていきましょう。

おまけ

ほんとに乗っててちょっと感動した

Discussion