Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kotlinx.cliで始めるCLIアプリ開発

 kotlinx.cliで始めるCLIアプリ開発

CAMPHOR- LT 2020 Summer にて発表

Yuta Tomiyama

August 08, 2020
Tweet

More Decks by Yuta Tomiyama

Other Decks in Programming

Transcript

  1. kotlinx.cliで始める
    CLIアプリ開発
    CAMPHOR- LT 2020 Summer

    View Slide

  2. 自己紹介
    HN: マヤミト
    会津大学26期 (学部3年)
    Zli 現代表
    Twitter: @yt8492
    GitHub: https://github.com/yt8492
    好きな技術: Kotlin
    https://yt8492.com Facebookのすがた
    Twitterのすがた

    View Slide

  3. もくじ
    1. そもそもKotlinでCLIアプリの開発ができるのか?
    2. kotlinx.cli の紹介
    a. プロジェクトへの導入
    b. ArgParser
    c. Argument
    d. Option
    e. Subcommand
    3. デモ

    View Slide

  4. 1. そもそもKotlinでCLIアプリ開発ができるのか?

    View Slide

  5. 1. そもそもKotlinでCLIアプリ開発ができるのか?
    A. できます。(できなかったらそもそも今日登壇してない)

    View Slide

  6. 前提: KotlinでCLIアプリを開発するには
    - 実行可能なjarファイルにする
    - 実行可能なバイナリにする
    - nodeで実行可能なjsにする

    View Slide

  7. 2. kotlinx.cliとは
    - Kotlinのコマンドラインパーサーライブラリ
    - Kotlin公式が出している
    - コマンドやパラメータを宣言的に書ける
    - マルチプラットフォーム対応
    - Kotlin/JVM, Kotlin/JS, Kotlin/Native
    (公式リポジトリのReadmeより適当に和訳)
    https://github.com/Kotlin/kotlinx-cli

    View Slide

  8. 使用例1

    View Slide

  9. 使用例2

    View Slide

  10. kotlinx.cliの導入
    方法その1
    build.gradleに依存を追加

    View Slide

  11. kotlinx.cliの導入
    方法その2(Kotlin/Nativeの場合のみ)
    build.gradleのターゲットの設定でenableEndorsedLibsをtrueにする

    View Slide

  12. ArgParser
    コマンドライン引数をパースしてくれるやつ
    コンストラクタにプログラム名を渡す
    parseメソッドにコマンドライン引数のString型の配列を渡してパース

    View Slide

  13. Argument
    そのCLIアプリの主要な引数
    例: catで渡すファイル名
    type: 引数のタイプ(String, Int, Double, Boolean, Choice)
    description: 引数の説明
    変数名がそのままargumentの名前になる

    View Slide

  14. Option
    コマンドのオプション
    例: git commit --amend
    type, description: Argumentと同じ
    shortName: -が1つの省略形
    Argumentと同じく、変数名がそのままオプション名(fullName)になる
    デフォルト値や必須のオプションなどを設定可能

    View Slide

  15. Subcommand
    CLIアプリのサブコマンド
    例: git add, git commit
    Subcommandクラスを継承して実装する
    Subcommandクラスのコンストラクタに名前と説明を渡す
    ArgumentとOptionの使い方はほぼ同じ
    executeメソッドに実行時の処理を実装する

    View Slide

  16. デモ

    View Slide

  17. 使ってみた感想
    - めちゃくちゃ楽
    - 宣言的に書けるので読みやすい
    - helpを自動で設定してくれるのが良い
    - MPP対応なのでいろいろな使い方ができそう
    - サーバーの起動時のオプションをkotlinx.cliを使って渡すなど
    - CLIアプリの場合バイナリにできるKotlin/Nativeと相性が良い

    View Slide

  18. リンク集
    kotlinx.cli
    https://github.com/Kotlin/kotlinx-cli
    今回のサンプルアプリ
    https://github.com/yt8492/CliSample
    catをKotlin/Nativeで実装しようとしてるやつ(WIP)
    https://github.com/yt8492/CatKt

    View Slide