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.6k
PythonでCLIツールを作ってみた
こちらのイベントで発表しました。
https://yumenosora.connpass.com/event/255075/
uutan1108
August 04, 2022
Tweet
Share
More Decks by uutan1108
See All by uutan1108
開発終了後こそ成長のチャンス!プロダクト運用を見送った先のアクションプラン
ohmori_yusuke
1
60
学生の時に開催したPerl入学式をきっかけにエンジニアが組織に馴染むために勉強会を主催や仲間と参加して職能間の境界を越えていく
ohmori_yusuke
2
360
やりっぱなしで終わらない勉強法
ohmori_yusuke
2
260
OpenAPIにも静的解析とフォーマッターを導入して快適にスキーマ定義する
ohmori_yusuke
2
150
スクラムフェスに参加した
ohmori_yusuke
1
270
新卒エンジニアが組織に馴染むために勉強会を主催してチームの壁を越える
ohmori_yusuke
1
310
CGIプログラムを書いてみた
ohmori_yusuke
1
62
”私だけ”の技術発信から”仲間と”技術発信に変化するために
ohmori_yusuke
4
230
企業主催勉強会をきっかけに職能間の境界を越える ロングver
ohmori_yusuke
2
280
Other Decks in Technology
See All in Technology
AWS CDKでデータリストアの運用、どのように設計する?~Aurora・EFSの実践事例を紹介~/aws-cdk-data-restore-aurora-efs
mhrtech
4
640
とあるユーザー企業におけるリスクベースで考えるセキュリティ業務のお話し
4su_para
3
320
20241031_AWS_生成AIハッカソン_GenMuck
tsumita
0
110
日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system
yng87
1
490
[JAWS-UG金沢支部×コンテナ支部合同企画]コンテナとは何か
furuton
3
240
チームを主語にしてみる / Making "Team" the Subject
ar_tama
4
300
現地でMeet Upをやる場合の注意点〜反省点を添えて〜
shotashiratori
0
520
LeSSに潜む「隠れWF病」とその処方箋
lycorptech_jp
PRO
2
120
2024-10-30-reInventStandby_StudyGroup_Intro
shinichirokawano
1
620
Vueで Webコンポーネントを作って Reactで使う / 20241030-cloudsign-vuefes_after_night
bengo4com
4
2.5k
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
15
3.9k
新R25、乃木坂46 Mobileなどのファンビジネスを支えるマルチテナンシーなプラットフォームの全体像 / cam-multi-cloud
cyberagentdevelopers
PRO
1
130
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
4 Signs Your Business is Dying
shpigford
180
21k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
107
49k
The Art of Programming - Codeland 2020
erikaheidi
51
13k
The Cult of Friendly URLs
andyhume
78
6k
It's Worth the Effort
3n
183
27k
How to train your dragon (web standard)
notwaldorf
88
5.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
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だけのコードよりは見やすくなったのでは...
きれいなコードを書きたい...
ご清聴ありがとうございました