Kotlin NativeでAlfredのWorkflowを作ろう

この記事はJX通信社Advent Calendarの23日目です。

お久しぶりです。sakebookです。本日もKotlinネタです。タイトルの通り、今回はKotlin NativeでAlfredのWorkflowを作った話です。

tech.jxpress.net

Alfred

Macアプリです。ショートカットでいろんなアプリを起動させることができます。

その中でもWorkflowという機能が強力で、このために課金しました(課金しなくても十分便利ですが)。

同僚が自作のWorkflowを作っていて便利そうにしていたので、自分でも作ってみることにしました。

Workflowを作る

全くのはじめてだったのですが、こちらの記事がわかりやすかったです。

kuronat.hatenablog.com

記事内でも書かれてますが、要はJSONを吐くことができればいいわけです。

Kotlinでjarを生成して動かそうと思ったのですが、環境に依存するのと、どうせなら早く動くものがいいと思ってKotlin Nativeでやってみることにしました。

できたもの

areaと入力してから都道府県名や市区町村コードを入力することで候補が表示されます。データはJSONにしてworkflow呼び出し時に渡すようにしてます。

具体的にはworkflowで次のように実行してます。

$ ./実行ファイル.kexe query データ.json

f:id:sakebook:20181224150234g:plain
workflowを動かしてる画面

コードはこちらです。

github.com

環境は以下の通りです

  • Gradle Wrapper:4.7
  • kotlin-native-gradle-plugin:1.3.11
  • kotlinx-serialization-runtime-native:0.9.0

詰まったこと

  • Gradleのバージョン
    • 5.0ではじめは試してたのですが、依存解決がうまく行きませんでした。
  • pluginの記述
    • applyの方で書くかpluginsで書くかによってsettings.gradleも異なってきます。
  • Kotlin NativeからKotlinx.serializationを使う
    • Gradle5.0のコマンドで生成されるプロジェクトだとkonanを使っており、解決できませんでした。

多くのハマりどころはあったのですが、最終的にKotlinx.serializationのKotlin Nativeのサンプルを使うのが一番シンプルでした。この辺りは別途まとめたいと思ってます。

github.com

まとめ

Kotlin Nativeは単純に動かすだけならシンプルなのですが、込み入ったことをやろうとするとまだまだ情報が足りなくてハマることが多いです。しかし今までなかった選択肢を増やせるので、積極的にチャレンジして行きたい領域でもあります。

参考

Guides and Tutorials / Alfred

A Basic Kotlin/Native Application / Kotlin Programming Language

Gradle for Kotlin/Native / Kotlin Programming Language