Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PythonでCLIツールを作ってみた
Search
uutan1108
August 04, 2022
Technology
0
1.5k
PythonでCLIツールを作ってみた
こちらのイベントで発表しました。
https://yumenosora.connpass.com/event/255075/
uutan1108
August 04, 2022
Tweet
Share
More Decks by uutan1108
See All by uutan1108
企業主催勉強会をきっかけに職能間の境界を越える ロングver
ohmori_yusuke
1
230
企業主催勉強会をきっかけに職能間の境界を越える
ohmori_yusuke
1
100
OpenAPIに静的解析とフォーマッターを導入する
ohmori_yusuke
3
260
Next.jsのClient-side RenderingでPHPを動かす
ohmori_yusuke
1
210
プログラミング&実行できるWEBアプリを手作り
ohmori_yusuke
3
460
社外向け勉強会とプライベートの勉強会を開催してみて
ohmori_yusuke
2
310
勉強会に楽しさワクワクは重要
ohmori_yusuke
2
420
OpenAPI を守るのは難しい
ohmori_yusuke
2
1.2k
コミュニティに参加したことで起きた変化
ohmori_yusuke
3
180
Other Decks in Technology
See All in Technology
データ分析を支える技術 生成AI再入門
ishikawa_satoru
0
380
エンジニア向け会社紹介資料
caddi_eng
14
220k
「我々はどこに向かっているのか」を問い続けるための仕組みづくり / Establishing a System for Continuous Inquiry about where we are
daitasu
0
170
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
RAGのサービスをリリースして1年3ヶ月が経ちました
segavvy
4
910
コミュニティサービスに「あなたへ」フィードを リリースするまでの試行錯誤
takapy
1
150
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
yuriemori
0
190
20240724_cm_odyssey_hibiyatech
hiashisan
0
110
運用改善、不都合な真実 / 20240722-ssmjp-kaizen
opelab
17
8k
AWS IAMのアンチパターン/AWSが考える最低権限実現へのアプローチ概略(JAWS-UG朝会#59資料改修20分版)
htan
0
330
OSSコミットしてZennの課題を解決した話
dyoshikawa1993
0
150
AWSサービスメニュー開発をしていてAWSを好きだ!と感じた瞬間
toru_kubota
0
130
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
KATA
mclloyd
20
13k
Happy Clients
brianwarren
94
6.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
26
1.6k
A better future with KSS
kneath
231
17k
Thoughts on Productivity
jonyablonski
64
4.1k
Art, The Web, and Tiny UX
lynnandtonic
291
20k
Building an army of robots
kneath
301
42k
The Illustrated Children's Guide to Kubernetes
chrisshort
39
47k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
Transcript
PythonでCLIツールを作ってみた 見た目でわかる!ビジュアルネタLT会 うーたん
自己紹介 うーたん 所属 : 公立千歳科学技術大学 twitter : @uutan1108 github :
OHMORIYUSUKE 趣味 : アニメを見ること ヤマノススメが好き 今期はリコリス・リコイル
目次 1. 作ったもの 2. 仕様技術 a. fire b. rich c.
pydantic 3. コード
作ったもの
作ったもの YAMLで定義されたテスト を実行するためのCLIツー ル スター★ください https://github.com/OHMORIYUSUKE/grech
特徴 1. Shellで様々な環境をテストすることができる a. shellが実行可能な環境であればテストすることができる 2. YAMLでテストを定義することができる a. テストの書き方を決めることができる 3.
テストケースを配布することができる a. YAMLファイルは公開されている必要がある 4. Shellの結果のみでテストの正誤判定 a. cat test.py | grep main のようなコマンドを実行させてテストする 5. YAML内で使いたい変数を環境ごとに設定させることができる a. テストを行う人が設定することができる(rootのパスワードなど)
YAMLでテストを定義する YAMLのサンプル https://github.com/OHMORIYUSUKE/grech/blob/main/test.yml
環境ごとの変数 テスト内で環境ごとの値を設定させることができる。 コマンド内で用いることができる
テスト テストをまとめることができる テストの名前 コマンド 正規表現 正規表現すべてにマッチするかどうか コマンドを実行するディレ クトリ 成功しなかったときに出る メッセージ
テストを走らせる
インストール pipでインストールすることができる mainにマージされるとビルドされる
初回 どのテストを行うか設定 yamlファイルを設定し、必要な値を設定する YAMLで設定した変数の設定を求められる
テストを実行 すべてのテストを実行することができ る
テストの内容 –debug 1 を与えるとどのようなコマンドを実行してテストを行っているか確認することが できる
仕様技術
ライブラリ - poetry(Pythonのパッケージマネージャ) を使った - 開発環境はDockr 話したいこと • fire •
rich • pydantic 使ったライブラリ
fire
fire PythonでCLIツールを作るときに便利 helpなども良しなにしてくれる https://github.com/google/python-fire
rich
rich • 画面幅に合わせたテーブルを作成することができる(感動) ◦ termtables(テーブルをいい感じに表示するライブラリ )は画面幅を考慮しない • 文字に色もつけられる • マークダウンをいい感じに表示
• プログレスバーも作れる ターミナルをおしゃれにできる https://github.com/Textualize/rich
pydantic
pydantic モデルの型を定義することができる 型に合致しない場合はエラーになる 型ヒントも出してくれる!! 今回はYAMLのデータをモデルにしてコード内で 扱うようにした https://github.com/samuelcolvin/pydantic
コード
コードを自分なりにきれいに main.pyだけで処理していたコードを MVCを意識して書き直してみた。 main.py → Controller → UseCase → Controller
→ View mai.pyだけのコードよりは見やすくなったのでは...
きれいなコードを書きたい...
ご清聴ありがとうございました