【後編】誰も頼んでいない孤独な開発。VB.netで作った「車両費表示ツール」が現場でボロクソに言われた理由

総務の業務改善アプリ、救世主が怪物に

誰もいない夜のオフィスです。空調の低い稼働音だけが、静かに響いていました。時計の針は、すでに夜の22時を指しています。通常業務は、とうの昔に終わっていました。上司に頼まれた仕事ではありません。現場から強い要望があったわけでもないのです。ただ、毎月の車両費用の計算処理が、あまりにも煩雑でした。現場の方々が疲弊する姿を見るのは、忍びなかったのです。

まず、Excelのシートを、何枚も開く作業が続きます。VLOOKUP関数を幾重にも繋ぎ合わせます。無理やり数値を引っ張ってくる作業でした。少しでも数式が壊れれば、大変なことになります。途端に「#N/A」の文字が、画面を埋め尽くします。そうなると、作業は完全にストップしてしまいました。そんな脆弱な運用から、何としても脱却したいと考えました。

次に、当時、一介の総務担当者であった私は、決意しました。そしてプログラミングの世界に、一歩を踏み出したのです。選んだ言語はVB.netでした。Visual Studioの無償版を、パソコンにインストールしました。ネットにある断片的な知識だけが頼りです。手探りの状態で、少しずつ画面を作り始めました。当時の私は、ただ現場を楽にしたい一心でした。

さらに、素人が組んだVBAマクロでは、限界があると思い込みました。「ちゃんとしたアプリ」を作れば、解決すると信じたのです。全てが綺麗に片付くと、疑いもしませんでした。業務時間外に、たった一人で開発を続けました。休日のカフェでも、分厚い技術書を開く日々です。しかし、現実はそれほど甘くはありませんでした。

Access MDB導入とDB接続の苦難

まず、開発において避けて通れない壁がありました。それがデータベースの導入です。「本格的なアプリ」を作るには、不可欠な要素でした。Excelファイルを、データ源にする手法もありました。しかし、複数人で同時に開くと、問題が起きます。すぐに読み取り専用のロックが、かかってしまうのです。そこで、社内の共有フォルダにあるAccess(MDB)に目をつけました。

そして、これが、大きな過ちの始まりだったのです。VB.netから、MDBファイルにアクセスしなければなりません。そのためには、OLEDBという規格を、経由する必要があります。Excelのセルを直接参照するような、のどかな世界ではありません。いきなり専門的な概念の海に、放り込まれたのでした。「プロバイダ」や「接続文字列」といった言葉に、惑わされました。

DB接続の恐怖とMDBの選択ミス

コードエディタに向かい、「ConnectionString」と打ち込みます。それだけで、手にじわりと汗が滲みました。ネットで拾った接続文字列のサンプルを使います。しかし、コピペしてもピクリとも動きません。カンマが一つ抜けていたり、パスを間違えたりします。バージョンの違いによる、ドライバの不適合もありました。

また、非エンジニアにとって、接続設定はブラックボックスです。一文字でも間違えれば、冷酷なエラーが返ってきます。画面が真っ赤に染まるたび、絶望を感じました。なぜ繋がらないのか、原因を特定する術もありませんでした。共有フォルダのAccess(MDB)を選んだのは、失敗でした。技術的なハードルを、自ら上げてしまったのです。

一方で、これは、後の致命的な速度問題の原因にもなりました。ネットワーク越しに、ファイル型DBへ繋ぐ仕組みです。その仕組み自体の脆弱さを、理解できていませんでした。当時の私は、あまりにも無知だったのです。

全件読み込みが招く応答なし

幾度もの挫折を乗り越え、ようやく接続に成功しました。テスト環境には、10件のダミーデータを用意しました。検索ボタンを押すと、瞬時にデータが表示されます。「これはいける」と、私は確信しました。そこで、実際の車両マスタデータを流し込んだのです。データ数は、数万件に及びました。そして、自信満々で検索ボタンをクリックしたのです。その瞬間、事態は急転しました。

しかし、画面がぴたりと固まりました。マウスポインタが、砂時計に変わります。ウィンドウ全体が白く薄暗く、ぼやけていきました。タイトルバーには、「(応答なし)」の文字が浮かびます。私の設計は、あまりにも未熟でした。検索処理が非常に重く、表示に時間がかかりすぎます。実用性など、微塵もありませんでした。原因は、恐ろしいほどの力技コードにありました。

ところが、私は「インデックス」という概念を知りませんでした。SQL側でデータを絞り込むことも、していなかったのです。「全データを一旦メモリに読み込む」という暴挙でした。そして、ループ処理で1件ずつ確認していたのです。

非エンジニアを打ち砕くデータ処理の遅延

これは、非エンジニアが陥りやすい罠だと思います。10件なら一瞬で終わる処理も、数万件では違います。計算量は、爆発的に膨れ上がってしまうのです。さらに、ネットワーク越しの共有フォルダが相手です。数万件を毎回フルフェッチすれば、帯域を食いつぶします。待てど暮らせど、結果は返ってきませんでした。検索ボタンを押した後の、長い沈黙が続きます。それは、私の浅はかな自信を打ち砕くのに十分でした。自分の無力さを、痛感するしかありませんでした。

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

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

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

激重閲覧ビューアと素人設計のツケ

