VBAの『メッセージボックス地獄』を卒業して、Pythonのログ出力に救われた話

「OK」を押すまで夜が明けない。誰もいない会議室で時を止めたMsgBoxの恐怖

深夜2時、ひっそりと静まり返ったオフィス。誰もいないフロアで、一台のPCだけが青白い光を放っている。タスクスケジューラによって自動起動されたExcelマクロ。それは順調に数万件のデータを処理し、集計表を作り上げている……はずだった。

翌朝、意気揚々と出社した私を待っていたのは、完了した集計ファイルではなく、画面中央に居座る小さなダイアログボックスだった。『実行時エラー 1004: ファイルが見つかりません』そしてその下には、冷酷な『OK』ボタン。

このボタンが押されるのを、プログラムは深夜からずっと待ち続けていたのだ。本来なら数分で終わるはずの処理が、たった一つのエラーメッセージによってせき止められ、何時間も立ち往生していた。「なんで止まってるんだよ……」崩れ落ちそうになる膝を必死で支えながら、私は昨晩の自分を呪った。

エラーが起きたら知らせてあげようという、あの愚かな『親切心』が、自動化という魔法をただの『時限爆弾』に変えていたことに、その時はまだ気づいていなかった。

深夜のオフィスで待機するエラーダイアログ

なぜバッチ処理でメッセージボックスを使ってはいけないのか?自動化を壊す『親切心』の罠

VBAを覚えたての頃、私はエラーが起きるたびにMsgBoxを表示させるコードを書いていました。「エラーを無視して進んじゃったら危ないから、ちゃんと止めて知らせなきゃ」そう思っていたのです。

でも、これが「自動化」においては最大のタブーでした。メッセージボックスは、人間がそこにいてボタンを押すことを前提とした仕組みです。サーバーや無人のPCで動かすバッチ処理にとって、メッセージボックスは「親切な通知」ではなく、処理を永遠に停止させる「死の宣告」に他なりません。

  1. デッドロックの発生:誰もいない場所でプログラムが停止し、次のスケジュール処理すら阻害する。
  2. 原因特定が不可能:朝起きて画面を見ても、「何が起きたか」はわかるが「なぜ起きたか」「何件目で起きたか」というプロセスが全く見えない。
  3. 再現性の欠如:ダイアログを閉じてしまったら、その瞬間のメモリの状態や変数の値はすべて消え去り、二度と同じ状況を再現できなくなる。

「エラーが出たら止まる」のは正しい。でも「人間の介入を待って止まる」のは、自動化における敗北だと気づきました。深夜のオフィスでひとり虚しく『OK』ボタンを表示し続けるPC。それは、私たちが手に入れたはずの『自由な時間』を、再びPCの前に縛り付ける呪いのようなものでした。

私はこのMsgBox地獄から抜け出すために、VBAという慣れ親しんだ環境から一歩踏み出し、Pythonという新しい武器を手に取ることを決意しました。「止める」のではなく「進み続ける」ための、本当の自動化を目指して。

VBAでのMsgBox使用に対する警告イメージ

朝イチの絶望が消えた。ログファイル一つで原因追跡が『推理』から『確認』に変わった日

Python移行後、初めてのエラーに遭遇した日のことは忘れられません。出社してPCを開くと、タスクは無事に(エラーを記録した上で)終了していました。恐る恐る log.txt を開くと、そこには犯人の名前がはっきりと記されていました。

『202X-XX-XX 02:15:03 ERROR: [商品マスタ未登録] 商品コード: A-999 (45行目)』

以前なら、「なんで止まったんだ?」と頭を抱え、コードを一から追いかけ、データを一件ずつ確認する「推理」に2時間は費やしていたでしょう。でも今は、ログを見るだけで原因が100%確定する。「あ、マスタに登録し忘れただけか」原因特定までわずか30秒。修正して再実行して、5分後にはすべてが完了していました。

この「精神的な余裕」こそが、ログ出力がもたらした最大の恩恵でした。「何が起きても、ログを見ればわかる」という安心感。それは、暗闇の中を手探りで歩く恐怖から、ライトを持って夜道を歩く安心感へと変わったようなものでした。

ログを確認して安堵する朝の風景

💡 ここで一度立ち止まって考えてみてください

PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」が選択肢です。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。

