伝説の「触れてはいけない」サーバーと、僕らの死んだ時間
どうも!海外(僕はヨーロッパです)でC#とWPFをメインに、デスクトップアプリ開発をしているエンジニアです。
日本でバリバリやっていた皆さんが海外転職を考えるとき、何を期待しますか?
「最先端の技術スタック」「アジャイルな開発体制」「マイクロサービス」「クラウドネイティブ」…まあ、キラキラしたワードが並びますよね。僕もそうでした。
僕の専門はWPF。クライアントサイド、つまりユーザーが直接触る「ガワ」を作るのが仕事です。ぶっちゃけ、WPF自体がモダンかと言われると微妙なラインですが(笑)、それでもUI/UXの設計やパフォーマンスチューニングには自信がありました。「海外でも、このスキルでバリュー出しまくってやるぜ!」と息巻いて海を渡ったわけです。
配属されたチームは、まさにダイバーシティ。ドイツ人、インド人、スペイン人、そして僕。公用語はもちろん英語。雰囲気は最高。みんな優秀で、コードレビューも活発。ああ、これが俺の求めていた環境だ…と。
最初のスプリントは順調でした。任されたのは、既存のWPFアプリケーションのUI改修。XAMLをゴリゴリいじり、MVVMパターンに則ってViewModelを整理し、「どうだ、ジャパニーズ・エンジニアのコードは綺麗だろう!」とドヤ顔でプルリクを投げる日々。順風満帆でした。
地獄の門が、静かに開いたのは、入社して3ヶ月目のこと。
新しいフィーチャー(新機能)の要求が来ました。内容はシンプル。「既存の顧客管理画面に、新しい”サブスクリプション・ステータス”を追加してほしい」。
まあ、よくある話ですよね。DBのテーブルにカラムを一つ追加して、WPFの画面にチェックボックスか何かを足して、データをバインドする。日本の現場なら、まあ半日、いや1日あればテストまで終わるタスクです。
スプリント・プランニングで、僕は自信満々に「1ストーリーポイント(1日弱)でいけますね」と宣言しました。
その瞬間、チームのシニアエンジニアであるマーク(ドイツ人)が、何とも言えない、渋い顔をしたのを僕は見逃しませんでした。
「…なあ、Taro(僕の名前)。悪いんだが、そのタスク、俺と一緒にやらないか? 5ポイント(1週間)で見積もっておこう」
「え、5ポイント? マジすか? カラム追加だけですよね?」
マークは、まるで古い井戸の底を覗き込むような目で、僕にこう言ったんです。
「Taro、君はまだ『”Project Chimera”(プロジェクト・キマイラ)』に触れたことがないだろう?」
出ました。「秘伝のタレ」です。
どこの国、どこの会社にも必ず存在する、誰も全容を把握していない、謎のレガシーシステム。僕の会社では、それは「キマイラ」と呼ばれていました。
僕らのイケてるWPFアプリケーションがデータをやり取りする先。それは、ピカピカのREST APIでも、gRPCでもありませんでした。
それは、15年前に作られた、巨大なモノリス(一枚岩)のバックエンド・アプリケーション。それこそが「キマイラ」の正体でした。
技術スタタック? 聞いて驚かないでください。
VB.NET 1.1(!) で書かれ、Windows Server 2003(!)の上でIIS(インターネットインフォメーションサービス)としてかろうじて動いている、巨大なWebフォーム・アプリケーションでした。
僕らのWPFアプリは、その「キマイラ」が吐き出す、化石のようなSOAP XMLを必死にパースして画面に表示していただけだったのです。
「いやいや、カラム追加でしょ? DB(データベース)を直接いじれば…」
僕の甘い考えは、マークの次の言葉で粉々に砕け散りました。
「ダメだ。DBスキーマは誰も触れない。ビジネスロジックはすべて『キマイラ』の中の、さらに奥深くにあるストアドプロシージャ(DB内に書かれたプログラム)にハードコードされている。しかも、そのロジックを解析できた人間は、5年前に退職した」
終わった。
これが、海外で働くエンジニアが直面する「現実」です。
僕らは、その日から地獄のデバッグ作業を開始しました。まず、VB.NET 1.1を動かすための開発環境を構築するだけで2日かかりました。Visual Studio 2003なんて、もうダウンロードリンクすら見つからないんですから。
そして、やっとの思いで見つけた5000行を超えるストアドプロシージャ。それはまさに「キマイラ」(色々な動物が合成された神話の怪物)の名にふさわしく、スパゲッティのように絡み合ったSQLの山。
結局、僕らがやろうとしていた「カラムを一つ追加する」というシンプルな変更が、システム全体のどこに影響を及ぼすか(デグレ)を特定するだけで、見積もり通りの5日間を丸々消費しました。
これが、「レガシーバックエンドの隠れたコスト」です。
僕のWPFスキルは、何の役にも立ちませんでした。
僕の綺麗なXAMLも、洗練されたMVVMアーキテクチャも、この「キマイラ」の前では無力だったんです。
この時、僕は痛感しました。
海外でエンジニアとして生き残るために本当に必要なのは、キラキラしたフロントエンドの技術だけじゃない。この「負の遺産」とどう向き合い、どう戦っていくかという「サバイバル術」なんだと。
僕がこのタスクで失ったのは、5日間という時間だけではありません。
新しい技術を学ぶはずだった時間。もっと価値のある機能を作るはずだった時間。そして何より、「この会社で俺は成長できるのか?」という、とんでもない不安とストレス。これが、見えないコストの正体です。
あなたの職場にもいませんか? 「キマイラ」が。
このブログでは、僕がこの「キマイラ」=レガシーバックエンドとどう戦ってきたのか、そして、なぜ多くの会社が「わかっているけど捨てられない」のか、そのリアルな泥臭い話を共有していきたいと思います。
なぜ「ビッグバン移行」は99%失敗するのか? マネジメントを説得できないエンジニアの悲劇
あの「キマイラ」との死闘から数日後。スプリントのレトロスペクティブ(振り返り会)は荒れに荒れました。
僕「あんなのがバックエンドにいる限り、僕のWPFでの改修スピードなんて何の意味もない。見積もりすらできない!」
新人のエンジニア「てか、あれヤバすぎでしょ。全部捨てて、.NET 8でクリーンに書き直すべきですよ!コンテナ化して、Azureに載せましょう!」
出ました。
エンジニアなら誰もが一度は口にする、魔法の言葉。
「全部、書き直そうぜ(Full Rewrite)」
これこそが、IT業界に古くから伝わる神話、「ビッグバン移行」の正体です。
古いシステム(レガシー)をある日突然、ピカピカの新しいシステムに丸ごと入れ替える。まるで宇宙の始まり(ビッグバン)のように、一夜にしてすべてを刷新する計画。
聞こえは最高ですよね?
僕も、WPFからイケてるREST API(もちろんJSON)を叩きたい。SOAP XMLのパースなんて、もう金輪際やりたくない。
でもね、僕の隣に座っていたシニアエンジニアのマーク(あの5ポイント見積もりの彼です)は、またあの渋い顔で、静かに首を横に振るんです。
「Taro、その”ビッグバン”が、なぜ神話(Myth)と呼ばれるか知ってるか? それは、現実にはほぼ成功しないからだ」
なぜか?
僕がこの海外の現場と、日本の現場の両方で見てきた「失敗の本質」を、今から共有します。これは、技術書には載っていない、生々しい「カネと政治」の話です。
失敗の理由1:誰も「キマイラ」の本当の姿を知らない
「全部書き直す」ってことは、当然「今ある機能は100%担保する」ってことですよね?
じゃあ聞きますが、あの15年モノの「キマイラ」の全機能を、あなたは説明できますか?
あの5000行のストアドプロシージャが、顧客管理の裏で、ひっそりと経理システムのバッチ処理と連携していたとして。
年に一度しか動かない、謎の決算用ロジックがハードコードされていたとして。
ドキュメント? あるわけない。
作った人間? 5年前に辞めてる。
ビッグバン移行とは、「見取り図のない巨大な城」を、「一気に立て替える」ようなものです。
結果どうなるか?
「あれ、この柱、なんか大事な役目があったみたい…」と、新システムがリリースされた瞬間に、会社の中核機能が停止する。これがオチです。
失敗の理由2:ビジネスは待ってくれない
経営陣にこう提案したとしましょう。
「ボス、キマイラを刷新します。期間は2年。コストは10億。その間、全エンジニアはこの移行作業に集中します。なので、新機能は一切リリースできません」
100%、こう返ってきます。
「君は、クビだ(You’re fired.)」
ビジネスは生き物です。僕らが2年間せっせとリプレイス作業をしている間にも、競合は新しいサブスクプランを打ち出し、市場は変化します。
「2年間、機能追加ゼロで耐えろ」なんて、自殺行為でしかありません。
結局、移行チームが頑張っている横で、「キマイラ」を延命・改修する別のチームが動くことになる。そして、移行チームが新しいものを作っている間に、「キマイラ」にはさらに「秘伝のタレ」が追加され、移行チームの作業は永遠に終わらない。これ、地獄ですよね。
失敗の理由3(これが最重要):エンジニアは「金の話」が下手すぎる
これが、僕が海外に出て一番痛感した「人生術」です。
僕らエンジニアは、「技術的負債が〜」とか「メンテナンス性が〜」とか、技術的な正論を振りかざしがちです。
でも、CFO(最高財務責任者)やCEO(最高経営責任者)にとって、そんな言葉は1ミリも響きません。
彼らの言語は「カネ」です。ドルとユーロです。
僕らが「技術的負債を返済させてください!」と叫んでも、彼らの頭には「(よくわからんが)エンジニアが何かやりたいらしい。コスト(Cost)がかかる話だな」としか変換されない。
でも、「起」で話した僕のタスクを、彼らの言語に翻訳したらどうなるでしょう?
「ボス、あの”キマイラ”のせいで、たった1つのカラム追加(競合A社は1日で実装した機能)に、エンジニア2人が5日間も拘束されました。人件費にして、軽く100万円(1万ユーロ)の損失です」
「このままだと、今年予定している新機能(売上を20%上げる見込み)のリリースは、半年遅れます。競合B社に、推定3億円の市場を奪われることになりますが、よろしいですか?」
これが、「ビッグバン移行」を提案するエンジニアが決定的に欠けている視点です。
「10億かけて書き直しましょう!」
これは、最悪の提案です。なぜなら、リターン(売上)がゼロだから。
経営者からすれば、「10億ドブに捨てる」のと同じです。「今、かろうじて動いてるんだから、触るな」となるのは当然。
これが、僕らが「レガシーシステムはクソだ!」と叫びながらも、結局「キマイラ」を延命改修し続けるしかない構造的悲劇の正体です。
僕のWPFスキルは、その延命作業の「ガワ」を作るためだけに消費されていく。
じゃあ、どうするんだよ、と。
この地獄から抜け出す道はないのか? ビッグバンがダメなら、僕らはこの「キマイラ」と心中するしかないのか?
いや、道はあります。
それこそが、僕がこの海外の現場で学んだ、泥臭く、しかし確実な「レガシーの殺し方」です。
WPF屋がバックENDを「絞め殺す」。マイクロサービスという名の解体新書
「ビッグバン(一括移行)」がダメ。経営陣は「カネにならない投資」には絶対に首を縦に振らない。
これが「承」で突きつけられた現実でした。
僕のWPFアプリは、相変わらずあの15年モノの「キマイラ」が吐き出すSOAP XMLをパースし続けるしかないのか…と、チームの士気がダダ下がりになった、あのレトロスペクティブ(振り返り会)。
その重苦しい沈黙を破ったのも、またあのシニアエンジニア、マークでした。
「Taro。ビッグバンが『一気に解体して立て直す』計画なら、我々がやるべきことは逆だ」
「逆、ですか?」
「ああ。『徐々に絞め殺す(Strangling)』んだよ」
ジャングルのツタと「ストラングラー・パターン」
マークがホワイトボードに描いたのは、一本の巨大な古い木と、それに巻き付く新しい「ツタ」でした。
「これは、マーティン・ファウラー(※超有名なエンジニア)が提唱した『ストラングラー・パターン(絞め殺しパターン)』という戦略だ」
その戦略は、衝撃的なほどシンプルでした。
- 「キマイラ」(古い木)は、そのまま動かし続ける。(←え!?)
- 「キマイラ」が持つ機能のうち、最も変更が多く、最もビジネス価値の高い部分(例えば「顧客ステータス管理」)を特定する。
- その機能だけを、全く新しい別のサービス(新しいツタ) として、現代的な技術(.NET 8とか)で作り直す。
- 僕らのWPFアプリ(クライアント)からのリクエストを、ルーターやAPIゲートウェイと呼ばれる「交通整理役」を挟んで、新しい機能に関するものだけ、その「新しいツタ」に流すように切り替える。
- 古い「キマイラ」の中にある「顧客ステータス管理」機能は、もう誰も呼ばなくなる。つまり、その部分だけが「死ぬ」。
- これを、機能単位で一つ、また一つと繰り返していく。
新しいツタがどんどん古い木に巻き付き、養分を奪い、最終的に古い木が枯れて中身だけが朽ち果てるように。「キマイラ」を徐々に、しかし確実に「絞め殺していく」戦略です。
「マイクロサービス」は「目的」ではなく「武器」である
この「新しいツタ」こそが、今バズワードになっている「マイクロサービス」の実体です。
多くのエンジニアが勘違いしていますが、マイクロサービスは「目的」じゃありません。「マイクロサービスアーキテクチャにすること」自体には、1円の価値もない。
あれは、巨大なレガシーを安全に解体・殺処分するための、「絞め殺し」という戦略を実行するための、最も強力な「武器(戦術)」 なんです。
なぜなら、「機能ごとに小さく作る」から。
小さいから、開発は3ヶ月で終わる。
小さいから、もし失敗しても(デグレっても)、影響範囲は限定的。
小さいから、経営陣に提案する「コスト」も小さくて済む。
「ビッグバン」が「10億かけて2年待て」という博打だったのに対し、
「ストラングラー」は「1000万かけて3ヶ月で、まず一番儲かる部分だけ改善させてくれ」という、超現実的な提案になるわけです。
WPFエンジニアの「逆襲」
この戦略を聞いた瞬間、僕の頭に電気が走りました。
「承」で話した、あのCFO(最高財務責任者)の顔が浮かびました。
彼らの言語(カネ)で、もう一度提案できる、と。
僕はその日のうちに、プロダクトオーナーとマークを巻き込んで、CFOのところへ乗り込みました。
「承」の時とは、全く違うロジックを携えて。
僕「ボス、『キマイラ』の件です。全部書き直すのはやめましょう。無駄です」
CFO「(ほう?という顔)」
僕「『起』で僕が5日も浪費した、あの『顧客ステータス管理』機能。あそこが、今一番ビジネスのボトルネックになっています」
僕「データを見ました。過去1年間の機能改修リクエストのうち、40%がこの『顧客ステータス管理』周辺に集中しています。そして、その改修にかかったエンジニアリング・コストは、推定3000万円に達しています」
CFOの眉がピクリと動きました。「カネ」の話が始まったからです。
僕「提案があります。『キマイラ』全体ではなく、この『顧客ステータス管理』機能だけを、独立した新しいAPI(マイクロサービス)として切り出すプロジェクトを許可してください」
僕「必要なエンジニアは3人。期間は3ヶ月。コストは1000万円で済みます」
CFO「…リターンは?」
待ってました。
僕「第一に、先ほど申し上げた年間3000万円の『見えない改修コスト』が、ほぼゼロになります。これだけで、初年度に2000万円の黒字です」
僕「第二に、これが本命です。今、企画中の『新サブスクリプション・プランA, B, C』。あれを『キマイラ』で実装しようとしたら、僕の見積もりでは(あのストアドプロシージャのせいで)最低でも半年かかります。競合に負けます」
僕「しかし、この新しいAPIをベースにすれば、実装は1ヶ月で終わります。競合より3ヶ月早く市場にリリースできる。この先行者利益は、推定1億円の売上インパクトです」
「1000万円の投資で、1億2000万円のリターンを生む」
これが、エンジニアが語るべき「経営言語」です。
「技術的負債が〜」なんて泣き言は、一言もいりません。
結果?
言うまでもありません。プロジェクトは即承認されました。
ついに「キマイラ」の首に手をかけた日
僕らWPFエンジニアは、水を得た魚でした。
僕のチームは、バックエンドチームと共同で、ピカピカの.NET 8を使った「顧客管理マイクロサービス」を3ヶ月で爆速開発しました。
もちろん、インターフェースはモダンなREST API(JSON)です。
そして、運命の日。
僕が自分のWPFアプリケーションのコードを書き換えました。
あの忌まわしく、醜悪だったSOAP XMLのパースロジックを、全削除。
代わりに、新しく作ったAPIのエンドポイントを叩く、HttpClientの数行のコードに置き換える。
var customer = await _apiClient.GetCustomerAsync(id);
…動いた。
信じられないほど高速に、クリーンに、データが画面にバインドされる。
「キマイラ」はまだ動いています。顧客管理以外の、古びた機能を動かすために。
でも、僕のWPFアプリが依存していた、一番重要だった「顧客管理」という名の首は、僕らの手によって「絞め殺された」のです。
これが、僕らフロントエンドエンジニアによる「逆襲」の始まりでした。
僕らはもう、レガシーバックエンドのせいで「見積もりもできない」と嘆く被害者じゃない。
レガシーを殺す順序を決め、ビジネス価値を最大化する「実行者」になったのです。
レガシーの海を渡る君へ。技術的負債は「キャリアの金鉱」だ
【起】で、僕は絶望の淵にいました。
日本で培ったWPFのスキルを武器に海を渡ったはずが、待っていたのはVB.NET 1.1製の怪物「キマイラ」。たった1つのカラム追加に5日も浪費させられ、「俺のキャリア、ここで終わるかもな」と本気で思いました。
【承】では、エンジニアが陥りがちな「ビッグバン移行(全部書き直し)」という神話がいかに危険で、ビジネス(特にCFOやCEO)に「1ミリも響かない」か、その構造的悲劇を共有しました。技術的な正論だけでは、組織という巨大な船は1ミリも動かない。
【転】で、僕らは「絞め殺し(ストラングラー)」という現実的な武器と、「カネの話(経営言語)」を手に入れました。「10億かけて2年待て」というエンジニアの夢物語ではなく、「1000万の投資で1億2000万円のリターンを3ヶ月で出す」というビジネス提案によって、僕らフロントエンドエンジニアが主導権を握り、「キマイラ」の首(顧客管理機能)に手をかける逆襲劇が始まりました。
僕のWPFアプリが、忌まわしいSOAP XMLの呪縛から解き放たれ、ピカピカのREST API(JSON)を叩いた、あの日。
チームは歓喜に沸きました。
で、その後の話です。
あの日、僕が削除したWPFのコード(XMLパース処理)は、わずか数百行でした。
でも、僕がCFOの部屋で提示した、あの「1億2000万円」という数字。あれは、ただの「ハッタリ」ではありませんでした。
切り出した「顧客管理マイクロサービス」は、信じられないほど身軽でした。
「キマイラ」時代には半年かかると見積もられていた「新サブスクリプション・プランA, B, C」の機能。
僕らのチーム(WPFとバックエンドの混成チーム)は、それを本当に1ヶ月半でリリースし、競合他社を出し抜くことに成功したのです。
CFOはご機嫌でした。
そして、その年の僕の評価(パフォーマンス・レビュー)は、とんでもないことになりました。
マネージャーに言われた言葉が、今でも忘れられません。
「Taro、君が今年やったことを評価したい。君は『XAMLを綺麗に書いた』『MVVMを遵守した』。そんなことはどうでもいい(I don’t care about that.)」
「君は、会社が3000万円の無駄金を垂れ流すのを止め、1億円の新しい売上を生み出すプロジェクトを『主導』した。君の価値はそこにある」
そう。
僕の専門はWPFです。デスクトップアプリの「ガワ」を作るのが仕事です。
でも、僕が評価されたのは、WPFのスキルではなかった。
「レガシー(技術的負債)」という名の「巨大な損失」を、「莫大な利益(金鉱)」に変えるための『設計図』と『実行力』 だったのです。
「技術的負債」は「金鉱」である。
このブログを読んでいる、志高いエンジニアの皆さん。
特に、これから海外で一旗揚げようと思っているなら、この言葉を絶対に覚えておいてください。
「技術的負債」は、エンジニアが文句を言うための「言い訳」ではありません。
それは、あなたの市場価値を爆上げするための「キャリアの金鉱」です。
なぜか?
世の中の9割のエンジニアは、「このコード、クソだ」「キマイラが動かない」「VB.NET 1.1とかありえない」と、文句を言う側にいます。
彼らは「被害者」です。「レガシーのせいで、俺のパフォーマンスが出ない」と嘆いている。
でも、考えてみてください。
ビジネスの現場は、ピカピカの技術(Next.jsとかGoとかRustとか)で、ゼロからサービスを作れる「お遊戯会」ではありません。
ほとんどの会社は、何かしらの「キマイラ」を抱え、それに苦しみながら、なんとか日銭を稼いでいるのが現実です。
だからこそ、価値がある。
残りの1割のエンジニア。「カネを生むエンジニア」は、こう考えます。
「このキマイラ、ひどいな。…で、こいつは1年間にいくら会社に損をさせてるんだ?」
「この負債を、最小のコスト(ビッグバンではなく)で解消したら、どれだけの利益(リターン)が生まれるんだ?」
この視点を持った瞬間、あなたは「コードを書く人」から「経営課題を技術で解決する人」に変わります。
そして、海外(特に欧米)の職場は、この「経営課題を解決した人」を、日本(の古い会社)の10倍、いや100倍正当に評価します。
なぜなら、彼らの評価基準は「残業時間」でも「年功序列」でもなく、ただ一つ。「あなたが、いくら稼いだか(あるいは、いくら節約したか)」だからです。
僕がやったことは、CFOの言語(カネ)で、負債を金鉱に変える「ストーリー」を語っただけです。
「WPFのXAMLが綺麗に書けます」
「MVVMパターンに精通しています」
「C#の最新機能(.NET 8)を知っています」
これらは、もちろん大事なスキルです。でも、それは「当たり前」のスキル。
転職市場で、他のエンジニアとあなたを差別化する「決定打」にはなりません。
でも、こう言えたらどうでしょう?
「私は、前職で15年モノのレガシーバックエンドが引き起こしていた年間3000万円の運用コストを、マイクロサービス化(ストラングラー・パターン)の導入を主導することでゼロにし、さらに新機能開発のリードタイムを80%削減(半年→1ヶ月)することで、1億円の商機創出に貢献しました」
どっちのエンジニアを採用したいか。火を見るより明らかですよね。
フロントエンドこそ、「ガワ」の外に出よ
僕はWPFエンジニアです。フロントエンドです。
でも、あの絶望の日から、僕はバックエンドのアーキテクチャにも、データベース設計にも、そしてCFOへのプレゼン資料作りにも、遠慮なく首を突っ込むようになりました。
なぜなら、ユーザーに価値を届ける最後の砦は、僕らフロントエンドエンジニアだからです。
バックエンドが「キマイラ」だろうが何だろうが、ユーザーが触るのは僕らが作ったWPFアプリです。そのアプリが「重い」「バグる」「新機能が来ない」となれば、真っ先に文句を言われるのは僕らです。
だったら、文句を言われる前に、文句の「根源」を叩きに行けばいい。
僕らの仕事は「ガワ」を作ることじゃない。
「ユーザー体験」という名の「ビジネス価値」を、最後までデリバリーすることです。
そのためなら、バックエンドも、インフラも、経営も、すべてが僕らの「仕事場」です。
結び:君の隣にいる「キマイラ」を見つめろ
この長いブログを最後まで読んでくれて、ありがとうございます。
「キマイラ」は、まだ完全には死んでいません。僕らのチームは今も、あの「絞め殺し(ストラングラー)」戦略を続け、一本、また一本と「キマイラ」に巻き付く「ツタ(マイクロサービス)」を開発し続けています。戦いは、泥臭く続いています。
「ビッグバン」のような派手な花火は上がりません。
でも、僕らは確実に、一歩ずつ、会社を「儲かる」体質に変えています。
これから海外で働きたいと思っているエンジニアの皆さん。
そして、今まさに、日本の職場で「秘伝のタレ」に苦しめられているエンジニアの皆さん。
どうか、文句を言う側で終わらないでください。
その「技術的負債」は、呪いではありません。
あなたが「カネを生むエンジニア」へと脱皮するための、最高の「獲物」です。
まずは、その「キマイラ」が、あなたのチームの時間を、会社の金を、一体どれだけ無駄にしているのか。
こっそりExcelで計算してみることから、始めてみませんか?
その数字こそが、あなたのキャリアを切り開く、最強の「武器」になるはずです。
健闘を祈ります。

コメント