完璧な自動化のはずでした。1週間、誰も気づかなかった『保存先の間違い』
「よっしゃ、これで全部自動だ!」
深夜のオフィス、私はひとり小さくガッツポーズをしました。
今まで毎日手動でダウンロードし、集計し、サーバーの共有フォルダに保存していた面倒な業務。
それをPythonですべて自動化するスクリプトが、ついに完成したのです。
テスト実行は完璧。指定した時間に、指定したフォルダへ、正確にファイルが書き出される。
私は誇らしげに、そのスクリプトを社内の共有サーバー(本番環境)へとデプロイしました。
1週間、「自動化成功」という優越感の中で
それから1週間、私は自分の仕事を「自動化した」という優越感に浸っていました
それから1週間、私は自分の仕事を「自動化した」という優越感に浸っていました。
毎朝、スクリプトが正常に終了したという通知メールを確認し。「うん、今日も順調です」とコーヒーをすする日々。
しかし、その平和な日常は、部長の何気ない一言で粉々に打ち砕かれました。
「 担当者さん、今週の集計データ、共有フォルダに全然更新されてないけど……何かあった?」
部長の一言が、1週間の自信を粉砕した
一瞬、頭の中が真っ白になりました
一瞬、頭の中が真っ白になりました。
「え
? 毎朝、正常終了のログが出てますよ?」
慌ててサーバーを確認すると、そこには1週間前の古いデータだけが。寂しく取り残されていました。
プログラムは確かに「動いていた」。でも、生み出されたデータはどこにも存在しなかったのです。

原因は「絶対パス」。サーバーに自分のフォルダは存在しなかった
原因は、拍子抜けするほど「初歩的な凡ミス」でした。
コードの中身を恐る恐る確認して、私は自分の目を疑いま
した。
❌ 恥ずかしすぎる失敗コード
output_path = "C:\Users\username\Desktop\output\report.xlsx"
自分のPCでテストしていた時に書いた「絶対パス」を、そのまま残していたのです。
サーバー環境には当然、私の個人フォルダなんて存在しません。
VBAの頃から、「自分のPCでしか動かない」問題には何度も泣かされてきました。
でも、Pythonならもっとスマートに書けるはずだと思っていたのに。結局やっていることは初心者レベルのハードコード。
自分のPCという「井の中の蛙」状態のまま、広い世界(本番サーバー)にコードを放り出してしまった自分の未熟さが。ただただ恥ずかしくてたまりませんでした。

エラーを吐かずに沈黙するプログラム。OSの挙動に惑わされた『空白の1週間』
ここで疑問が浮かびました。
「なぜ、存在しないパスに書き込もうとしたのに、エラーが出なかったのか?」
実は、ライブラリとOSの組み合わせに問題がありました。「親切にも」存在しないフォルダへの書き込みを無視するか、仮想フォルダに書いてすぐ消えるか。そんな挙動が起きていたのです。
プログラムは「指定された場所に書こうと努力した(そしてOSがそれを受け流した)」ため。Python側からは『正常終了』として処理されていました。
これが、メッセージボックスで止まるVBAよりもたちが悪い「沈黙の失敗」です。
エラーが出てくれれば、初日に気づけた。
でも、エラーが出ずに「成功しました」という顔をしながら。実は裏でデータを虚空に捨て続けていた。
この1週間、私が「自動化に成功した」と悦に浸っていた時間は。単にゴミを量産し、それを捨て続けていただけの無意味な時間だったのです。
自動化の最大の敵は、エラーではなく「成功を装った失敗」なのだと。この時ほど痛感したことはありません。