ITエンジニア転職・EBAエデュケーション →

結論:プログラムは沈黙してはいけない。ログという『対話』が属人化を終わらせる

自動化を進めれば進めるほど、私たちは「見えないエラー」への恐怖に直面します。MsgBoxで処理を止めてしまうのは、その恐怖から目を逸らしているだけかもしれません。

プログラムにログを語らせる

プログラムにログを語らせる。それは、自分にしか分からないブラックボックスを解体し、「誰でも状況を把握できる」透明なシステムに変える作業でもあります。ログがあれば、あなたが不在の時でも、後任の担当者はログを見て原因を特定し、対処できるかもしれません。

「何が起きているか分からない」という状態こそが、自動化における最大の恐怖です。沈黙するプログラムは、いつか必ずあなたを裏切ります。でも、ログという名の対話を続けていれば、プログラムはあなたの最高のパートナーになってくれるに違いありません。

自動化は「作って終わり」ではありません。運用が始まってからが、本当のスタートです。日々のログを眺め、エラーの兆候を察知し、より堅牢なシステムへと育てていく。そのプロセスの中にこそ、プログラミングという道具を使いこなす真の喜びが隠されているのだと、今では確信しています。

もし今、あなたの手元にあるプログラムが、いまだに「黙って止まる」仕様なら。まずは一行、ファイルに状況を書き出すコードを追加してみてください。その一行が、あなたを深夜の残業と、朝イチの絶望から救い出す第一歩になるはずです。沈黙を破り、ログという名の対話を始めましょう。ブラックボックスを破壊する戦いは、そこから始まるのです。

『止める』のをやめて『記録する』。Python移行で気づいた、真に安定するシステムの設計思想

Pythonを学び始めて最初に驚いたのは、「ログ(記録)」という概念の深さでした。VBAでは「画面にメッセージを出す」のが当たり前でしたが、Pythonの世界では「ファイルにログを吐き出す」のが標準。この考え方の転換が、私の自動化ライフを根本から変えてくれました。

「プログラムは止めるな。何が起きたかを雄弁に語らせろ」これがPython移行で学んだ最大の設計思想です。

エラーが起きたら、プログラムはそこで死んではいけません。「何時何分、どの処理の、どのデータで、どんなエラーが起きたか」をログファイルに刻み込み、可能であれば次の処理へと静かにバトンを渡す。そうすれば、人間は朝起きてそのファイルを開くだけで、夜の間に起きたドラマをすべて把握できるのです。

例えば、1000件の顧客データを処理している時に、500件目でエラーが起きたとしましょう。VBAのMsgBoxならそこで「完全停止」し、残りの500件は未処理のまま朝を迎えることになります。しかし、適切なログ設計がされたPythonなら、「500件目はエラーだったよ」とログに書き残し、501件目以降の処理を淡々と続行させることが可能なのです。

朝、ログを見て500件目だけをサッと手動で修正すれば

朝、ログを見て500件目だけをサッと手動で修正すれば、業務は完了。この「被害を最小限に抑え、事後報告を完璧にする」というアプローチこそが、プロの自動化なのだと痛感しました。

Pythonのログ設定コード画面

誰でも直せるログの作り方:Pythonのloggingモジュールを日本語で使い倒す工夫

Pythonには logging という標準ライブラリがありますが、最初は使い方が難しそうに見えて敬遠していました。でも、AI(Claude)に相談しながら、初心者でも使いやすい「日本語ログ出力テンプレート」を一緒に作り上げました。

工夫したのは、専門用語ではなく「日本語」で状況を出力することです。

logging.error(f"[データ取込失敗] {customer_name} 様の行でエラー: {e}")

このように書いておけば、エンジニアではない同僚であってもログを見れば「あ、田中さんのデータのところでエラーが出たんだな」とすぐに分かります。ログは自分のための備忘録ではなく、未来の自分やチームへの「手紙」なのです。

日本語による実行ログの出力サンプル

「とりあえずこれだけ」で十分!Pythonログ出力の超基本設定と実践例

前回の記事で、エラーが起きた時にログに書き出す例をご紹介しました。でも、実際にどうやってログをファイルに出力するのか、最初は私も全く分かりませんでした。

