「APIがない?」VB.net製の社内システムをPythonで無理やり動かしてみた日

老朽システムと手作業入力の無間地獄

社内のシステム事情につきましては、どちらの企業様でも似たような悩みを抱えていらっしゃるのではないでしょうか。私の会社も例外ではございません。導入から十数年が経過した顧客管理システムがあります。グレーの背景色に角張った3Dベベルのボタンが無骨に並んでいました。いかにも2000年代のVB.netで組まれたような代物です。この化石のようなデスクトップアプリに対して、私の日々の業務は、別システムから吐き出された情報をひたすら手で入力し直す作業でございました。毎日、何百回と繰り返されるキーボードの打鍵音だけが、虚しくオフィスに響き渡っていました。

RPA導入は「予算オーバー」と言われてに関する解説図(日本語UI)

なぜこれほど非効率な作業が必要だったのでしょうか。外部からデータを流し込むためのAPIが全く存在していなかったからです。システム間の連携という現代のビジネスでは当たり前の仕組みが、この環境では完全に遮断されていました。

手入力の苦悩とシステム改修の壁

CSVデータを一括でインポートする機能すら、残念ながら実装されておりませんでした。つまり、どんなに優れた外部ツールを後から導入いたしましても、人間が画面に直接触れて操作しなければ、データを1レコードも入れられない仕組みでした。毎日数百件の顧客情報を転記する作業に追われました。酷使した指先は常に痛みを感じました。夕方には目が激しく霞んでしまうことも少なくありませんでした。情シス部門の担当者に対しても、「なんとかAPIやCSVインポート機能を追加していただけないでしょうか」と何度も頭を下げて頼み込みました。

しかし、「開発したベンダーがすでに倒産しているため、ソースコードには絶対に触れられない」と、わずか1分で却下されてしまいました。その瞬間、目の前がスッと暗くなりました。自席に戻ってまた数百件のコピー&ペーストを再開したときの、あのズシリと重い胃の感覚は、今でも昨日のことのように忘れられません。APIがないなら、プログラムからのシームレスな連携は諦めるしかないのでしょうか。多くの非エンジニアがここで絶望するはずです。そして、人力という名のマンパワーでレガシーシステムの穴を埋めようとなさるでしょう。

RPA導入提案、予算却下

まず、手作業の限界を悟った私は、画面操作を自動化するソリューションに目を向けました。世の中ではRPAがもてはやされています。ロボットに画面操作の動きを記憶させれば、APIのない古いシステムでも人間とまったく同じように操作できるのではないかと考えました。これこそが、私が辿り着いた最初の希望の光でした。

VB.netの顧客情報入力フォーム画面

提案却下、次なる一手

さっそく有名どころのツールを調べ始めました。WinActorやUiPathなど、国産から海外産まであらゆる情報を収集いたしました。そして、導入メリットを詳細にまとめた提案書を作成いたしました。上司のデスクに持っていき、これで部署全体の業務時間がどれだけ削減できるかを一生懸命説明しました。しかし、返ってきた言葉は非常に冷酷なものでした。「年間ライセンス料が高すぎます。完全に予算オーバーです」

実測値として、WinActorの年間ライセンス料の概算は約100万円です。確かに、企業の経費としてすぐに決裁を下せる金額ではないのかもしれません。ですが、私が毎月費やしている残業代や、ヒューマンエラーによるデータ修正の事後対応コストを総合的に考えれば、決して無駄な投資ではないはずです。それでも会社という組織は、目に見える大きな出費を極端に嫌う傾向があるようです。

提案却下、次なる一手(続き)

「お前が手で打った方が安い」と直接言われたわけではございません。しかし、上司の冷たい視線からそのメッセージを強烈に読み取ってしまいました。何日もかけて作った渾身の提案書は、無惨にも引き出しの奥へと追いやられてしまいました。会社が予算を出さないなら、自力でどうにかするしかありません。怒りと悔しさが入り混じった感情が、私をまったく別の解決策へと向かわせました。

💡 ここで一度立ち止まって考えてみてください。PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」という選択肢がございます。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。ITエンジニア転職・EBAエデュケーション →

