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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
uutan1108
August 04, 2022
Technology
2.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PythonでCLIツールを作ってみた
こちらのイベントで発表しました。
https://yumenosora.connpass.com/event/255075/
uutan1108
August 04, 2022
More Decks by uutan1108
See All by uutan1108
Designing a Cross-Disciplinary Engineering Community Through Anime
ohmori_yusuke
3
86
コミュニティ・勉強会を作るのは目的じゃない
ohmori_yusuke
1
380
映画のエンドロール風の動画を自動生成するツールを作った
ohmori_yusuke
2
84
アウトプットは“成果物”じゃなく“副産物”だった話
ohmori_yusuke
1
120
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
870
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
8
6.1k
勉強会から始まった僕のDevRel~新卒エンジニアがつないだ2年間の軌跡~
ohmori_yusuke
2
520
WebエンジニアがSwiftをブラウザで動かすプレイグラウンドを作ってみた
ohmori_yusuke
0
370
アニメがエンジニアをつなぐ!「エンジニアニメ」勉強会が巻き起こすCo-Creationの波
ohmori_yusuke
0
340
Other Decks in Technology
See All in Technology
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
320
Claude Teamプランの コスト最適化を考える
rfdnxbro
0
460
Android skills に学ぶ
kokiko
0
170
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
460
あなたの知らないバージョン命名規則
sat
PRO
2
630
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
Introduction to Bill One Development Engineer
sansan33
PRO
0
470
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
130
What's new in Go 1.27?
ciarana
0
430
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
690
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
The Invisible Side of Design
smashingmag
301
52k
Mind Mapping
helmedeiros
PRO
1
330
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
520
How to make the Groovebox
asonas
2
2.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Claude Code のすすめ
schroneko
67
230k
Accessibility Awareness
sabderemane
1
180
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
810
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Building Applications with DynamoDB
mza
96
7.2k
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だけのコードよりは見やすくなったのでは...
きれいなコードを書きたい...
ご清聴ありがとうございました