さわだです。
このブログを更新しなかった間に Power Platform に触れたり社内政治が大きく変わったり、いろんなことがありました。
そんな中、毎日やる作業が増えたので Python で自動化した話です。
そもそも、私がぷよぐやみんぐに興味を持ってスパゲッティを茹で始めたのは Python が最初でした。
型の概念はないしネストしまくりだし、今考えてみれば最悪なコードでした。
それが高 1 くらいだったので、実に 5 年ぶりに Python を書いたことになります。
当時は Python3 が出始めたくらいだった気がする。
お仕事でぷよぐやみんぐを始めてから、Linter や Formatter を気にし始めるようになりました。
TypeScript を書いた際 eslint と Prettier に感動したからでしょう。
んで、せっかく Python 久しぶりに書くなら Linter と Fomatter を導入して書くか、という気持ちになりました。
なので、やったこととしては
と言ったところ。
TS の時は深く調べずに友人からの勧めで eslint と Prettier を使っていましたが、今回は完全に一人で書ききったので、いろんなことを調べました。
びっくりしたのが、 種類の多さ 。Linter だけで数種類、Formatter も数種類、どれを選ぼう…? と困惑しました。
まあでも今回は久々に書くし、新しい機能や書き方になれるためにも と思って一番 鬱陶しい 厳しいと言われている Pylint と、コードスタイルを細かく指導してくれる black を採択しました。
参考: https://zenn.dev/naiq112/articles/df1b32fc08d383
anyenv から pyenv を 入れて、 3.10.5 を使用します。
参考: https://challenge-pg.com/2021/09/14/pylint/
丸投げです。
参考: https://misprochef.com/posts/python-black/
Pylint を VSCode に導入する の設定に加えて、この記事の flake8 を Pylint と読み替えることで快適な設定をすることができました。
以下のコードブロックにすべてが詰まっている。
class Hogehoge:
"""
hogehoge に関するクラスです。
"""
def __login(self, user_name: str, password: str) -> None:
"""
hogehoge にログインします。
引数:
- user_name: str
- password: str
返り値:
- None
"""
ログインするメソッドなのに返り値が None なのはおかしいとかいうな
お前立派な言語になったな!!!!!!!!!!!!!
クラス内のメソッド名の先頭にアンダーバーを 2 つ付けることで、外側から簡単にアクセスできなくなり、実質的なプライベートメソッドを実装することができるそうです。
参考: https://program-shoshinsya.hatenablog.com/entry/2019/12/30/233802
スコープ内で宣言した変数がスコープ外で使えるような不思議な言語だったのに、こんなに立派になって…!
確かに動作上はプライベートメソッドになるけど、Python でプライベートメソッドってあんまり実装しないらしい。呼ばなきゃ良いでしょ、みたいな考えっぽい。
: str
とか -> None
とか。
型の概念が未だにゆるめの Python ですが、型注釈をつけることで、ある程度書きやすくなります。
会社に入ってから TS だの Golang だの Java だの書いていたので、これはありがたい。
コードの先頭、クラスや関数に書くコメント。
Pylint だとこれを書かないと警告が出たまんまになるので「うるせ~~~~~!!!!!!!」と言いながらちゃんと書きました。
ここからは上のコードに出てこないけど紹介したい事柄。
TS の型ガード的なもの。
特定の値しか許容しないみたいな動きができて便利。
例
answer: Literal[0, 1] = int(input())
参考: https://tech.mntsq.co.jp/entry/2020/12/25/160034
△
if hogefuga == None:
○
if hogefuga is None:
None は唯一無二の None だから、同一のオブジェクトかっていう判別でも良いよね、という話。
参考: https://qiita.com/i13602/items/6d8914e019c13e858c72
今回のコードでは触れなかっただけでもっといろんな機能が追加されてるんだろうなあと思いました。
やっぱり定期的にいろんな言語に触れるべきだなあ…
それではまた気が向いた時に。