RPA却下、Python学習の始まりと小さな感動

次に、会社にRPA導入を却下され、絶望しかけた私を救ったのは、怒りと悔しさから生まれた「自力で何とかするしかない」という強い決意でした。手元の資料を片っ端から漁りました。ネットの海を彷徨い、あらゆるキーワードで情報を検索し続けました。RPAのように高価なツールが使えないなら、他にどんな方法があるのでしょうか。

RPA導入提案書と予算見送りの資料

まず頭に浮かんだのは、プログラミングという選択肢でした。しかし、私はエンジニアではありません。HTMLを少しいじった経験がある程度で、本格的なコードを書いたことなど一度もありませんでした。プログラミングと聞けば、画面に黒い文字が羅列され、理解不能な記号が並ぶというイメージです。まるで異世界の言語のように感じられました。本当に自分にできるのかという不安が常に先行していました。しかし、もはや背に腹は代えられない状況でした。

この地獄のような手作業から解放されるためなら、なんでもやるという強い覚悟が私を突き動かしました。

Python学習の幕開けとエラーの洗礼

「自動化 プログラミング」「業務効率化 言語」「Excel マクロ以外」といった検索ワードで調べると、頻繁に登場する特定の名前がありました。それがPythonです。Pythonは、初心者にも比較的学習しやすい言語として広く知られています。文法がシンプルでコードの記述量が少ないため、非エンジニアでもとっつきやすいと言われているようです。

さらに、Pythonそのものが無料で使えるオープンソースである上に、インターネット上には学習リソースが驚くほど豊富に存在します。有料のRPAツールとは違い、初期費用が一切かからない点は、当時の私にとって唯一の希望の光でした。

VBA・Pythonをもっと本格的に学ぶなら

VBAやPythonを実務レベルまで引き上げたい方には「侍エンジニア」がおすすめです。マンツーマン指導・オーダーメイドカリキュラムで、文系出身でも挫折しにくい環境が整っています。無料カウンセリングだけでも学習ロードマップが明確になります。

侍エンジニア 無料カウンセリングを予約する →

Python学習の始まり、エラーとの格闘

しかし、実際にPythonを始めようとすると、また別の壁にぶつかりました。どの学習サイトがいいのか、どんな本を読めばいいのか、そもそも何から手をつければいいのかもわかりません。ネットの情報はあまりに膨大すぎて、かえって混乱を招くことも多かったです。結局、まずは評判の良いオンライン学習サイトの無料コンテンツと、書店で見つけた「いちばんやさしいPython入門」といったタイトルの薄い書籍から始めることにいたしました。

プログラミング第一歩とエラーの洗礼

退勤後や週末の限られた時間を見つけては、PCに向かいました。「print(‘Hello, world!’)」というたった一行のコードを実行しました。画面に「Hello, world!」と表示されただけでも、なぜか大きな感動を覚えたことを今でもはっきりと記憶しています。これがプログラミングの第一歩でした。しかし、次の瞬間から壁が立ちはだかりました。変数、関数、条件分岐、繰り返し処理。聞き慣れない専門用語が次々と登場し、頭の中はすぐにパンク状態になりました。コードを少し書けばすぐにエラーが発生し、何が間違っているのかもわからず途方に暮れる日が続きました。

エラーメッセージをそのままコピーしてGoogle検索にかけるのが日課になりました。なぜこんなにもエラーが出るのでしょうか。なぜ自分の書いたコードは動かないのでしょうか、と苛立ちながらも、少しずつ調べては修正しました。またエラーが発生し、そして検索の繰り返しでした……。

この地道な作業こそが、プログラミング学習の第一歩なのだと後になってから知りました。この時点で「本当にこの学習があのVB.netアプリの自動化に繋がるのだろうか」という疑念も常に心の片隅にございました。しかし、もう後戻りはできませんでした。

pyautoguiによる画面操作自動化と座標の課題

Pythonの基本をある程度理解し始めると、いよいよ具体的な「業務自動化」への道筋を考え始めました。目的は明確です。APIもCSVインポート機能もないVB.net製のデスクトップアプリを、人間が画面に触るのと同じように操作することでした。しかし、どうすればPythonでPCの画面を操作できるのでしょうか。

