コードの向こう側にある「責任」と「持続可能性」への目覚め
まえがき:異国の地、C#とコーヒーと僕
やあ、みんな。今日も異国の空の下、Visual Studioと睨めっこしてるかな?
僕はいま、とある海外の都市でシニアソフトウェアエンジニアとして働いている。主な戦場はC#とWPF(Windows Presentation Foundation)。日本にいた頃は「WPFなんて枯れた技術だろ?」なんて言われることもあったけど、こっちの産業系や金融系の現場じゃまだまだ現役バリバリだ。むしろ、複雑なデスクトップアプリケーションの設計において、これほど堅牢で表現力豊かなフレームワークはそうそうないと思ってる。
でも、今日話したいのは技術的なTipsじゃない。もっと根っこの部分、エンジニアとしての「あり方」や「哲学」の話だ。特にこれから海外を目指す人、あるいは今の環境でなんとなくモヤモヤしている人には、ぜひ聞いてほしい。
これを読むことで、君は単なる「コーダー」から、真の意味での「エンジニア」へと脱皮するヒントを得られるはずだ。それは、僕自身がこっちに来て、痛い目を見ながら学んだ「生存戦略」でもあるからね。
今日は、僕が提唱したい**「Introducing the Ethical Code Framework(エシカル・コード・フレームワークの導入)」**という概念について、じっくり話させてほしい。
「動けばいい」が通用しなかった日
日本で働いていた頃の僕は、正直に言えば「仕様書通りに動くもの」を作ることが仕事だと思っていた。「バグがない」「納期に間に合う」「パフォーマンスが良い」。これが正義だった。もちろん、これらは今でも重要だ。だけど、海外のチームに参加して最初に受けた洗礼は、そんな僕の自信を粉々に砕くものだった。
あるプロジェクトでのコードレビューの時だ。僕は非同期処理を多用した、かなりテクニカルなDataBindingの実装をコミットした。自分では「完璧だ、このUIスレッドの開放の仕方はエレガントだ」と自画自賛していたくらいだ。
しかし、同僚のテックリード(ひげ面の巨漢、名前はマイクとしよう)は、僕のコードを見て渋い顔をした。そしてこう言ったんだ。
「機能は満たしている。でも、このコードは**Unethical(非倫理的)**だ」
耳を疑ったよ。倫理? 道徳? 僕は別にウイルスを作ったわけでも、ユーザーの個人情報を抜いたわけでもない。ただのWPFのコンバーターとViewModelのロジックだぞ?
マイクは続けた。
「この実装はあまりに複雑すぎて、君以外の誰もメンテナンスできない。君が明日バスに轢かれたら、このプロジェクトは死ぬ。それはチームに対する『無責任』であり、将来このソフトウェアを使うユーザーに対する『背信行為』だ。サステナブル(持続可能)じゃないんだよ」
その時、ハッとしたんだ。僕は「技術的な正解」ばかりを追いかけて、そのコードが将来もたらす「影響」を完全に無視していた。
エシカル・コードとは何か:定義の再構築
そこで僕は考え始めた。「エシカル(倫理的)」という言葉を、ソフトウェア開発の文脈で再定義する必要があると。
一般的にエンジニアリングにおける倫理というと、AIのバイアス問題やプライバシー保護なんかが真っ先に浮かぶと思う。もちろんそれも大事だ。でも、もっと日々のコーディングレベル、設計レベルに落とし込んだ時の「エシカル」とは何だろう?
僕が辿り着いた定義はこうだ。
Defining ethical code: a proactive approach to build responsible and sustainable software.
(エシカル・コードの定義:責任ある持続可能なソフトウェアを構築するための、能動的なアプローチ)
これは、単に「悪いことをしない」という受動的な姿勢じゃない。「より良い未来を残すために、意図を持ってコードを書く」という**能動的(Proactive)**な姿勢のことなんだ。
例えば、WPFで言えば、メモリリークを起こさないように IDisposable を適切に実装するのは、マシンのリソースに対するエシカルな態度だ。視覚障害者が使うことを想定して AutomationProperties を設定するのは、ユーザーの多様性に対するエシカルな態度だ。そして、後任者が読みやすいように命名規則を統一し、あえて枯れたシンプルなパターンを採用するのは、チームと未来に対するエシカルな態度なんだ。
なぜ海外で「エシカル」が重視されるのか
日本と海外(特に欧米圏)の開発現場で大きく違うのは、「コンテキストの共有度」だと思う。
日本だと「阿吽の呼吸」や「暗黙の了解」で通じることが多い。だから、多少コードがスパゲッティでも、「まあ、あの人が書いたし、なんとかなるでしょ」で回ってしまうことがある(それが後で地獄を見る原因になるんだけど)。
でも、こっちは違う。文化も母国語もバックグラウンドも違う人間が集まっている。人の入れ替わりも激しい。ジョブ・ディスクリプション(職務記述書)に書かれていないことはやらない主義の人もいる。そんな環境で、自分勝手な「オレオレ実装」をすることは、チーム全体の生産性を著しく下げる破壊行為とみなされるんだ。
ここで重要になるのが**「The three pillars(3つの柱)」**だ。
- Identifying impact(影響の特定)
- Evaluating alternatives(代替案の評価)
- Fostering accountability(説明責任の醸成)
この3つを意識してコーディングしているエンジニアと、そうでないエンジニアの間には、埋めようのない「格」の差が生まれる。
海外で評価されるエンジニアは、コードを書くのが速い人じゃない。「そのコードがビジネスやユーザー、そしてチームにどんなインパクトを与えるか」を説明できて、「なぜ他の方法ではなく、その方法を選んだのか」を論理的に語れる人だ。つまり、自分の仕事に強烈なまでのオーナーシップと**アカウンタビリティ(説明責任)**を持っている人なんだ。
技術的意思決定を「社会」と「幸福」へ接続する
Bridging the gap: connecting technical decisions to broader societal and user well-being.
(ギャップを埋める:技術的な決定を、より広い社会やユーザーの幸福(ウェルビーイング)へと結びつけること)
これが、このフレームワークの最終的なゴールだ。
「大げさだなあ」と思うかもしれない。たかがボタン一つの配置、たかが例外処理の一つじゃないか、と。
でも想像してみてほしい。
君が作った業務アプリのエラーメッセージが不親切だったせいで、現場のオペレーターが毎日10分の残業を強いられているとしたら? それはその人の「人生の時間」を奪っていることになる。
逆に、君がパフォーマンスチューニングを徹底したおかげで、バッテリー消費が減り、出先で働く営業マンが充電の心配から解放されたとしたら? それは「ユーザーのウェルビーイング」に貢献したことになる。
僕らエンジニアは、キーボード一つで誰かの時間を奪うこともできれば、誰かに余裕を与えることもできる。コードは単なる命令の羅列じゃない。誰かの生活や仕事の一部になる「環境」そのものなんだ。
この視点を持つと、仕事がつまらないなんて言っていられなくなる。「仕様だからやる」のではなく、「ユーザーの幸福のために、技術的にどう解決するか」を考えるようになるからだ。これこそが、AIにコードを書かせる時代になっても生き残る、真のエンジニアの価値だと僕は信じている。
次章への橋渡し
さて、ここまで読んでくれた君は、きっと「概念はわかった。でも具体的にどうすればいいの?」「現場で明日から使えるアクションは?」とウズウズしているだろう。
エシカル・コードは、精神論だけでは終わらない。具体的で実践的なメソッドがある。
次章(承)では、先ほど触れた**「3つの柱(The three pillars)」**について、実際のC# WPFの開発シーン——例えば、MVVMパターンの設計判断や、レガシーコードのリファクタリング——を例に挙げながら、深掘りしていこうと思う。
準備はいいかい?
ここからが、君のエンジニア人生をアップデートする本番だ。
そのコード、説明できる? エシカル・コードを支える「3つの柱」とWPF開発の現場論
哲学を「指先」に宿らせる
前回、僕は「エシカル・コード」という概念について話した。「責任ある持続可能なソフトウェア」を作るという、ちょっと高尚に聞こえるテーマだ。
でも、画面の前の君はこう思っているかもしれない。「言いたいことはわかるけど、明日の朝会までのタスクで手一杯なんだよ。具体的にどうコードが変わるんだ?」と。
その通りだ。哲学は、実行可能なアクションに変換されなければ意味がない。
海外の現場で僕が学んだのは、このエシカルなマインドセットを「技術的な習慣」として開発プロセスに組み込む方法だった。それが**「The three pillars(3つの柱)」**だ。
今回は、僕の本職であるC#とWPF(Windows Presentation Foundation)の現場で実際に起きた事例——恥ずかしい失敗談も含めて——をベースに、この3つの柱をどう実践していくかを話そうと思う。
柱1:Identifying Impact(影響の特定)——コードの向こう側の「痛み」を想像する
最初の柱は「影響の特定」だ。これは、「自分の書いたコードが、誰の、どんなリソースに影響を与えるか」を徹底的に想像することを指す。
かつて僕は、ある物流倉庫で使用される監視ダッシュボードアプリを開発していた。24時間365日稼働し続ける、ミッションクリティカルなシステムだ。
WPFで作られたその画面は、センサーからのデータをリアルタイムでグラフ描画していた。僕は、データの更新通知に標準的な .NET のイベント処理とデータバインディングを使っていた。
開発環境では完璧だった。サクサク動くし、アニメーションも滑らかだ。僕は「ヨシ!」と指差し確認をしてリリースした。
しかし、1週間後、現場からクレームが入った。
「3日に1回、アプリが固まってPCごと再起動しなきゃいけない。忙しい朝の出荷時にそれが起きると、現場がパニックになるんだ」
原因は、WPFエンジニアなら一度は通る道、メモリリークだった。
ViewModelで購読したイベントを適切に解除していなかったため、画面遷移のたびに古いインスタンスがGC(ガベージコレクション)されずに残り続けていたのだ。いわゆる「Weak Event Pattern」を使うか、IDisposable で明示的に解除する必要があった箇所だ。
ここでの「エシカルな問題」は、メモリリークそのものではない。バグは誰にでもある。問題は、僕が**「このアプリがどのような環境で、どのように使われるか」というインパクト(影響)を想像していなかった**ことだ。
もし僕が、「これは24時間つけっぱなしのアプリだ」「現場のオペレーターはITに詳しくない」「再起動の5分間、トラックの列が止まる」という社会的・物理的なインパクトまで思考を巡らせていれば、メモリプロファイラを通さずにリリースすることはなかったはずだ。
Identifying Impactとは、コードのスペックだけでなく、ユーザーの「体験」や「損失」までをスコープに入れて設計することだ。
「たかがメモリリーク」ではない。「オペレーターの朝の平穏」を守るために、僕らは WeakReference を使うのだ。
柱2:Evaluating Alternatives(代替案の評価)——「最初の思いつき」を疑え
2つ目の柱は「代替案の評価」。これこそが、シニアエンジニアとジュニアエンジニアを分ける分水嶺と言ってもいい。
機能要件:「数百件のデータをグリッドに表示し、ユーザーが自由にフィルタリングできるようにしたい」
このチケットが回ってきた時、君ならどう実装する?
昔の僕なら、即座にキーボードを叩き始めていた。「よし、ViewModelに ObservableCollection を持って、LINQで Where かけて入れ替えればいいじゃん」と。
これが**「最初の思いつき」**だ。そして多くの場合、これはエシカルではない。なぜなら、他にもっと良い方法がある可能性を検討していないからだ。
海外のテックリードとのコードレビューで、僕はよくこう突っ込まれた。
「Why this approach? What else did you consider?(なぜこのアプローチ? 他には何を検討した?)」
エシカルなエンジニアは、コードを書く前に脳内で、あるいはホワイトボードで、複数の選択肢を戦わせる。
- 案A(愚直な実装): ViewModelでコレクションを再生成する。
- メリット:実装が一番早い。
- デメリット:データ量が増えるとUIスレッドが固まる。WPFのレンダリングコストが高い。
- 案B(WPF標準機能):
ICollectionViewを使い、View側のフィルタ機能を利用する。- メリット:UI仮想化(Virtualization)が効きやすい。コード量が減る。
- デメリット:複雑なAND/OR条件など、高度なフィルタリングには限界があるかも。
- 案C(非同期処理): バックグラウンドタスクでフィルタリングし、結果だけをUIに戻す。
- メリット:UIが絶対に固まらない(User Experience最高)。
- デメリット:実装難易度が高い。競合状態(Race Condition)のハンドリングが必要。
Evaluating Alternativesとは、これらの選択肢に対し、コスト・パフォーマンス・メンテナンス性の観点から「評価」を下すプロセスだ。
「今回はデータ量が最大でも500件と決まっているから、メンテナンス性を優先して、一番標準的な 案B を採用します。ただし、将来件数が増えたら 案C に移行できるよう、インターフェースを切っておきます」
ここまで言えて初めて、そのコードは「エシカル」になる。
「とりあえず動いたからこれにしました」というのは、将来そのコードを修正する同僚の時間(=命)を軽視しているのと同じだ。常に「ベストな妥協点」を探る姿勢、それがプロフェッショナルだ。
柱3:Fostering Accountability(説明責任の醸成)——未来の自分への手紙
最後の柱は「説明責任の醸成」。
これは、何か問題が起きた時に「私の責任です」と謝ることではない(それはただの謝罪だ)。
ここで言うアカウンタビリティとは、「なぜそのコードがそこに存在するのか」を、誰にでもわかる状態で残しておくことだ。
海外のチームでは、メンバーの流動性が高い。「このコード書いたの誰?」「ああ、それは3年前に辞めたタナカさんです」「じゃあ誰も触れないね」……これが一番のリスクだ。
僕が実際に体験した「非エシカル」なコード例を挙げよう。
ある既存のWPFプロジェクトの改修中、こんなコードを見つけた。
C#
// TODO: Fix this later
Thread.Sleep(500); // Magic wait
コメントには「後で直す」とだけ。そして謎の500ミリ秒の停止。
これを消すと、なぜかタイミングによってはデータロードが失敗する。でも、なぜ500msなのか? 300msではダメなのか? そもそもなぜ待つ必要があるのか? 何も説明がない。
このコードは、未来のメンテナー(つまり僕だ)に対して極めて不誠実だ。この1行の意図を探るために、僕は半日を費やしてデバッグする羽目になった。
エシカル・コード・フレームワークにおけるAccountabilityの実践は、以下のような形になる。
- 意図のあるコメント:「ここではAPIサーバーのレートリミット回避のため、意図的に待機を入れている。本来はサーバー側でキュー制御すべきだが、現行バージョンの制約によりクライアント側で対処。v2.0で削除予定。」——これなら、消していいのかダメなのか一発でわかる。
- 自己文書化されたコード:Thread.Sleep(500) ではなく、await WaitForRateLimitResetAsync() というメソッドにラップする。
- テストコード:その挙動が「仕様」であることを保証するUnit Testを残す。
自分が書いたコードに責任を持つということは、**「私がいない部屋でも、このコードが正しく理解され、修正される状態にしておく」**ということだ。
それはまるで、未来の自分や仲間に向けて「手紙」を書くような作業だ。
「ここは苦労したんだ。こういう理由で、あえて汚いハックをしている。気をつけてくれ」
そんなメッセージが込められたコードは、読んだ時に書き手の愛を感じる。そういうコードこそが、サステナブル(持続可能)なシステムを作るんだ。
次章への橋渡し:理想と現実の狭間で
ここまで読んで、「なるほど、確かにその通りだ。明日からやろう」と思ってくれたなら嬉しい。
しかし、現実はそう甘くないことを、現場のエンジニアである君なら知っているはずだ。
「影響を考えろ? 代替案を検討しろ? そんな時間はない、今日中に実装しろ!」
「ドキュメント? コードがドキュメントだろ、早く次の機能を作れ!」
ビジネスサイドからの容赦ないプレッシャー。迫りくるデッドライン。
エシカルでありたいと願うエンジニアの前に立ちはだかる、**「技術的負債」と「納期」**という名のモンスターたち。
僕も何度も、この理想と現実の板挟みになって苦しんだ。
「わかっているのに、汚いコードを書かなければならない」という敗北感。
次章「転」では、この**「理想(エシカル・コード)と現実(ビジネス要件)のギャップ」**にどう立ち向かうか。
海外の荒波の中で僕が見つけた、エンジニアが生き残るための交渉術と、心の保ち方について話そう。
きれいごとだけじゃない、泥臭い戦いの話になる。覚悟して待っていてくれ。
理想と現実のデッドロック。「正しさ」がビジネスを殺すとき、エンジニアはどう振る舞うべきか
泥臭い現実へようこそ
前回まで、僕は「エシカル・コード」という輝かしい理想について語ってきた。
影響を考え、代替案を評価し、説明責任を果たす。なんて美しい世界だろう。教科書通りの、完璧なエンジニアリングだ。
でも、そろそろ認めよう。
そんな理想郷(ユートピア)は、現実のプロジェクトには存在しない。
ここ海外の現場でも、それは同じだ。いや、ビジネスのスピード感が速い分、日本よりも残酷かもしれない。
月曜の朝、コーヒー片手にオフィス(あるいはZoom)に入ると、PM(プロジェクトマネージャー)のデイビッドが血走った目でこう言ってくるんだ。
「クライアントの要望が変わった。来週のデモまでにこの機能を追加してくれ。デザインはまだない。とにかく動くものを出せ。バグ? 後で直せばいい!」
この瞬間、前回僕が語った「3つの柱」は激しく揺らぐ。
影響調査? 時間がない。
代替案の検討? 最初の思いつきでやるしかない。
説明責任? 「動く」ことが唯一の正義だ。
エシカルでありたいと願うエンジニアにとって、ここは地獄だ。
今回は、この「理想と現実のギャップ」という、避けては通れない泥臭い戦場について話そう。ここでどう振る舞うかが、夢見るジュニアと、歴戦のシニアを分ける決定的なポイントになる。
「例外を握りつぶせ」と言われた日
忘れられないエピソードがある。
ある金融系スタートアップのWPFプロジェクトでのことだ。投資家向けの重要なデモを翌日に控えていた。
しかし、特定のデータパターンでアプリがクラッシュする致命的なバグが見つかった。原因はサードパーティ製のチャートライブラリの内部例外で、根本修正にはライブラリのソースを追うか、代替ライブラリに差し替える必要があった。どう見積もっても3日はかかる。
PMは僕にこう言った。
「Global Exception Handlerで全部キャッチして、何もなかったことにしてくれ。 アプリが落ちさえしなければいい」
僕は激昂した。「それはアンエシカル(非倫理的)だ! データの整合性が壊れるかもしれないし、ユーザーに嘘をつくことになる!」
正論だ。技術的には100%僕が正しい。
でも、PMは冷徹に言い返した。
「明日デモが動かなければ、次の資金調達は失敗する。そうなれば会社は倒産し、君も含めてチーム全員が解雇だ。全員が路頭に迷うことと、デモで例外を握りつぶすこと、どっちが『エシカル』なんだ?」
言葉に詰まった。
そう、エシカル・コードの最大の敵は、悪意あるハッカーでも無能な同僚でもない。
**「ビジネスの生存要件」**だ。
会社が潰れてしまえば、どれだけきれいなコードも、完璧なMVVMアーキテクチャも、ただの電子ゴミになる。
この時、僕は学んだ。「技術的な正しさ(Technical Correctness)」と「ビジネス的な正しさ(Business Correctness)」は、往々にして対立する。そして悲しいかな、ビジネスが死ねば技術も死ぬのだ。
武器としての「戦略的技術的負債」
では、僕らは魂を売って、スパゲッティコードを量産するマシーンになるべきなのか?
違う。ここで必要なのは、「諦め」ではなく**「戦略」**だ。
海外の優秀なエンジニアは、**「Strategic Technical Debt(戦略的技術的負債)」**という概念を使いこなす。
借金(負債)自体は悪ではない。家を買うときにローンを組むように、時間を買うためにあえて「汚いコード」を書くことは、高度な経営判断の一つだ。
悪いのは「無計画な借金(闇金)」であって、「返済計画のあるローン」は強力な武器になる。
WPF開発において、僕は緊急時には意図的に以下の「禁じ手」を使うことがある。
- The Code-Behind Fallback(コードビハインドへの撤退):本来ならViewModelでコマンドを定義し、Messengerでやり取りすべき複雑なUIロジックを、あえて View.xaml.cs にガリガリ書く。
- 理由: アーキテクチャを守るためのボイラープレートコードを書く時間がない時。
- 条件: そのViewは「使い捨て」か、後で丸ごと書き直すことを前提とする。
- The “Quarantine” Strategy(隔離戦略):汚いコードを既存のきれいなクラスに混ぜない。TemporaryHacks.cs や DemoPatchService のような、名前からしてヤバそうなクラスを作り、そこに汚物をすべて閉じ込める。
- 効果: メインのロジックを汚染させない。後でそのクラスごと削除(返済)しやすくする。
- TODO Bomb(TODO爆弾):C#// TODO: TECHNICAL DEBT [2025-12-06] – Swallowed exception for Demo.
// MUST FIX by next sprint. Issue ID: #1024
catch (Exception ex) { /* shhh… */ }日付とIssue番号を入れた強力なTODOコメントを残す。CI/CDパイプラインで「1ヶ月以上前のTODOがあったらビルド警告を出す」設定にしておけば、忘れ去られることはない。
これらは「手抜き」ではない。状況をコントロールした上での**「緊急回避行動」**だ。
「仕方なく汚くなった」のと、「戦略的にここを汚した」のとでは、雲泥の差がある。
PMと戦うな、PMを「共犯者」にせよ
次に重要なのが交渉術だ。
日本人は真面目だから、無理な要求に対して「頑張ります(残業します)」か「無理です(技術的に不可能です)」の二択になりがちだ。
しかし、海外のPM相手に「コードの品質が…」とか「リファクタリングが…」と言っても響かない。彼らにとってコードはブラックボックスだからだ。
彼らに通じる言語は**「Time(時間)」「Risk(リスク)」「Cost(コスト)」**の3つだけだ。
僕はよく、**「Yes, but…(いいよ、でも条件がある)」**の話法を使う。
PM: 「この機能を明日までに追加して。」
僕: 「できるよ。(Yes)
でも(But)、 それをやるには既存のテストをスキップして、アーキテクチャを無視した実装をする必要がある。
これによって、将来的なバグ発生率が約30%上がるリスクがあるし、来月の機能追加の時に今の2倍の工数がかかることになる。
それでも今やる価値が、ビジネス的にあるかい?」
こう聞くと、PMは考え込む。「将来の速度が落ちるのは困るな…」と。
ここで重要なのは、判断のボールをPMに投げることだ。
もしPMが「それでもやれ、責任は俺が取る」と言えば、やればいい。それはもはやエンジニアのわがままではなく、合意形成されたビジネスリスクだ。PMを「汚いコード」の共犯者にするんだ。これなら、後で責められることはない。
エゴを切り離せ:Deep WorkとDetachment
最後に、メンタル面の話をしよう。
エシカルでありたいと願うエンジニアほど、汚いコードを書くことに物理的な苦痛を感じる。「こんなゴミを生み出してしまった自分はダメなエンジニアだ」と。
僕もそうだった。でも、あるシニアエンジニアに言われた言葉に救われた。
「You are not your code.(君は君のコードではない)」
君が書いたコードに対する批判は、君の人格に対する攻撃ではない。
同様に、ビジネスの要請で書かざるを得なかった「汚いコード」は、君のスキル不足の証明ではない。それはその時点での「最適解」だっただけだ。
プロフェッショナルとは、自分の作品に愛着を持ちつつも、必要とあればそれを冷徹に切り捨てられる人のことだ。
「今は泥船を作るしかない。でも、いつか必ず豪華客船に作り変えてやる」
その虎視眈々とした野心さえあれば、心は折れない。
次章への橋渡し
ここまで、理想と現実の泥沼の戦いについて話してきた。
・ビジネスの生存こそが究極のエシカルであること。
・戦略的に負債を抱える技術。
・PMを共犯者にする交渉術。
かなりダークサイドな話だったかもしれない。
「じゃあ結局、エンジニアはビジネスの奴隷なのか?」
「エシカル・コードなんて、余裕のある時の道楽なのか?」
いや、違う。
最終章となる次回「結」では、この混沌とした現実を生き抜いた先にあるもの——**「信頼(Trust)」**について話したい。
なぜ、回り道をしてでも、苦労してでも、僕らがエシカルなコードを目指し続けるべきなのか。
それが、君のキャリアにどう「ギフト」として返ってくるのか。
C#とWPFを愛する一人のエンジニアとして、未来への希望を語って締めくくりたいと思う。
技術的決定を社会とユーザーの幸福へ。エシカル・コードがもたらす「未来へのギフト」
嵐のあとの静寂
長い旅だったね。
「エシカル・コード」という理想を掲げ(起)、WPFの現場で実践し(承)、ビジネスの荒波に揉まれて泥まみれになった(転)。
今、僕の目の前にあるVisual Studioの画面には、前回の修羅場で書いた「戦略的技術的負債」の塊——あの TODO Bomb 付きのコードが残っている。
でも、不思議と敗北感はない。なぜなら、僕は「無知ゆえに」汚いコードを書いたのではなく、「チームとビジネスを守るために」その選択をし、そして「必ず借金を返す」という計画を持っているからだ。
シリーズ最後となる今回は、この混沌としたプロセスの先にあるものについて話したい。
なぜ、面倒な思いをしてまで、僕らは「エシカル」であり続けようとするのか。
きれいごと抜きで言おう。それは、君自身が得をするからだ。それも、とてつもなく大きなリターンとして。
信頼貯金(Trust Battery)という最強の通貨
カナダ発のEC大手ShopifyのCEO、トビ・リュトケが提唱した**「Trust Battery(信頼のバッテリー)」**という概念を知っているかな?
人と人との関係には目に見えないバッテリーがあって、良い仕事をすれば充電され、約束を破れば放電されるという考え方だ。
海外の流動的なチームで働いていると、痛感することがある。
**「技術力だけで評価されるのは、最初の3ヶ月だけ」**だと。
C#の文法に詳しい、WPFのXAMLが書ける、アルゴリズムに強い。そんなハードスキルは、入場チケットに過ぎない。
その先、シニアエンジニアとして、あるいはリードとして重要なポジションを任されるかどうかは、全てこの「信頼バッテリー」の残量で決まる。
前回、PMとの交渉の話をした。「リスクがあるから今はやりたくない」と僕が言った時、PMが耳を傾けてくれるかどうか。それは、日頃の行いにかかっている。
- 普段から「影響(Impact)」を考え、バグを出しても正直に「説明責任(Accountability)」を果たしているエンジニアの「No」は、**「専門家としての警告」**として受け取られる。
- 普段から「動けばいい」という態度で、らくな「代替案(Alternatives)」ばかり選んでいるエンジニアの「No」は、**「ただの怠慢」**として無視される。
エシカル・コード・フレームワークを実践することは、日々のコミットを通じて、この信頼バッテリーをコツコツと充電する行為なんだ。
「あいつが言うなら間違いない」「あいつに任せれば、将来変なことにはならない」。
この信頼こそが、海外というアウェイな環境で、君が自由に、裁量を持って働くための「最強の通貨」になる。
AI時代、最後に残る「人間の価値」
少し視点を広げよう。今は2025年。
GitHub CopilotやChatGPTのようなAIコーディングアシスタントは、もはや当たり前のツールになった。
「WPFでDataGridを仮想化するコードを書いて」と言えば、AIは一瞬でそれっぽいコードを吐き出してくれる。
では、僕らエンジニアは不要になるのか?
逆だ。「エシカルな判断」ができるエンジニアの価値は、むしろ暴騰している。
AIは「How(どう書くか)」においては優秀だ。
しかし、AIは**「Why(なぜ書くか)」**を持たない。
AIは「この実装をすると、現場のオペレーターが疲弊するかもしれない」とは悩まない。「今はあえて汚いコードを書くべき時だ」という苦渋の決断もしない。責任も取らない。
Introducing the Ethical Code Framework の本質は、ここにある。
コードを書くという行為に、**「意思」と「責任」と「配慮」**を込めること。
これは人間にしかできない。
AIが生成したコードに対して、
「このロジックはパフォーマンス的には正解だけど、チームのスキルセットと合わないからメンテナンス性が下がる(Alternativesの評価)」
と判断し、修正を加える。
これができるエンジニアこそが、AIの上司になれる。ただコードを写経するだけのコーダーは、残念ながら淘汰されていくだろう。
コードの向こう側への「Omotenashi」
僕は日本から来たエンジニアとして、こちらのチームによく**「Omotenashi(おもてなし)」**の話をする。
「見えないところまで気を配る」という精神だ。
ソフトウェアにおけるおもてなしとは何か?
それは、ユーザーのウェルビーイング(幸福)への貢献だ。
例えば、WPFアプリで重い処理をする時、ただマウスカーソルを砂時計(WaitCursor)にするだけでなく、
「現在、データの集計を行っています(約30秒)。コーヒーでも飲んでお待ちください」
というメッセージと共に、進捗バーを滑らかに動かす。
キャンセルボタン(CancellationToken)をちゃんと実装して、いつでもユーザーが主導権を取り戻せるようにする。
技術的には面倒だ。非同期処理のハンドリングも複雑になる。
でも、これこそが**「Bridging the gap connecting technical decisions to broader societal and user well-being」**の実践だ。
君のコード一つで、地球の裏側にいる誰かの仕事のストレスが減り、早く家に帰れるようになるかもしれない。
誰かがイライラせずに、笑顔でアプリを使えるかもしれない。
僕らは、C#とXAMLを使って、デジタルの世界に「居心地の良い部屋」を建築しているんだ。そう思うと、毎日の仕事が少し誇らしく思えてこないかい?
未来の自分へのギフト
最後に。
ここまで偉そうなことを言ってきたけど、僕も毎日のように妥協し、失敗し、汚いコードを書いている。
完璧な人間なんていない。100%エシカルであり続けることなんて不可能だ。
だから、提案したいのは**「1%の積み上げ」だ。
ボーイスカウトには「来た時よりも美しく(Boy Scout Rule)」**という規則がある。
- 既存のコードを触ったら、変数名を一つだけわかりやすくリネームする。
- 意味不明な定数があったら、コメントを一言足しておく。
- コミットメッセージに、変更の「理由」を1行多く書く。
たったこれだけでいい。
今日君が書いたその「1%のエシカルなコード」は、3ヶ月後、バグ修正に追われて泣きそうになっている**「未来の君自身」への最高のギフト**になる。
「ああ、過去の俺、ありがとう。このコメントのおかげで助かった!」
そう思える瞬間が、必ず来る。
おわりに:旅は続く
海外で働くエンジニアとして、C# WPFのスペシャリストとして、僕が伝えたかった「エシカル・コード・フレームワーク」。
それは、高尚な倫理学ではなく、現場で生き残り、仲間から信頼され、自分自身を助けるための**「生存戦略」であり、「哲学」**だ。
画面の前の君へ。
次にキーボードに手を置くとき、一瞬だけ立ち止まって考えてみてほしい。
「このコードは、未来を少しだけ良くするものだろうか?」
その問いかけが、君をプロフェッショナルにする。
君のコードが、世界を動かす。
そして君の矜持(プライド)が、君自身の人生を動かしていく。
さあ、コーヒーのおかわりを入れてこようか。
僕らの仕事は、まだ終わらない。でも、最高に面白い仕事だろ?
Happy Coding!

コメント