flayd.jp
メニュー

オフショア開発の闇:掘れば掘るほど出てくる問題

オフショア開発の真実 公開: 2026.03.10
#オフショア開発 #セキュリティ #技術的負債 #品質管理

新規システム開発の後始末を引き受けたとき、まさかこれほどの問題が埋まっているとは思わなかった。掘れば掘るほど出てくる。そしてそのすべてが、同じ構造的な原因に根差していた。

npm installが吐き出した警告の山

納品されたシステムのフロントエンド環境を構築するため、npm installを実行した。大量の警告が表示された。

npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory.
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm warn deprecated eslint@8.57.0: This version is no longer supported.

新規開発だ。にもかかわらず、サポートが終了したライブラリやメモリリークを引き起こす既知の問題を抱えたモジュールが使われている。ESLint v8.xは2024年10月にEOLを迎え、すでにメンテナンスが終了している。「動けばいい」で作られた新品のシステムが、納品時点ですでに技術的負債を抱えていた。

管理者SEはこの警告を見ていない。彼らはシステムを自ら構築しない。開発チームが提供した完成品の機能テストのみを行い、「動作確認OK」と報告する。構築過程で表示される警告やエラーには一切触れない。

3環境で3バージョンのPostgreSQL

さらに掘ると、PostgreSQLのバージョン不一致が見つかった。

  • 開発環境: postgres:16.4-alpine
  • 本番定義: postgres:15.2-alpine
  • 実際の本番サーバー: PostgreSQL 14

3つの環境で3つの異なるバージョン。データベースログにはバージョン非互換のエラーが記録されていた。なぜこのようなバージョン管理をしているのか問い合わせたが、返ってきたのは「すいません」の一言だけだった。根本的な改善も説明もない。

HTTPS通信の虚偽説明

そして最も深刻な問題が見つかった。フロントエンドとバックエンド間の通信が暗号化されていない。docker-compose.ymlの設定もDockerfileのUWSGI設定も、単純なHTTP通信を前提としたものだった。リバースプロキシなどの保護層は完全に欠落していた。

開発会社を通じてベトナムの開発チームに何度も確認した。彼らの回答は「サーバーとはSSL接続で通信している」。しかし実際のコードや設定を調べると、HTTP通信であることは明白だった。

さらに「本番環境のデプロイ時にデータベースのコンテナが動かない」という問題に対し、開発会社から返ってきた回答は「local.ymlを使っているためだそうです」。本番環境が開発用の設定ファイルでデプロイされていたのだ。「HTTPSで通信している」という主張と明らかに矛盾していた。

最も深刻だったのは、「どうせ日本人は何もわからない」という前提でベトナムチームが虚偽の説明を行い、それを管理者SEが技術的理解不足から見抜けなかったという実態だ。さらに悲劇的なのは、管理者SE自身が自分がバカにされていることに気づいていなかった点だ。

性善説が生む脆弱性

日本人は「言わなくても最新版を使っているだろう」と考える。海外では「言われたことだけやればいい、バレなければOK」が普通だ。この認識のギャップ自体を日本側が把握していないことが、問題の発見を遅らせている。

経産省の試算によると、技術的負債による経済的損失は年間12兆円規模に達する。東証のシステム停止、KDDIやNTTの大規模通信障害など、すでに「ツケの支払い」は始まっている。

「プログラミングは単純作業」「技術は外注できる」という認識が、技術的な真偽を判断できる人材の不足を招いた。表面的な管理者を増やしてきた結果、虚偽の報告や杜撰な開発を見抜けない組織が出来上がった。この構造が変わらない限り、同じ問題は繰り返される。

この記事をシェアする