海外の現場で学んだ「負債との戦い方」:C#エンジニアが教えるCrawl, Walk, Runの生存戦略

「海外でエンジニアとして働いています」と言うと、決まって返ってくる反応があります。「すごいですね!最先端の技術スタックで、毎日カフェのようなオフィスでバリバリ新機能を開発してるんでしょう?」という、キラキラした憧れの眼差しです。

正直に言いましょう。そのイメージの半分は合っていますが、残りの半分、いや僕の日常の8割は、そのイメージとは真逆の場所にあります。

1. 現実はキラキラしてない?深海魚のようなモノリスとの対峙

僕がいま向き合っているのは、10年以上前に産声を上げ、継ぎ足し続けられた巨大なWPF(Windows Presentation Foundation)のモノリスです。ソリューションを開けばプロジェクト数は150を超え、依存関係のグラフはもはやスパゲッティというよりは、巨大な深海魚の巣窟のよう。

ビルドを始めれば、コーヒーを淹れて席に戻ってきてもまだ終わっていません。コードの中を覗けば、BackgroundWorkerがいまだに現役で走り回り、MVVMとは名ばかりの「コードビハインドに3000行書かれた何か」が僕をあざ笑います。

これが、海外の、それも歴史ある企業の設計開発現場における「リアル」です。多くの「地に足のついた」海外企業では、稼ぎ頭である既存システム、すなわち「レガシー」との戦いがメインディッシュになります。

技術的正義とビジネスの正解

日本からこの国に渡ってきたとき、最大のショックは英語の壁でも文化の壁でもありませんでした。この「巨大な負債を前にして、どう振る舞えばプロとして認められるのか」という正解が見えなかったことです。

「レガシーなんて古い。全部マイクロサービスにして、最新の.NETに移行して、クラウドネイティブにするべきだ!」という正義を振りかざした僕に対し、シニアエンジニアはこう言いました。

「その『モダンな正解』で、今動いている100万ドルの利益をどう守るんだ? 明日からデプロイできるのか?」

技術的な正しさが、必ずしもビジネスの正しさと直結しない。特に言葉も文化も違うアウェイの地で、信頼を勝ち取るためには「技術を語る」だけでは足りません。「結果を、それも安全に出し続ける」という実績が必要なのです。

2. 「一気に変える」は死亡フラグ。小刻みな勝利を設計する

海外のチームにジョインして数ヶ月、コードベースの全貌が見えてくると、エンジニアなら誰しも一度は「これ、作り直したほうが早いのでは?」という誘惑に駆られます。しかし、ビジネスサイドにとって、技術的な刷新のために新機能のリリースを半年間止めるという提案は、多くの場合「NO」です。

そこで僕が学んだのが、**「Strangler Fig Pattern(絞め殺しの木パターン)」**という戦術、そして “Crawl, Walk, Run”(這い、歩き、走る) という段階的アプローチです。

Crawl(這う):Strangler Patternによる浸食

この戦術は、古いシステムを一度に壊すのではなく、その周囲に新しいシステムを少しずつ構築し、機能を一つずつ移し替えていく手法です。

WPFのプロジェクトであれば、いきなりUI層を全否定するのではなく、まずは「共通基盤」のモダン化から着手します。

  • ドメインロジックの分離: MainWindow.xaml.cs に癒着したロジックを、.NET Standard 2.1や最新の .NET Class Library へと「這う」ように切り出します。
  • Small Wins(小さな勝利): 特定の複雑な計算モジュールだけを新プロジェクトに移動し、xUnitFluentAssertionsで徹底的にガードを固める。見た目は何も変わらなくても、中身の安全性は確実に向上します。

Walk(歩く):自動化と可視化という足場

次に僕が着手したのは、レガシーへのCI/CD導入とオブザーバビリティ(可観測性)の確保です。リリースが手動コピペで行われているような現場では、まずは「誰がやっても同じ結果が出る」という安心感を作ることが「Walk」への第一歩となります。

  1. ビルドのYAML化: Azure DevOpsGitHub Actionsを用い、ビルドプロセスをコードで定義する。
  2. テレメトリの注入: Application Insightsなどを仕込み、「どの機能が使われ、どこで例外が起きているか」を数字で示せるようにします。

「作り直したい」という主観的な訴えを、客観的な「直すべき場所」というデータへ変換する。これが、多様な価値観が混ざり合う海外チームにおける最強のコミュニケーションツールになります。

3. 技術より難しい「心」のアップデート

技術的な基盤が整い始めた頃、僕は奇妙な抵抗に遭遇しました。PR(プルリクエスト)のレビューが滞り、チームに余計な緊張感が漂い始めたのです。仲の良い同僚に理由を尋ねると、意外な答えが返ってきました。

「みんな、君がやってることに恐怖を感じてるんだよ」

門番たちの自己防衛

そのチームには、10年間そのレガシーアプリを支え続けてきた「門番(Gatekeeper)」のようなベテランたちがいました。彼らにとって、複雑怪奇なコードの理解こそが「雇用を守るシェルター」でした。「お前のこれまでの10年は価値がない」と否定されているように感じていたのです。

本当に優れた設計者は、綺麗なコードを書く人ではなく、「チーム全員が、安心して新しい技術に乗っかれる環境」を設計できる人です。僕は戦略を「コードの修正」から「恐怖のマネジメント」へと切り替えました。

  • Brown Bag Lunch(勉強会): 共通の「痛み」を言語化し、新しい技術が「仕事を奪うものではなく、緊急呼び出しから解放するためのツール」であることを共有。
  • ペアプログラミング: ベテランのドメイン知識をリスペクトしつつ、モダンなC#の作法を「体験」してもらう。

一番の反対派だったシニアが、自分で書いた初めてのユニットテストが「グリーン」になったのを見て、”Oh, beautiful…” と呟いた瞬間。あの時の彼の笑顔は、どんな美しいアーキテクチャ図よりも価値のあるものでした。

4. 10年後も生き残るエンジニアの生存戦略

「Crawl, Walk, Run」を経て、僕のチームは今、自律的に進化を続ける「Run」の状態にあります。WPFのモノリスだったアプリは、重要なパーツが次々と切り出され、MAUIやAvaloniaといったクロスプラットフォームへの移行さえ見据えられるようになりました。

しかし、技術は5年も経てば様変わりします。いま学んでいるC#の最新機能も、数年後には「レガシー」と呼ばれる日が来るでしょう。

変化を制御するプロフェッショナルへ

激動の世界で、僕らエンジニアが10年後も生き残るために必要なのは、最新フレームワークの知識だけではありません。**「古い価値を尊重しながら、ビジネスを止めずにシステムを進化させ続けられる能力」**です。

海外の企業が、わざわざビザを出してまで高い給料で雇いたいのは、最新の言語が書ける人ではなく、「どんなにカオスな状況でも、秩序を持ち込み、チームを成功へ導けるプロフェッショナル」なのです。

明日から始める「小さな一歩」

この記事を読み終えた君に、一つだけ宿題を出します。 明日(あるいは今日)の仕事で、**「たった15分でできる自動化」**を一つだけ探してみてください。

  • 手動のExcelコピペをスクリプトにする。
  • 読みづらいメソッドに、一行のドキュメントコメントを書く。

どんなに小さくても構いません。それが君にとっての「這う(Crawl)」一歩になります。海外での挑戦は決して楽な道ではありませんが、その先には「自分の手で未来を書き換えている」という、何物にも代えがたい手応えが待っています。

また現場でお会いしましょう。Happy Coding!

コメント

タイトルとURLをコピーしました