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

PythonでCLIツールを作ってみた

uutan1108
August 04, 2022

 PythonでCLIツールを作ってみた

こちらのイベントで発表しました。
https://yumenosora.connpass.com/event/255075/

uutan1108

August 04, 2022
Tweet

More Decks by uutan1108

Other Decks in Technology

Transcript

  1. PythonでCLIツールを作ってみた
    見た目でわかる!ビジュアルネタLT会
    うーたん

    View full-size slide

  2. 自己紹介
    うーたん
    所属 : 公立千歳科学技術大学
    twitter : @uutan1108
    github : OHMORIYUSUKE
    趣味 : アニメを見ること
         ヤマノススメが好き
         今期はリコリス・リコイル

    View full-size slide

  3. 目次
    1. 作ったもの
    2. 仕様技術
    a. fire
    b. rich
    c. pydantic
    3. コード

    View full-size slide

  4. 作ったもの

    View full-size slide

  5. 作ったもの
    YAMLで定義されたテスト
    を実行するためのCLIツー

    スター★ください
    https://github.com/OHMORIYUSUKE/grech

    View full-size slide

  6. 特徴
    1. Shellで様々な環境をテストすることができる
    a. shellが実行可能な環境であればテストすることができる
    2. YAMLでテストを定義することができる
    a. テストの書き方を決めることができる
    3. テストケースを配布することができる
    a. YAMLファイルは公開されている必要がある
    4. Shellの結果のみでテストの正誤判定
    a. cat test.py | grep main のようなコマンドを実行させてテストする
    5. YAML内で使いたい変数を環境ごとに設定させることができる
    a. テストを行う人が設定することができる(rootのパスワードなど)

    View full-size slide

  7. YAMLでテストを定義する
    YAMLのサンプル
    https://github.com/OHMORIYUSUKE/grech/blob/main/test.yml

    View full-size slide

  8. 環境ごとの変数
    テスト内で環境ごとの値を設定させることができる。
    コマンド内で用いることができる

    View full-size slide

  9. テスト
    テストをまとめることができる テストの名前
    コマンド
    正規表現
    正規表現すべてにマッチするかどうか
    コマンドを実行するディレ
    クトリ
    成功しなかったときに出る
    メッセージ

    View full-size slide

  10. テストを走らせる

    View full-size slide

  11. インストール
    pipでインストールすることができる
    mainにマージされるとビルドされる

    View full-size slide

  12. 初回
    どのテストを行うか設定
    yamlファイルを設定し、必要な値を設定する
    YAMLで設定した変数の設定を求められる

    View full-size slide

  13. テストを実行
    すべてのテストを実行することができ

    View full-size slide

  14. テストの内容
    –debug 1 を与えるとどのようなコマンドを実行してテストを行っているか確認することが
    できる

    View full-size slide

  15. 仕様技術

    View full-size slide

  16. ライブラリ
    - poetry(Pythonのパッケージマネージャ)
    を使った
    - 開発環境はDockr
    話したいこと
    ● fire
    ● rich
    ● pydantic
    使ったライブラリ

    View full-size slide

  17. fire
    PythonでCLIツールを作るときに便利
    helpなども良しなにしてくれる
    https://github.com/google/python-fire

    View full-size slide

  18. rich
    ● 画面幅に合わせたテーブルを作成することができる(感動)
    ○ termtables(テーブルをいい感じに表示するライブラリ )は画面幅を考慮しない
    ● 文字に色もつけられる
    ● マークダウンをいい感じに表示
    ● プログレスバーも作れる
    ターミナルをおしゃれにできる
    https://github.com/Textualize/rich

    View full-size slide

  19. pydantic
    モデルの型を定義することができる
    型に合致しない場合はエラーになる
    型ヒントも出してくれる!!
    今回はYAMLのデータをモデルにしてコード内で
    扱うようにした
    https://github.com/samuelcolvin/pydantic

    View full-size slide

  20. コードを自分なりにきれいに
    main.pyだけで処理していたコードを
    MVCを意識して書き直してみた。
    main.py → Controller → UseCase → Controller → View
    mai.pyだけのコードよりは見やすくなったのでは...

    View full-size slide

  21. きれいなコードを書きたい...

    View full-size slide

  22. ご清聴ありがとうございました

    View full-size slide