重い検索処理に、進捗バーを実装して誤魔化しました。なんとか現場へのリリースに、漕ぎ着けたのです。しかし、さらに致命的な欠陥が露呈しました。ある日、現場の担当者から声をかけられました。「車両のリース料金が変わりました。どこで直すのですか?」とそのように言われました。私の頭は、真っ白になりました。当初、データの参照機能しか考えていなかったのです。

そのため、追加や更新の実装が必要だと、その時気づきました。大幅な手戻りが発生し、呆然としました。入力ツールとしての要件を、満たしていませんでした。SQLのSELECT文を書くことで、精一杯だったのです。UPDATEやINSERTという概念が、抜けていました。画面には、立派なデータ一覧が表示されています。しかし、数字を一つ書き換えることすらできません。

実は、苦し紛れに、こう答えるしかありませんでした。「共有フォルダのAccessを、直接開いて修正してください」。相手の呆れ返った顔は、今も忘れられません。システムと呼べる代物では、ありませんでした。ただの激重な閲覧ソフトに、成り下がっていたのです。

設計不備が招くシステムの破綻

データの整合性を保つには、正しい仕組みが必要です。テーブルの正規化や、主キーの概念が不可欠でした。見た目だけを整えても、意味がありません。裏側の設計が破綻していれば、機能しないのです。素人設計のツケを払う時が来ました。その代償は、あまりにも大きすぎたのです。現場の信頼を損ない、自分自身も疲弊していきました。基礎を疎かにした結果が、これでした。

現場の不満と孤独な開発の終焉

遅すぎる検索処理に、現場は苛立っていました。データ更新も、手動で行うしかありません。さらに、排他ロックの問題もありました。誰かがAccessを開くと、ツールが起動しません。現場の不満は、ついに限界に達しました。電話が鳴るたびに、私はビクッとしました。受話器越しに、大きな溜息をつかれる毎日です。胃が重くなり、冷や汗が止まりませんでした。

そして、決定的な一言を投げかけられました。正直に言えば、前のVBAの方が早くて使いやすかったです。そのように言われ、私は完全に気力を失いました。良かれと思って、休日も返上したのです。コードと睨み合ってきましたが、独りよがりでした。誰の役にも立っていないと、痛感しました。使えないツールは、ただの障害物でしかありません。

それでも、技術力がないのに、複雑なことに挑みすぎました。そのことを、深く反省しています。現場は、高度なシステムなど求めていません。昨日と同じように、サクサク動けばよかったのです。必要な数字が手に入れば、それで満足でした。誰も頼んでいない孤独な開発は、幕を閉じました。私の無謀な挑戦は、終わったのです。

スパゲッティコードを前に頭を抱える日本語開発現場の画面

挫折が培ったAI時代の現場開発

あの苦い挫折から、数年が経ちました。埃を被ったVB.netのコードは、もう開きません。しかし、全ての時間が無駄ではありませんでした。データベースの構造や、設計の重要性を学びました。痛い目を見て学んだ概念は、私の中にあります。それは、確かな経験として残っています。今なら、生成AIをもっと活用できます。よりスマートに、ツールを作れるはずです。

じつのところ、あの失敗が、今のPython開発の基礎になりました。それは、紛れもない事実です。現在の私は、PythonとSQLiteを使っています。これらを組み合わせて、社内ツールを構築しています。テーブル設計やSQLの記述も、怖くありません。AIに要件を伝えれば、最適なコードが出ます。一瞬で回答が得られる時代になりました。

結果として、ConnectionStringのエラーで悩むことも、もうありません。

AI時代の現場力、挫折を越えた自動化

AIが優秀になっても、大切なことがあります。現場の要件を汲み取る力は、人間にしかありません。誰が、どう使うのかを考える力です。あの時、VBAの方がマシだと言われました。その経験があるからこそ、今は違います。徹底的に現場のヒアリングを行います。技術ありきで走ることは、もうありません。使う人の体験を、最優先に設計しています。

まず、孤独にコードを書いていた自分に、伝えたいです。「ツールを作る前に、現場と対話してください」と。そして、「AIという相棒に頼ってください」とも言いたいです。かつての無謀な挑戦と、大きな挫折がありました。だからこそ、今は手応えを感じています。自信を持って、業務自動化のコードを書いています。茨の道で負った傷は、私を前へ進ませてくれました。

次に、挫折は、成長のための大切なプロセスだったのです。

VS Codeと生成AIを並べた日本語開発ワークフロー画面

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

無料プレゼント

Excel業務を自動化する前に、確認するべき項目です。チェックリストをPDFで用意しました。

自動化に適した作業か、判断できます。VBAかPythonか、選択に迷いません。最初に避けるべき落とし穴をまとめました。実務のポイントを1枚で確認できます。メールアドレスだけで、受け取ることが可能です。

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

¥980 ミニキット

コピペで動かせる、3つのスクリプトです。自動化チェックリストも付属しています。

最新ファイルの自動選択が可能です。部署名の表記ゆれを、正規化できます。CSVの文字コード確認もセットです。今週の作業を楽にするための、最小キットになります。

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

関連書籍

Excel・VBA関連書籍を、手元で見返せる形にしておきたい場合

ExcelやVBAのトラブルは、基本の考え方をあとから見返せるだけでかなり楽になります。手元に1冊置いておくと、同じエラーで止まったときに確認しやすいです。

Excel・VBA関連書籍をAmazonで探す

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

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

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

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

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

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


1問だけ回答する