レガシーなWindowsアプリをPythonでちょっとRPA化
🕰 背景
業務で使っている 古い .NET 製のデスクトップアプリ に、
「一覧上のチェックボックスを一括でONにする」機能がなかった。
1画面に40行ほどチェックボックスが並んでおり、
毎回それをマウスで1つずつクリックしていくという、
たいしたことないけどストレスがあった。
パッケージのアプリ側を改修するのは無理なので、
「そこだけRPAできないか?」と思い立って
Pythonで軽いスクリプトを書いてみた。
⚙️ 使用環境
項目 | 内容 |
---|---|
OS | Windows 10 / 11 |
アプリ | .NET Framework製(WinForms系) |
Python | 3.11 |
ライブラリ | PyAutoGUI |
実行形態 | スクリプト or exe(PyInstallerで変換) |
わざわざRPAツールを使わなくても
“ちょっとした自動化”にPythonは本当に便利。
🧰 1. 座標の取得
まず、クリック位置(X, Y)を調べる必要がある。
PyAutoGUIを使うなら、以下のワンライナーでマウス位置を確認できる:
import pyautogui, time
time.sleep(3)
print(pyautogui.position())
私は今回は 「MPos」(フリーのマウス座標表示ツール)を使った。
画面上でマウスを動かすだけで現在の座標が常に表示されるので、
各行のY座標を素早く測るのに便利。
🧩 2. 行ごとの座標を調べた結果
単純に「行ごとに +23px」ではズレが生じるタイプのUIだった。
実際に計測した結果がこちら👇
行番号 | Y座標 |
---|---|
0 | 102 |
5 | 208 |
10 | 313 |
15 | 417 |
20 | 522 |
25 | 627 |
30 | 732 |
35 | 838 |
40 | 943 |
このように、5行ごとに増分が小数点単位で少しずつ違うため、
単純なループではクリック位置がズレていく問題が発生。
そこで、5行単位で座標補間する方式にした。
pythonのコードはchat GPTで生成。
💻 3. Pythonスクリプト本体
ファイル名:checkbox_auto_click.py
import pyautogui
import time
import os
from datetime import datetime
# ======== 設定 ========
LOG_FILE = r"C:\checkbox_auto_click\checkbox_click.log"
CHECKBOX_X = 553 # チェックボックス列のX座標
CLICK_DELAY = 0.2 # 各クリックの間隔
# =====================
# Y座標補正テーブル(5行単位)
Y_MAP = {
0: 102,
5: 208,
10: 313,
15: 417,
20: 522,
25: 627,
30: 732,
35: 838,
40: 943,
42: 985
}
# 区間ごとの1行あたりの増分を自動計算
SEGMENTS = []
keys = sorted(Y_MAP.keys())
for i in range(len(keys) - 1):
start_line = keys[i]
end_line = keys[i + 1]
start_y = Y_MAP[start_line]
end_y = Y_MAP[end_line]
gap = (end_y - start_y) / (end_line - start_line)
SEGMENTS.append((start_line, end_line, start_y, gap))
def calc_y(line):
"""指定行番号のY座標を補間で算出"""
for start, end, base_y, gap in SEGMENTS:
if start <= line <= end:
return int(base_y + (line - start) * gap)
return Y_MAP[max(Y_MAP.keys())]
def log(message):
os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")
text = f"{timestamp} {message}"
print(text)
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(text + "\n")
def main():
log("=== チェックボックス自動クリック(5行補正)開始 ===")
log("3秒後に対象ウィンドウを前面に表示してください...")
time.sleep(3)
for i in range(43): # 0〜42行目までクリック
x = CHECKBOX_X
y = calc_y(i)
pyautogui.click(x, y)
log(f"クリック: 行{i} (x={x}, y={y})")
time.sleep(CLICK_DELAY)
log("✅ 全クリック完了")
log("=== 終了 ===\n")
if __name__ == "__main__":
main()
⚙️ 4. 実行方法
- 対象アプリの一覧画面を開く
- スクリプトを実行(またはexe化してバッチから起動)
- 「3秒後に対象ウィンドウを前面に表示してください」と出たら放置
- 上から順にクリックが始まり、全行チェック完了
ログは以下に出力される:
C:\checkbox_auto_click\checkbox_click.log
📘 実行ログ例
[2025-10-08 16:45:33] === チェックボックス自動クリック(5行補正)開始 ===
[2025-10-08 16:45:36] クリック: 行0 (x=553, y=102)
[2025-10-08 16:45:36] クリック: 行1 (x=553, y=122)
[2025-10-08 16:45:37] クリック: 行2 (x=553, y=143)
...
[2025-10-08 16:45:42] ✅ 全クリック完了
[2025-10-08 16:45:42] === 終了 ===
🧩 5. exe化(オプション)
Pythonを入れていないサーバーでも動かしたかったので、
PyInstaller で exe 化。
pip install pyinstaller
pyinstaller --onefile checkbox_auto_click.py
出力された checkbox_auto_click.exe
を
C:\checkbox_auto_click\
に置くだけでOK。
💬 所感
- レガシーな業務アプリにはちょっとした便利機能がないことがある。
- ちょっとした補助ツールを自作するだけで、
手作業のストレスを大きく減らせる - RPAツールでなくとも、Pythonだけで十分対応可能
実際このスクリプトで、
約40クリック分の操作が 10秒未満 で完了。時間よりもストレスがかからないのが◎。
思った以上に安定して動作した。
✅ まとめ
項目 | 内容 |
---|---|
背景 | 古いデスクトップアプリに一括操作機能がない |
アプローチ | Python + PyAutoGUIでクリックを自動化 |
ポイント | 座標補間で誤差を吸収(5行単位) |
効果 | 約40行の手動クリックが数秒で完了 |
追加ツール | MPosで座標測定、PyInstallerでexe化 |
🚀 おわりに
Pythonは「システム連携」や「データ処理」だけでなく、
Windows操作のちょっとした自動化 にも使える。
Discussion