Pythonの logging モジュールを使う上で、まず最初に登場するのが logging.basicConfig という設定です。これは、ログをどこに出すか、どんな形式で出すか、どのレベルのメッセージを記録するか、という「ログの基本ルール」を決める、いわばおまじないのようなものなんですよ。これをプログラムの最初に一度だけ書いておけば、あとは logging.info()logging.error() を呼び出すだけで、設定した通りにログが書き出されるようになります。

例えば、filename=’my_program.…

例えば、filename='my_program.log' と書けば、プログラムと同じフォルダに my_program.log というファイルが作られ、そこにログが書き出されるようになります。そして、level=logging.INFO と指定すると、INFOレベル以上のメッセージ、つまりINFO、WARNING、ERRORといった重要な情報が記録されるようになるんです。もし、もっと詳細なデバッグ情報も欲しい場合は、level=logging.DEBUG に設定すれば、DEBUGレベルのメッセージも出力されるようになります。

さらに、ログメッセージの表示形式も細かく設定できます。format='%(asctime)s - %(levelname)s - %(message)s' のように書くと、ログが出た日時、メッセージの重要度(INFOやERRORなど)、そしてメッセージ本文が、きちんと並んで出力されるようになるんですよ。このフォーマットを工夫することで、後からログを見た時に、いつ何が起きたのかが一目瞭然になります。最初は難しく感じるかもしれませんが、一度設定してしまえば、あとは使い回せるので安心してくださいね。

特に私が「これだ!」と感動したのは

特に私が「これだ!」と感動したのは、処理の途中で発生した例外をキャッチし、その詳細をログに出力する仕組みでした。Pythonでは try-except ブロックを使うことで、エラーが発生してもプログラム全体が停止することなく、指定した処理(例えばログ出力)を実行し続けることができます。これにより、たとえエラーで特定のデータが処理できなかったとしても、他のデータは問題なく処理を継続し、最終的には「何ができて、何ができなかったか」をログで正確に把握できるようになりました。

VBAのMsgBoxでは、エラーが起きるとそこで思考停止してしまいましたが、Pythonのログ出力では、エラー発生箇所、エラーの種類、そしてその時点での変数の値まで、詳細な情報を記録できるのが本当に心強いです。まるで現場検証のプロが、あらゆる証拠を丁寧に採取してくれるような感覚でした。このおかげで、原因究明にかかる時間が劇的に短縮され、精神的な負担も大きく軽減されました。

ログレベルを使いこなす!本当に必要な情報だけを賢く残す技術

ログをただ出力するだけでなく、Pythonの logging モジュールには「ログレベル」という便利な機能があることを知りました。これは、出力するログの重要度に応じて分類する仕組みで、例えば DEBUG, INFO, WARNING, ERROR, CRITICAL といったレベルがあります。

開発中は、プログラムの内部動作を詳細に確認するために DEBUG レベルで出力し、本番稼働では、通常の状態を示す INFO や、問題発生時の ERROR のみを出力するといった使い分けができます。これにより、ログファイルが肥大化しすぎることなく、必要な情報だけを効率的に収集できるようになりました。最初はただ「全部出せばいい」と思っていましたが、これでは後から見返すときにノイズが多くて大変だとすぐに気づきました。

ログレベルを意識して使うようになってからは、トラブルシューティングの効率が格段に上がりました。普段は INFO レベルで処理の進捗を確認し、何か異常があったときにだけ ERRORCRITICAL のログに注目すれば良いので、大量のログの中から問題箇所を探し出す手間が省けました。まるで、重要なニュースだけをピックアップしてくれる優秀な秘書がいるような感覚で、本当に助かっています。

この経験を通じて

この経験を通じて、プログラミングはただコードを書くだけでなく、「どのように動かすか」「問題が起きたときにどう対処するか」までを設計する総合的なスキルだと改めて実感しました。MsgBox地獄からログの恩恵にあずかるまで、遠回りもしましたが、その分、自動化の奥深さと、Pythonの懐の広さを知ることができました。これからも、もっと賢く、もっと効率的な自動化を目指して、日々学びを深めていきたいと思っています。

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

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

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

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。現役エンジニアのサポートで、未経験から実践的なスキルを身につけられます。

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

¥980 ミニキット

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

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

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

無料プレゼント

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

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

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

📝 この記事は役に立ちましたか?

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

フォームに回答する(1問だけ)