Pythonでマウスを動かせるようになった日(Python記念日🎉)
今日、Pythonを使ってWindows上のマウスを動かすことに成功した。Python記念日である。厳密にはPyAutoGUI記念日だが語呂が悪いのでPython記念日でいいや😊
(約 3,900文字の記事です。)
ここまで到達するのにかかった時間
119時間18分。TickTickの集計結果。
学んだ内容
変数、式、ステートメント
条件分岐
リスト操作と反復
データ構造とアルゴリズム
文字列操作とトラバーサル
辞書、タプル、セット
再帰、正規表現、OOP
PyCharm ProとPyAutoGUIのインストール
手に入ったもの
マウスカーソルを2秒かけて指定座標に移動することができるようになった。
時間効率の計算
正味3秒間の自動化のために119時間使ったので、学習時間に対する自動化の時間効率は、
3秒÷119時間
=3秒÷428,400秒
=0.000007002
=0.0007002(%)
0.0007%の時間効率を達成した!素晴らしい!!!
冗談はここまで😊
PyAutoGUIが目的だが、それは目標の一部
実際にはPyAutoGUIに関わらず、プログラミング言語として普通に学習することになるアレコレを一通りPythonコーディングしながら学んでいるので、99.99%はPyAutoGUIには関わらない。そしておそらくマウスやキーボードの操作にはまったく関わらない内容に学習時間を使っている。
Python流を身につけるため
まずPythonは配列が前提。リストや文字列、辞書、タプル、セットなど、それらへのアクセス方法(反復)についても、数字でループ回数を指定するようなスタイルじゃない。イテラブルなオブジェクトから反復回数と反復対象を取得する。「5回だけ回せばそれでいいんだよ!なぜ5を受け付けない?」という発想になるのがまぁ自然だが、Pythonは「なぜ5回回したいのか?その対象は何なのか?」という問答を要求するのがPython流なのだ。そういうプログラミングパラダイムを持つのがPythonという言語。
またインデントでブロックを分け、終端文字が不要であり、変数(オブジェクト)の型の指定すらもさせないという、一見すれば不思議で分かりにくいのだが、学習を進めると変幻自在なそのスタイルによる自由さがだんだんと分かってくる。関数が1種類の型を返さないのも最初は不思議だった。Returnの中身がintとstrとが混在していてもOKな関数。ナンダコレ?だが、プログラミングパラダイムとして「関数型じゃない」のがPythonだったわけだ。
C言語スタイルと違うところも多いので、逆に既成概念が邪魔する場合もあったが、だんだんとPython流になれてくると、かなりスッキリとした体系だと感じる。PEP 8によるコードの可動性に関するルールの徹底なども効いている。
あとはPyCharmによる1行単位の補完の強烈さ。なんで予測できるのか未だに謎だが、確かに9割くらいは提案される自動補完がビンゴだったりする。謎だ。だがそれによってタイピングダダダッ!ってことがかなり減った。ぽつぽつとTABキーやEnterキー、時々DelやBSで文字列を消して単語を修正する程度で教材のコードが完成する。う~ん、時代は変わった。
UWSC ProからPyAutoGUIへ切り替え準備
さて、そもそもPython学習開始のモチベーションとしてはデスクトップPC上での自動化、一般的にRPAをPCで実現させることだった。UWSCはWindows上でキーボードやマウスの操作の記録と再生ができる有料ツールだったが、開発者が天に召されたため開発終了だ(たしか有料版のProはもう販売終了して久しいと記憶している)。UWSCはまだWindows 10では動くが今後はどうなるか不明。特にexe化したバイナリファイルがWindows 11以降も動くのか不明。そこに依存し続けるのは危険。
かといってまたゼロから謎言語のRPAソフトに習熟しても、何だか未来が開けないなぁと思っていた。そこでPythonでもGUI操作ができると知ったので、加えてBlenderでもMayaでも使えるPythonならば、習熟すればするほど色々美味しいのでは?との思いから学習開始。
肝はマウス操作の自動化
実はキーボード操作についてはUWSCに限らず、Auto Hot KeyやPhrase ExpressといったWindowsアプリで色々と自動化している。キーボードの特定のショートカットキーの入れ替えだったり、独自のホットキーで日付文字列や定型句やマークダウン記法の記号の自動入力など。
だがマウス操作だけはどうしてもUWSCに依存している。録画と再生が簡単なのでついつい使ってしまう。サッと記録して、ちょっと修正してパッと使える気軽さが魅力。だがそれも未来が危うい。これをPythonコーディング+exe化できれば(というかできるはず)、自分専用のRPAツールの完成だ。また条件文などの追加も自由自在だし、旨味しかない。
例えばWordPressのブロックエディタなどでは、ホットキー割り当てが全然足らず、キーボードから手を離さずに快適に執筆できるにはほど遠い。必ずマウス操作が出てくる。この操作をPythonで定型化、exe化して、キーボード操作で各exeを呼び出せばマウスに触らずに快適執筆!これも考えている。
note執筆にしても然り。目次の挿入にホットキーがない。必ずマウス操作が必要。これもホットキー一発でexeを呼び出して挿入できれば快適。
そういう地味な効率化で「秒単位の蓄積」が、いずれは119時間分溜まることになる、確実に。その節約ができればあとはボーナスステージだ。
実はマウス操作必須の作業がまだまだある
例えば「マウスで、いつも固定的なこの座標をクリックして、あのホットキーを押して、このボタンを選んで、ここをクリックして」など、本当に定型化した作業をワンクリックで実現させたいだけなんだ。そういう作業はPhotoshopでもPremiereでも、クリスタでも、ZbrushでもBlenderでも、実は山ほどある。だがそれらの管理やRPAツールとしての実現までの手間などを考えると、試行錯誤の時間よりも「まぁしょうがないか」で済まして手でやってしまうことが多かった。(たまにしかコーディングしないUWSC構文は、使う頃にはいつも忘れていてHELPを読みながら試行錯誤するのはとてもストレス。)
でもそれでもチリツモで、実はPythonに習熟したら片手間でサッとそれらの自分専用RPAツールexeを作ったりメンテしたりしてコツコツ育てていけば、いずれはその秒単位の節約の蓄積がコーディング作業を超える日が来る。そうすればあとはボーナスステージで全部浮いた時間を自分のために使えることになる。それは意味のある生産的な活動だ。
そこをPython+PyAutoGUI、次のステップではPySideでウィンドウアプリ化していきたいわけ。さすがに全部ホットキー専用exeというわけにもいかないのでGUI付きのWindowsアプリにするためにPySideが必要。だがGUIプログラミングになればOOP思考がないと詰むので、そのために基礎を学んでいたのが昨日の話。
なのでジョークとして時間効率0.0007%を挙げたが、実は119時間の学習はこれからの肥やしになる予定なのだ。なのでまったく無駄じゃない。
しかしここまで時間がかかってもまだ学習教材の4割しか終わっていない。どんだけ丁寧で長い学習教材なのか……。まぁそういう充実した教材を選んだので、まだまだSQLだとかAPIだとかWebスクレイピングだとか色々あるっぽいのだがもうワケワカメである😭それはおいといて、ある程度PyAutoGUIを学んだら自分専用ツール作りにいったん切り替えて、exe化して使ってみたい。まずはそこが目標。
それ以外の高度なことは、ま、そこに辿り着いてから考える予定。学習しないかも知れないしね。WebスクレイピングやDBなどには今のところ興味がない。機械学習に手を出すつもりもない。
というわけでサラダ記念日ならぬPython記念日、厳密にはPyAutoGUI記念日でした。マウスが動いた日😊
今回の創作活動は約1時間30分(累積 約3,828時間)
(1,085回目のnote更新)