社内システムの壁:APIもCSV出力もないVB.netアプリに関する解説図(日本語UI)

ネット検索を続けていると、「pyautogui」というライブラリの存在を知りました。これはPythonでマウスの移動やクリック、キーボード入力といったGUI操作を自動化するためのライブラリだそうです。まさに私が求めていた機能であり、希望が確信に変わった瞬間でした。これがあれば、あの無機質な作業から解放される未来が見えました。

pyautogui自動化、立ちはだかる二つの壁

pyautoguiは、まさに目からウロコでした。マウスカーソルの操作やキーボード入力だけでなく、画像認識機能まで備えていたからです。さっそく、VB.netアプリの画面操作を自動化するための試行錯誤を始めました。まず最初にぶつかった壁は「座標の特定」です。ボタンや入力フィールドの位置を、X軸とY軸の絶対座標で指定する必要がありました。pyautoguiには、現在のマウスカーソルの座標を取得する`pyautogui.position()`という便利な関数があります。

この関数を使って、VB.netアプリのボタンや入力欄にマウスを合わせては、その座標を地道にメモしていく作業を、何度も何度も繰り返しました。

自動化の道のり:課題と模索

しかし、この座標指定には大きな問題がありました。デスクトップアプリは、ウィンドウのサイズが変わったり画面解像度が異なったりすると、UI要素の表示位置も変動してしまうからです。OSがウィンドウの描画を管理する際、アプリケーションが指定した相対的な位置情報を、現在のウィンドウサイズに合わせて変換して表示するためです。結果として、苦労して特定した座標も、別の環境では使い物にならなくなることが頻繁に起きました。安定した稼働を目指す上で、この不安定さは大きな障壁となって立ちはだかりました。

pyautogui画像認識と入力の試行錯誤

そこで次に試したのは、画像認識機能でした。これは、自動化したいボタンの画像を事前にキャプチャしておき、プログラム実行時に画面全体からその画像と一致する場所を探し出す方法です。`pyautogui.locateOnScreen()`という関数を使えば、座標に依存しない、より頑健な自動化が期待できました。これは、従来の座標指定方式よりも遥かに柔軟で、素晴らしい手法だと感じました。

しかし、ここにも新たな課題がありました。VB.netアプリのボタンの色やフォントがわずかに変わるだけで、認識されなくなることがありました。また、別のウィンドウと誤認識するリスクも潜んでいました。そのため、精度の調整には細心の注意が必要でした。

自動入力と早打ち問題の解決

入力作業には、`pyautogui.write()`や`pyautogui.press()`といった関数が活躍いたしました。これで、データの入力、Tabキーでの移動、Enterキーでの確定といった一連の操作を、人間さながらに再現できるようになりました。キーボードを打つ必要がなくなりました。そして、自分の手が解放される瞬間、これまでの苦労が報われるような達成感を味わうことができました。

早打ち問題解決、自動入力の喜び

しかし、ここでも「早打ち問題」という壁に直面いたしました。プログラムからの入力が速すぎると、アプリ側が処理しきれず取りこぼしが発生してしまいます。この問題は、各操作の間に`time.sleep()`という関数を使って、わずかな待機時間を設けることで解決できました。度重なる試行錯誤の末、たった1レコード分の顧客情報を自動入力できたとき、夜中に一人、PCの前で小さくガッツポーズをしたことを今でも忘れません。しかし、これは数百件のレコードを処理する道のりの、ほんの始まりに過ぎませんでした。更なる効率化を目指し、私は今もなお改良を続けています。

関連リンクとチェックリスト

無料プレゼント

Excel業務を自動化する前に確認するチェックリスト(PDF)

自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。

無料でチェックリストを受け取る

¥980 ミニキット

コピペで動かせる3スクリプト+自動化チェックリスト

最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。

ミニキットを見る(¥980)

関連書籍

Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合

Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。

Python業務自動化関連書籍をAmazonで探す

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

[アンケート] この記事は役に立ちましたか?

30秒で答えられます。改善の参考にします。

1問だけ回答する