🐬

Embulkプラグインをv0.11 & Kotlinで作る時にハマったポイント

2023/10/03に公開

embulk: v0.11
Java: openjdk version "1.8.0_292"
jruby: 9.4.3.0
Gradle: 8.3
Kotlin: 1.8
GitHub: https://github.com/guchey/embulk-input-ahrefs

初めてembulkのプラグインを作りました。v0.11では大きな変更が複数あるようでドキュメントが見つからずいくつかのポイントでハマったのでメモします。

以下の記事を参考にさせていただきました。
https://zenn.dev/dmikurube/articles/get-ready-for-embulk-v0-11-and-v1-0
https://joker1007.hatenablog.com/entry/2021/05/28/021140

embulk v0.11には embulk new がない

プラグイン開発の多くの記事に登場する embulk new がありませんでした。
自分でGradleプロジェクトを作成する必要し、必要な依存を追加していく必要がありました。

build.gradleの記述は https://github.com/embulk/gradle-embulk-plugins を参考にしました。

embulk v0.11には embulk -L がない

embulk -L ./embulk-input-ahrefs の形式で動作確認できてたようですがそのオプションがありませんでした。
動作確認のために以下のコマンドで開発中のプラグインをインストールしました。

meven plugin編

./gradlew publishToMavenLocal
cp build/publications/maven/pom-default.xml pom.xml
mvn install
.embulk/embulk.properties
m2_repo=/path/to/your/.m2/repository

(追記)

どうやら自分の指定の仕方が悪かったようです。
https://x.com/hiroysato/status/1709042389049135273?s=20

gem plugin編

./gradlew gem
embulk gem install build/gems/embulk-input-ahrefs-*.gem

build.gradle.ktsはGemブロックに対応してなさそう

Kotlin DSLだと gem / gemPush のブロックがエラーとなりました。
build.gradleで書くしかなさそうです。

// Enable the following "gem" and "gemPush" tasks if you want to publish your plugin also as a Ruby Gem.

// gem {
//     authors = [ "..." ]
//     email = [ "..." ]
//     // "description" of the Ruby Gem would come from "description" of the Gradle project.
//     summary = "Example input plugin for Embulk"
//     homepage = "https://.../"
//     licenses = [ "..." ]  // See: https://guides.rubygems.org/specification-reference/#license=
//
//     from("LICENSE")  // If you want to include LICENSE file(s) in the Ruby Gem package.
// }

// Push it by: "./gradlew gemPush"
// gemPush {
//     host = "https://rubygems.org"
// }

./gradlew gemPush が Broken pipe で失敗する

./gradlew gemPushが私の環境では Broken pipe になってしまい失敗しました。

Pushing gem to https://rubygems.org...
POST https://rubygems.org/api/v1/gems
ERROR:  While executing gem ... (IOError)
    Broken pipe

関連するかわかりませんがjrubyにissueがありました。
https://github.com/jruby/jruby-openssl/issues/242

./gradlew gemPush ではなく gem push して回避することにしました。

./gradlew gem
cd build/gems
gem push embulk-input-ahrefs-0.1.1-java.gem                                   

公開したプラグインをどうやって利用するか

meven plugin編

mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.2:get -Dartifact=io.github.guchey.embulk.input.ahrefs:embulk-input-ahrefs:0.1.1
.embulk/embulk.properties
m2_repo=/path/to/your/.m2/repository

gem plugin編

embulk gem install embulk-input-ahrefs
Ubie テックブログ

Discussion