文字列結合よ、さらば。pathlibモジュールとの出会い
この大失態の後、私は「二度と絶対パスは使わない」と心に誓いました。
そして、ベテランエンジニアの同僚から教えてもらったのが。Pythonの `pathlib` という最強の武器です。
今まで私は、パスをただの「文字列」として扱っていました。
`”C:\” + “Users” + “\…”` のようにプラス記号で繋げたり。バックスラッシュの数に悩んだり。
さらに、Windowsでは `\` なのに。サーバーやMacでは `/` だったりと、OSによる違いにも頭を抱えていました。
💡 ここで一度立ち止まって考えてみてください
PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」が選択肢です。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。
でも、Pathlibを使えば
パスは単なる文字列ではなく「オブジェクト」としてスマートに扱えるようになります。
例えば、`/` 記号を使って直感的にパスを結合でき、実行環境がWindowsだろうがLinuxだろうが。Pathlibが裏側でそのOSに最適な形に自動で変換してくれるのです。
from pathlib import Path
✅ 環境に依存しない「現在地」を基準にしたパス作成
# __file__ は実行中のスクリプト自身を指すため、どこで動かしても正確
base_dir = Path(__file__).parent
output_path = base_dir / "output" / "report.xlsx"
これなら、自分のPCで動かそうが、本番サーバーで動かそうが
Macで動かそうが、常に「プログラムが置いてある場所」を基準に正しく保存先を見つけてくれます。
「 /(スラッシュ)」と「 \(バックスラッシュ)」の違いに怯える夜も、もうありません。
Pathlibは、私を「文字列操作」という泥沼から救い出し。「構造的な設計」という新しい視点を与えてくれたのです。
一度この快適さを知ってしまうと。もう二度と古い `os.path.join` には戻れない……それほどの衝撃でした。

設定ファイルに「コードの外」を追い出して、チームで使えるスクリプトにした
さらに一歩進んで、保存先や設定情報を「コードの外」に追い出すことも覚えました。
スクリプトの中に直接パスを書くのではなく。`config.json` などの設定ファイルに切り分けるのです。
「コードはロジックだけ。データは設定ファイルに」
この原則を守るだけで、コードの汎用性は劇的に高まります。
本番環境に移すときは、設定ファイルの中身を一行書き換えるだけ。コード本体を触る必要はありません。
これは、VBAでシートに設定値を書き込んでいた感覚に近いかもしれませんが。より安全で、より管理しやすい「プロの作法」に一歩近づけた気がしました。
この「設定の外部化」を覚えてから、スクリプトが変わりました。単なる「自分用のツール」から、チームの誰もがどのPCでも使える「システム」へと進化したのです。
あの恥ずかしい失敗があったからこそ。私は「動くコード」の先にある「壊れない設計」の重要性に気づくことができたのでしょう。

結論:「どこで動かすか」を意識したとき、本当のプログラミングが始まった
初心者の頃は、どうしても「どう書くか(文法)」ばかりに目が向きがちです。
でも、本当の自動化の壁は、「どこで動かすか(環境)」にこそ存在します。
絶対パスという、自分だけの「心地よい檻」から抜け出すこと。
それは、自分以外の誰かや。自分以外のPCという「他者」を想像するプロセスでもあります。
Pathlibで実現する、未来の自分に優しいパス管理
Pathlibを教えてもらった私は、早速自分のスクリプトを書き換えました。
from pathlib import Path
# __file__ は実行中のスクリプト自身を指すため、どこで動かしても正確
# .parent をつけることで、スクリプトがあるディレクトリを基準にできます。
base_dir = Path(__file__).parent
# 出力フォルダを作成(存在しなければ)
output_dir = base_dir / "output"
output_dir.mkdir(exist_ok=True)
# レポートファイルのパスを作成
output_file = output_dir / "report.xlsx"
# この output_file を使ってファイルを書き込みます
# 例: df.to_excel(output_file, index=False)
このたった数行の変更が、私のプログラミングに対する考え方を大きく変えました。
Path(__file__).parentが変えた「基準点」の考え方
`Path(__file__).parent` が何をしているかというと、「このスクリプトファイル自身がどこに置かれているか」を自動で読み取って、そこを基準にパスを作ってくれるんです。デスクトップに置こうが共有サーバーの深いフォルダに置こうが、常に「スクリプトのある場所」を起点にしてくれます。だから自分のPCのCドライブのパスをベタ書きする必要がなくなるんです。初めてこの仕組みを理解したとき、「これがやりたかったことだ」と思いました。
しかもPathlibだと、パスの結合を `base_dir / “output”` みたいにスラッシュで書けるんです。これまで `\` と `/` の違いでハマっていたのが嘘みたいに、OSを気にせずパスをつなげられます。「Windowsでしか動かせないコード」から、ようやく抜け出せた感じがしました。
mkdirのexist_ok=Trueが「沈黙の失敗」を未然に防ぐ
そして、`output_dir.mkdir(exist_ok=True)` の一行も重要です。「フォルダがなければ作る、あれば何もしない」という命令です。シンプルですが強力でした。あの失敗のとき、もしこれがあれば「沈黙の失敗」は防げていたのです。
フォルダが存在しない場合は、プログラムが自動でフォルダを作ってくれるので、安心してデータを保存できるようになったのです。エラーで止まるのではなく、実行環境を整えてくれる、まさに「痒い所に手が届く」機能だと感じました。
Pathlibを導入してから、スクリプトはどんな環境でも意図した場所に保存できるようになりました。あの1週間の「空白」は、もう二度と繰り返さないと心に誓いました。Pathlibはパスを「賢いオブジェクト」として扱います。初心者の私でも、堅牢で汎用性の高いコードが書けるようになりました。
失敗は成功の母。でも、その前に「仕組み」で防ぐ
今回の「保存先の間違い」は、自分のプログラミングに対する考え方を根本から変えてくれました。それまでは「とにかく動けばいい」という感覚でしかコードを書いていませんでしたが、「どんな環境でも、誰が使っても、安全に動くかどうか」という視点がようやく生まれたのです。
Pathlibのような標準ライブラリは、まさに「先人たちの知恵の結晶」だと感じました。私が経験したミスは、多くの人が通ってきた道でもあります。それを解決するベストプラクティスが、Pythonにはきちんと用意されていたのです。力技で文字列結合していた過去の自分を、今では少し恥ずかしく思います。
事務職がPythonで成長し続けるために
事務職として、Pythonで自動化を進める中で、何度も壁にぶつかってきました。VBAからPythonへの移行も、環境構築の壁も、今回のパスの問題も、一つひとつが大きな課題でした。でも、そのたびに調べて試して失敗して。そのサイクルで、少しずつ着実にスキルが上がっていくのを感じています。
失敗のたびに調べて試すサイクルが、少しずつスキルになっていく
今回の経験から学んだのは、「エラーが出ないから大丈夫」という思い込みの危険さです。自動化されたシステムは、人が常に監視しているわけではありません。だから、プログラム自身が異常を検知することが大切です。Pathlibのように「未然に防ぐ仕組み」を組み込む。その重要性を痛感しました。
これからも、泥臭い失敗談を赤裸々に語り続けていきたいと思っています。プログラミングの「プ」の字も知らなかった事務職として、同じ境遇の方が「自分でもできるかも」と思える発信を続けていきます。完璧なエンジニアにはなれません。でも、業務を少しでも楽に、そして安全にする知恵は、これからも追い求めていきたいです。
今回の失敗は、そのための大きな一歩になったと、今は前向きに捉えています。
もし、あなたのコードにまです `C:\Users\自分の名前\` が残っているなら
今すぐそれを消して、`Pathlib` に書き換えてみてください。
その瞬間に、あなたのプログラムは、あなたのPCを飛び出して。世界中のどこでも動ける「自由」を手に入れることができるのです。
恥をかくのは一度でいい。でも、その教訓は一生モノのスキルになります。
さあ、あなたのコードを「どこでも動く本物」へと変えていきましょう。
❌ 恥ずかしすぎる失敗コード
output_path = "C:\Users\username\Desktop\output\report.xlsx"
無料プレゼント
Excel業務を自動化する前に確認するチェックリスト(PDF)
自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。
無料でチェックリストを受け取る¥980 ミニキット
コピペで動かせる3スクリプト+自動化チェックリスト
最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。
ミニキットを見る(¥980)関連リンクとチェックリスト
📖 著者はこうして解決の糸口を見つけた
著者も同じ境遇から始まりました。独学でここまで自動化した道のりを参考にどうぞ。
関連書籍
Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合
Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。
学習サービスとアンケート
VBA・Pythonをもっと本格的に学ぶなら
VBAやPythonを実務レベルまで引き上げたい方には「侍エンジニア」がおすすめです。マンツーマン指導・オーダーメイドカリキュラムで、文系出身でも挫折しにくい環境が整っています。無料カウンセリングだけでも学習ロードマップが明確になります。
[アンケート] この記事は役に立ちましたか?
1問だけ回答する
