ジュニアエンジニア向け 理不尽との付き合い方シリーズ(全8回)
第2回:外部起因の仕様変更:昨日動いたものが、今日動かなくなる

昨日動いたものが今日動かなくなる:外部起因の仕様変更とEOLに備える【第2回】

「何も変えていないのに壊れた」——この記事を読み終えると、サポート終了・OSパッチ・API廃止という「自分の外側のカレンダー」で起きる理不尽を、期限の一覧表に変え、壊れる前に手を打てるようになります。理不尽との付き合い方シリーズ(全8回)の第2回です。

⚠️ このシリーズの事例について
各回に登場する職場のストーリーは、Reddit(r/ExperiencedDevs、r/sysadmin 等)・Hacker News・X(旧Twitter)で繰り返し共有されている体験談をモデルに、人物・企業・時期・数値を置き換えて脚色したフィクションです。一方、検証セクションで扱う製品のサポート終了日・脆弱性・事故は一次情報で確認できる実在の事実であり、参考文献に原典を示しています。

🎯 テーマの主役:「外部起因の仕様変更」——他人のカレンダーで動いている時限爆弾

今回の主役は外部起因の仕様変更です。一言で言えば、外部起因の仕様変更とは、あなたが一行もコードを変えていないのに、あなたの外側の都合で、あなたのシステムの前提が壊れることです。

日常の例えで言うなら、賞味期限です。冷蔵庫に入れた牛乳は、あなたが何もしなくても、日付が来れば飲めなくなります。牛乳が悪いわけでも、あなたが管理を怠ったわけでもありません。ただ、期限というものが、あなたの外側のカレンダーで決まっているだけです。ソフトウェアも同じです。OSにもライブラリにも証明書にも、それぞれ別の会社が決めた期限があります。あなたが完璧に動くコードを書いても、依存先の期限が来れば、そのコードは動かなくなります

この「外部のカレンダー」は、3つの形で牙をむきます。第一に、サポート終了(EOL: End of Life)。更新が止まり、脆弱性が修正されなくなり、やがて動作しなくなります。第二に、一斉に切れる期限。TLS証明書、認証トークン、APIのバージョンなど、ある日時を境に一斉に無効になるものです。第三に、脆弱性。ある日突然、世界中の誰かがあなたのシステムを攻撃対象として見つけます。この3つは、壊れる速さと、事前に気づけるかどうかが違います。だから対策も変わります。

ソフトウェアの賞味期限を冷蔵庫の比喩で表した概念イラスト 冷蔵庫の棚に牛乳・卵・野菜のキャラクターが並び、それぞれ別の賞味期限ラベルを持つ様子と、期限切れに気づいたエンジニアを描いた図。 「何も変えていないのに壊れる」= 賞味期限が、他人のカレンダーで決まっている 冷蔵庫=あなたのシステム(棚ごとに期限が違う) OSサポート終了 あと14か月 ライブラリ更新停止 あと2か月 TLS証明書 あと9日 外部API あと5か月 どれも「自分では決められない日付」である 期限が来ると、コードは1行も変えていないのに動かなくなる 冷蔵庫の中身を全部覚える必要はない。 「一覧にして、近い順に並べる」だけでよい 期限は、こちらを見て 待ってはくれない だから期限だけを 先に集める

動機:「何も変えていないのに壊れた」は本当に理不尽か

※以下は、Reddit の r/sysadmin や Hacker News で繰り返し共有されてきた体験談をモデルにした脚色(フィクション)です。実在の個人・企業ではありません。

ある物流会社の基幹システムを保守していたエンジニアBは、朝の8時40分に電話を受けました。倉庫のハンディ端末が、全台、接続できなくなっている。前日の夜まで、何の問題もなく動いていました。リリースもしていない。サーバーの設定も変えていない。誰も何もしていないのに、全部が止まりました

原因は、その日の朝に切れたTLS証明書でした。切れたのは、外部の連携サービスの証明書でした。Bのチームは、Bのシステムの証明書は管理していましたが、連携先の証明書の期限は把握していませんでした。連携先の担当者は、3週間前に異動していました。

復旧には6時間かかりました。この6時間で、Bのチームは「何もしていないのに壊れた」と何度も言いました。しかし振り返ってみると、壊れたのは必然でした。期限は、3年前から決まっていたのです。ただ、誰もその日付を見ていなかっただけでした。

この出来事を「理不尽」と呼ぶかどうかは、実は紙一重です。第一回で確認した3条件に当てはめてみます。納得できたか——できません(自分たちの管理外の日付だから)。落ち度があるか——あります(1回目の記事の定義では、落ち度がないことが理不尽の条件でした)。ここが重要です。外部起因の仕様変更は、当事者にとっては理不尽に見えるが、実は「見ていなかっただけ」である部分が大きい。つまり、「理不尽」の中でも予防できる理不尽です。

だからこの回で扱うのは、感情ではなく作業です。やることは3つ。第一に、依存しているものの期限を集める。第二に、期限を1枚の表にする。第三に、期限に合わせて、壊れる前に手を打つ順番を決める。この3つができれば、「何もしていないのに壊れた」の大半は消えます。

🔍 検証①:3つの壊れ方——なぜ「EOL」は静かなのか

外部起因の破壊は、壊れ方の性質が3種類あります。この違いを知らないと、期限管理の優先順位を間違えます。

壊れ方壊れる速さ事前に気づけるか対策の重心
期限の到来(EOL)OS・言語・ライブラリのサポート終了遅い(年単位。ただし過ぎた瞬間から修復不能)できる(日付が公開されている)期限を集めて、逆算して予定に入れる
一斉に切れる期限TLS証明書、認証トークン、APIのバージョン廃止速い(分単位で全停止)できる(期限も停止時刻も事前に分かる)期限の一覧化と、切れる前の更新手順の自動化
脆弱性ライブラリの重大な脆弱性の公表速い(公表から数時間で攻撃が始まる)部分的(公表されるまで分からない)更新を普段から早く回せる状態にしておく

この表で最も誤解されているのは、EOLは「まだ動いているから大丈夫」が通用しないという点です。EOLを過ぎても、システムは多くの場合そのまま動き続けます。動かなくなるのは、もっと後です。ここが罠です。

EOLを過ぎると、次の4つが順番に起きます。第一に、脆弱性が修正されなくなる(攻撃は増える)。第二に、周辺ライブラリとの互換性が壊れる(新しい証明書方式に対応できない、新しいTLSのバージョンで通信できない)。第三に、調達できなくなる(対応ハードウェアが新品で買えない、保守契約が結べない)。第四に、人がいなくなる(そのバージョンを扱えるエンジニアが社内外から消える)。

つまり、EOLは「その日に壊れる」のではなく、「その日から徐々に修復不能になっていく」ものです。ここが第3の壊れ方(脆弱性)と決定的に違う点です。EOLは静かに進行するので、気づいたときには選択肢が消えています。

🔍 検証②:実際のEOLはどう宣告されるのか——CentOSとTerraformの事例

抽象論では実感が湧かないので、実際に起きた「外部起因の仕様変更」を見ます。この2つは、いずれも技術者コミュニティで大きな議論を呼んだ事例です。

事例A:CentOS 8 のサポート終了(2020年12月8日発表)

CentOSは、Red Hat Enterprise Linux と互換性を持つ無償のサーバー向けOSとして、長く使われてきました。CentOS 8 は2029年5月までサポートされると案内されていました。ところが2020年12月8日、Red Hatは方針を転換し、CentOS 8 のサポートを2021年12月31日で終了すると発表しました(当初予定より約7年半の前倒し)。代わりに、CentOS Stream という「開発版に近い位置づけ」の配布形態へ移行するという説明でした。

この発表は、CentOS 8 を前提にシステムを組んでいた世界中の現場に、数年単位の予定変更を強いました。コミュニティでは、後継として AlmaLinux と Rocky Linux が立ち上がりました。注目すべきは、サポート終了の日付が、使っている側の努力では一切動かなかったという点です。どれだけ反対しても、決定は変わりませんでした。一方で、「互換性のある選択肢が現れた」ことも事実です。理不尽は理不尽のままですが、逃げ道は用意されることがあります。

事例B:HashiCorp のライセンス変更(2023年8月10日発表)

インフラ構成管理ツール Terraform を提供していた HashiCorp は、2023年8月10日、同社製品のライセンスを MPL 2.0 から BUSL 1.1(Business Source License)へ変更すると発表しました。BUSL は「一定期間後にオープンソース化されるが、それまでの商用利用に制限がある」という形式のライセンスです。

これにより、Terraform と競合する製品やサービスを提供していた事業者が、そのままでは Terraform を使えなくなりました。コミュニティは MPL 2.0 の時点のコードから分岐(フォーク)し、同年、OpenTofu というプロジェクトを立ち上げました。2024年には Linux Foundation の傘下に入っています。

この2つの事例から読み取れる構造は、同じです。

観点CentOS 8HashiCorp Terraform
変更を決めたのはベンダー(Red Hat)ベンダー(HashiCorp)
事前に告知されたかされた(決定と同時)された(決定と同時)
使う側は止められたか止められなかった止められなかった
変更の理由事業戦略(開発モデルの転換)事業戦略(収益モデルの転換)
逃げ道AlmaLinux / Rocky Linux(互換OS)OpenTofu(フォーク)
現場の負担移行作業(検証・再構築)移行作業+契約の見直し

共通する3つの教訓。 第一に、決定の理由はいつも「相手の事業戦略」であること。こちらが良く使っているかどうかは、決定要因になりません。第二に、告知は「決定済み」の状態で来ること。つまり、告知を受け取った時点で、こちらに残っている選択肢は「どう適応するか」だけです。第三に、逃げ道は、多くの場合コミュニティが作ること。ただし、コミュニティが動くまでには時間がかかるので、期限ぎりぎりまで待つと逃げ道が間に合いません。

外部起因の仕様変更は決定済みで告知されることを示す構造図 ベンダー側で決定が済んでから告知が届き、利用側の選択肢は適応だけになることを、時間軸と選択肢の幅で示した図。 告知が届く時点で、決定はもう終わっている 時間 ① ベンダーが検討 こちらには見えない ② ベンダーが決定 この時点で覆る余地は消える ③ 告知が届く ここからが現場の時間 選択肢の幅:広い まだ影響範囲を調べられないが、 「依存を把握しておく」ことだけはできる → 日常の棚卸しが、ここで効く(第7回) 選択肢の幅:狭い できるのは「どう適応するか」の選択だけ 移行・隔離・据え置きの3択に絞られる → だから告知前に期限を集めておく

🔍 検証③:依存の4層——自分の外側はどこまで続いているか

では、何の期限を集めればよいのでしょうか。自分のシステムの外側は、4層に分かれています。この4層を意識すると、棚卸しの抜けが減ります。

依存しているもの期限の例調べ方
① コード層ライブラリ・パッケージサポート終了、メジャーバージョンの廃止依存関係の一覧(package.json、requirements.txt 等)と公式のサポート方針ページ
② 実行基盤層言語処理系・OS・コンテナイメージ言語のEOL、OSのサポート終了、ベースイメージの更新停止各言語のリリーススケジュール、各OSのライフサイクルページ
③ 通信層TLS証明書、DNS、認証トークン、APIのバージョン証明書の有効期限、APIの廃止日、認証方式の変更証明書の期限一覧、外部APIの変更履歴(チェンジログ)
④ 契約・制度層クラウドの料金体系、ライセンス、法令ライセンス変更、料金改定、規制の施行日契約書、ベンダーの告知、規制の施行日

重要なのは、③と④は「コードの中」を見ても見つからないという点です。証明書の期限は設定ファイルやクラウドの管理画面にあり、ライセンスの期限は契約書にあります。コードを読んで分かる範囲には、これらの期限は存在しません。だから「コードはきれいなのに壊れる」という現象が起きます。

依存の4層構造と、期限を調べる場所を示す図 コード層・実行基盤層・通信層・契約制度層の4層を同心の帯として示し、各層の期限がどこにあるかを示した図。 自分の外側は4層。下の層ほど、コードを読んでも見えない ① コード層(ライブラリ) package.json / requirements.txt を見れば分かる。期限は公式サイトに公開されている 見つけやすい ② 実行基盤層(言語・OS・イメージ) Dockerfile / CI設定 / 本番サーバーの構成を見る。どのバージョンで動いているかを先に確定させる やや見つけにくい ③ 通信層(証明書・API・認証) コードには書かれていない。設定・クラウド画面・外部サービスのチェンジログに散らばっている 見落としやすい ④ 契約・制度層(ライセンス・料金・法令) 契約書と規制の施行日。エンジニアの担当外になりがちだが、影響は最大 見えない

🔍 検証④:3つの適応——移行・隔離・据え置き

外部起因の変更に対して、取れる手は3つしかありません。ここで大切なのは、「どれを選ぶかは経営判断であり、エンジニアの仕事は選択肢と代償を並べること」という点です。

選択やること向いているケース代償
移行新しいものに乗り換える期限が近い。長期で使う。代替が成熟している作業コスト。移行中の二重管理
隔離古いものを一部に閉じ込め、影響範囲を限定する全移行が間に合わない。一部だけ古いままでよい複雑さが増える。境界の維持コストが続く
据え置き期限を過ぎても使い続けると決めるシステムの寿命が短い。影響が小さいリスクを明示的に受け入れる(記録が必須)

3つ目を選ぶことは、悪ではありません。「知らないうちに過ぎていた」ことだけが問題です。据え置きを選ぶなら、次の3点を必ず記録します。第一に、いつからいつまで据え置くか。第二に、その間、何のリスクを受け入れるか(攻撃されたらどうなるか、止まったら誰が困るか)。第三に、誰がその判断をしたか。記録がなければ、あなたが数年後にその責任を負います。記録があれば、それは組織の判断として扱われます。

「隔離」は最も過小評価されている選択肢です。全部を移行できないとき、影響範囲を狭めて時間を稼ぐのは、立派な設計判断です。具体的には、古い依存を使う部分を1つのモジュールや1つのサービスに閉じ込める、間に変換用の層(アダプタ)を挟む、といった方法があります。第7回で扱う「前任者の遺産」でも、この隔離が中心的な技術になります。

隔離をアダプタの比喩で表した概念イラスト 古い機械と新しい機械の間に立ち、双方の言葉を通訳するアダプタのキャラクターを描き、移行できない部分を閉じ込めて時間を稼ぐ方法を示した図。 「全部移行できない」ときは、間に入って通訳させる 古い依存(期限切れ) ここだけ古いままにする アダプタ(変換の層) 新旧の違いをここで吸収する 新しい実装 ここは先に移行しておく 隔離の効き目:変更の影響範囲を「全体」から「1モジュール」に狭め、時間を買う 代償:複雑さが増え、境界を維持する規律が必要になる(それでも間に合わないより安い)

🔍 検証⑤:逆算のタイムライン——「いつ始めるか」は期限から決まる

期限が分かったら、次は「いつ始めるか」を決めます。ここで多くの人が間違えます。移行の作業量を過大評価して先延ばしにするか、過小評価して直前で慌てるかのどちらかです。正確な見積もりは困難なので、期限から逆算した締切を先に決めるのが実務的です。

期限までの残りその時点でやることこの段階を飛ばすと
18か月前依存の棚卸しと、期限の一覧化。影響範囲の調査選択肢が「移行」だけに絞られ、割高になる
12か月前移行方針の決定(移行・隔離・据え置き)。予算と人員の確保予算が下りず、翌年に作業者がいない
6か月前検証環境での移行テスト。自動テストの整備本番で初めて動かし、想定外が連発する
3か月前段階的な切り替え。並行稼働と戻し方の準備一括切り替えになり、失敗時に戻せない
1か月前残りの移行と、据え置き分の記録記録がなく、責任の所在が曖昧になる
期限当日何もしない(準備済み)朝から障害対応になる

この表の要点は、「18か月前にやることは、期限を知ることだけ」という点です。期限を知るのは、ほぼ無料です。しかし、期限を知らずに12か月を過ごすと、残り6か月で全部やることになります。差額は、ほぼ「知っていたかどうか」だけで発生します。

EOLまでの逆算タイムライン EOLの0か月前から18か月前までの各時点でやるべきことを、負担の変化とともに示したタイムライン図。 同じ作業でも、始める時点で「無料」から「障害対応」まで変わる 18か月前 期限を集める 一覧にする 負担:ほぼ無料 12か月前 方針を決める 予算と人員を取る 負担:小 6か月前 検証環境でテスト 自動テストを整える 負担:中 3か月前 段階的に切り替え 戻し方を用意する 負担:大 1か月前 残りを移行し 据え置きを記録する 負担:特大 期限当日 何もしない (準備済み) これが目標 逆に、期限を知らずに12か月を過ごすと、残り6か月で「6か月前〜当日」を全部やることになる しかも、その6か月の間に、他の仕事も障害も、予定どおり発生する 差額を生むのは、能力ではなく「先に知っていたかどうか」だけである

結果:EOL棚卸しの手順(4ステップ)

ここまでの内容を、実行できる手順に畳みます。

#手順具体的な行動所要の目安
1今動いているものを確定する本番で使っている言語・OS・主要ライブラリのバージョンを全部書き出す。「たぶん」を許さない半日〜2日
2期限を引く各公式サイトのライフサイクルページから、サポート終了日を写す。分からなければ「不明」と書く(空欄にしない)1〜2日
31枚の表にし、期限の近い順に並べる「名前/現行バージョン/期限/担当/次の行動」の5列。共有できる場所に置く半日
4四半期ごとに見直すカレンダーに定期予定として登録する。新しい依存を追加したら、その場で表に行を足す年4回・各1時間

この表の最大の価値は、判断を「今」から「期限の直前」に移せることです。エンジニアが最も消耗するのは、作業そのものよりも「いつか壊れる何かを、忘れたまま抱えている状態」です。一覧にして壁に貼れば、その不安は消えます。不安は、把握できないときに最も大きくなります

考察:外部起因の理不尽は「予報」できる唯一の理不尽である

第1回で、理不尽を技術・組織・制度の3つに分けました。この回で扱った外部起因の仕様変更は、この3つの中でも、最も「予報」が効くものです。天気に例えるなら、台風です。いつ来るかは予報に出ます。進路も分かります。被害をゼロにはできませんが、被害を小さくする準備はできます

対して、組織の理不尽(第4回〜第6回)は予報が難しく、制度の理不尽は予報以前に前提です。つまり、この回の内容は「コストが低く、効果が確実な対策」です。何より、外部起因の理不尽は、努力ではなく段取りでほぼ解決できます。これは、シリーズ全体の中で数少ない「確実に勝てる戦い」です。

そしてもう1つ。外部起因の変更は、あなたの技術力を試す場でもあります。CentOS 8 の話でも Terraform の話でも、移行を実行した現場のエンジニアは、新しい環境での設計判断を大量にこなしました。理不尽は、準備していた人にとっては学習の機会になり、準備していなかった人にとっては障害対応の夜になります。同じ出来事が、です。

📌 注目ポイント

第一に、外部起因の破壊には3種類(EOL・一斉に切れる期限・脆弱性)があり、それぞれ壊れる速さと事前に気づけるかが違うことです。第二に、EOLは「その日に壊れる」のではなく「その日から修復不能になっていく」こと。静かに進行するからこそ危険です。第三に、依存は4層(コード・実行基盤・通信・契約制度)あり、下の層ほどコードを読んでも見えないこと。第四に、取れる手は移行・隔離・据え置きの3つだけであり、据え置きを選ぶなら記録が必須であること。

💡 活用事例(脚色):証明書が切れる日を知っていたチームと、知らなかったチーム

※Reddit や Hacker News で繰り返し共有されてきた複数の体験談をモデルにした脚色(フィクション)です。

同じ会社の、隣り合う2つのチームの話です。

Cチームは、外部の決済サービスと連携していました。あるとき、リードエンジニアが「この連携、証明書の期限が1年後だ。更新手順を確認しておこう」と提案しました。作業は2時間で終わりました。やったことは3つ。連携先の証明書の期限を調べて表に書く。更新が必要になったときの連絡先を確認する。切れた場合に何が止まるかを、運用チームと共有する。コードは1行も変えていません。

Dチームも、別の外部サービスと連携していました。Dチームは多忙でした。新機能の開発が3本走っており、EOLの棚卸しは「落ち着いたらやる」と先延ばしになっていました。

1年後、Cチームの連携先の証明書が切れました。切れる1か月前に連携先から告知があり、Cチームはあらかじめ確認していた手順で2時間で更新しました。誰も気づきませんでした。何も起きなかったので、Cチームは褒められませんでした。

同じ週、Dチームの連携先で認証方式が変わりました。Dチームは告知メールを見落としていました(担当者が異動しており、メーリングリストの宛先が古かったためです)。金曜の夕方、連携している機能が全停止しました。復旧は月曜の昼までかかりました。週末に2名が出勤し、取引先に謝罪し、原因調査の報告書を書き、再発防止策として「EOL棚卸しをやる」と決めました。Dチームは、Cチームが1年前に2時間でやったことを、1年遅れで、週末勤務つきでやることになったのです。

この2チームの差は、能力ではありません。 Dチームのエンジニアのほうが優秀だった可能性すらあります。差は、「棚卸しを、やるべき仕事として先に予定に入れていたか」だけです。外部起因の理不尽は、「落ち着いたらやる」と言っている限り、永遠に来ません。落ち着く日は来ないからです。だから、落ち着くのを待たずに、予定に入れる必要があります。

✅ 要点まとめ

この回の内容は、覚えるべき知識ではなく、そのまま作業手順になるものです。期限を見つけた時点で、この一覧に戻ってください。

  • 「何も変えていないのに壊れる」の大半は、期限(他人のカレンダー)を見ていなかっただけであり、予防できる。
  • 壊れ方は3種類。EOL(遅い・事前に分かる)/一斉に切れる期限(速い・事前に分かる)/脆弱性(速い・公表まで分からない)。
  • EOLを過ぎても動き続けるのが罠。動かなくなる前に、修正されなくなり、調達できなくなり、人がいなくなる。
  • 決定はいつも相手の事業戦略で行われ、告知は決定済みの状態で来る。受け取った時点で選べるのは適応だけ。
  • 依存は4層。③通信層と④契約層は、コードを読んでも見つからない
  • 取れる手は移行・隔離・据え置きの3つ。隔離は最も過小評価されている。据え置きは記録とセットでのみ許される。
  • 18か月前にやることは「期限を知る」だけ。ここを飛ばすと、残り6か月で全部やることになる。
  • 外部起因は予報できる唯一の理不尽。準備した人にとっては学習の機会、しない人にとっては障害対応の夜になる。
  • 不安は、把握できないときに最も大きくなる。一覧にすることが最大の対策。

🚀 取り込み方:明日から使う3段階

今日(30分でできること):自分の担当システムで使っている言語・フレームワーク・OSのバージョンを、3つだけ書き出してください。次に、そのうち1つの公式サイトで「ライフサイクル(Lifecycle / Support policy)」のページを開き、サポート終了日を確認します。1つ分かるだけで、この作業が想像より軽いことが分かります。

今週(小さく試すこと):上の4ステップのうち、ステップ1と2を担当範囲だけでやってみてください。表は「名前/現行バージョン/期限/担当/次の行動」の5列です。分からない欄は「不明」と書きます。空欄にしないことが重要です。「不明」は調べる対象ですが、空欄は忘れられます。

今月(仕組みにすること):できた表を、チームが必ず見る場所(スプリントのボード、共有ドキュメント、Wiki など)に置き、四半期ごとの見直しを予定表に登録してください。あわせて、証明書とドメインと外部APIの期限だけを集めた「③通信層の一覧」を別途作ります。この2枚の表が、あなたのチームの初期の防災マップになります。

🔥 ハマりポイント

その1:「まだ動いているから大丈夫」と判断する。 EOLはその日に壊れません。だから「動いている」という証拠は、何の安心材料にもなりません。判断すべきは「動いているか」ではなく「期限から何か月経ったか」です。EOL後1年を超えたら、新しい環境で再現できないリスクが急に上がります。

その2:棚卸しを「落ち着いたらやる」と先延ばしにする。 落ち着く日は来ません。棚卸しは、「落ち着いてからやる仕事」ではなく「落ち着くために予定に入れる仕事」です。半日で終わる作業が、1年後には週末勤務になります。第1回の「記録」と同じで、その日のうちにやるから安いのです。

その3:据え置きを「何もしない」と同一視する。 据え置きは立派な経営判断になり得ますが、記録を伴わない据え置きは、単なる先送りです。後で問題になったとき、あなたの判断なのか組織の判断なのかが分からなくなります。「いつまで・何のリスクを・誰が承認したか」の3点を、その日のうちに書いてください。

その4:依存の期限を、コードの中だけ探す。 ③通信層と④契約層の期限は、コードの中にありません。探す場所を間違えると、「全部調べたのに漏れた」が起きます

🔄 比較:4つの対策アプローチと、それぞれの代償

アプローチやること向いているケース代償
手動の棚卸し表表を作り、四半期ごとに人が見直す依存の数が少ない。まず始めたい人の記憶に依存する。担当者が異動すると止まる
依存管理ツール自動で依存と脆弱性を検出するコード層の依存が多い③通信層・④契約層は検出できない。アラートが多すぎて無視される
SBOM の生成ソフトウェア部品表を自動生成し、保管する監査・調達の要求がある。供給網が複雑生成しても、期限を判断する仕組みは別に必要
隔離(アダプタ層)外部依存を1か所に閉じ込める変更が頻繁な外部サービスを使う実装が増える。境界を維持する規律が必要

組み合わせが実務的です。 コード層はツールで自動化し、③通信層と④契約層は手動の表で補う。この分担が、最も費用対効果が高いと考えられます。

📅 今後の展望:2026年に向けた期限の動向

外部起因の仕様変更は、これからも続きます。特にジュニアエンジニアが知っておくべき動向を3つ挙げます。

第一に、OSとミドルウェアの一斉更新です。Windows 10 は2025年10月14日にサポートが終了しました(Extended Security Updates を除く)。Ubuntu 20.04 LTS は2025年5月に標準サポートが終了し、22.04 LTS も2027年4月が期限です。「会社のPCがまだWindows 10」という現場は珍しくありません。これは開発環境全体の更新を意味します。

第二に、ライセンスモデルの変更が定着しつつあることです。HashiCorp の事例以降、いくつかの製品で同様の方針転換が続いています。「無償で使えていたものが、有償になる」は、これからも起きます。技術選定の時点で、ライセンスの将来性を確認する習慣が必要です。

第三に、言語とフレームワークのサポート期間が短くなる傾向です。Node.js は偶数バージョンがLTSとして扱われ、サポート期間はおおむね30か月です。Python や Java の長期サポート版に乗り換えておくほうが、結果的に安定します。「新しいものを使う」より「長く支えられるものを選ぶ」が、外部起因の理不尽に対する最も実務的な防御です。

まとめ

外部起因の仕様変更は、あなたの落ち度ではありません。あなたの外側の都合で決まります。そして、決定はいつも相手の事業戦略で行われ、こちらには適応だけが残されます。だから、この理不尽は「避ける」のではなく「予定に入れる」ことでしか対処できません。

やることは3つだけです。期限を集める1枚の表にする期限から逆算して予定に入れる。この3つは、18か月前ならほぼ無料で、6か月前なら残業になり、当日なら障害対応になります。

ここまで読んだあなたは、自分の担当システムの期限を、今日1つだけ調べられるようになりました。明日は3つ調べてください。その1週間後には、あなたのチームには「いつ何が壊れるか分かっている人」が1人いる状態になります。理不尽に強いチームと弱いチームの差は、能力ではなく、この1人から始まります。

ジュニアエンジニア向け 理不尽との付き合い方 ── 全8回の一覧
いま読んでいるのは 第2回 です。読みたい回から始めても構いません。
  1. 第1回:全体地図:理不尽は「型」で見れば予測できる
  2. ▶ 第2回:外部起因の仕様変更:昨日動いたものが、今日動かなくなる(この記事)
  3. 第3回:内部起因の仕様変更:「ついで」に現場が壊される理由
  4. 第4回:社内政治:正しいだけでは通らない意思決定の作法
  5. 第5回:パワハラ:境界線の引き方と、記録という盾
  6. 第6回:評価と処遇:頑張りが反映されない構造を分解する
  7. 第7回:過去の負債:前任者の遺産を、壊さずに直す
  8. 第8回:総括:理不尽に飲まれないための4つの資本

参考文献

  1. CentOS Project. “CentOS Linux 8 EOL.” https://www.centos.org/
  2. Red Hat. “CentOS Stream: Frequently Asked Questions.” https://www.redhat.com/
  3. AlmaLinux OS Foundation. https://almalinux.org/
  4. Rocky Linux. https://rockylinux.org/
  5. HashiCorp. “HashiCorp adopts Business Source License.” 2023. https://www.hashicorp.com/
  6. OpenTofu. “OpenTofu: The open source infrastructure as code tool.” https://opentofu.org/
  7. Linux Foundation. “OpenTofu joins the Linux Foundation.” 2024. https://www.linuxfoundation.org/
  8. Python Software Foundation. “PEP 373 / PEP 404: Python 2.7 Release Schedule and Sunset.” https://peps.python.org/
  9. OpenSSL. “OpenSSL 1.1.1 End of Life.” 2023. https://www.openssl.org/
  10. Let’s Encrypt. “DST Root CA X3 Expiration (September 2021).” https://letsencrypt.org/
  11. NIST. “CVE-2021-44228 (Log4Shell).” National Vulnerability Database. https://nvd.nist.gov/
  12. IETF. “RFC 8996: Deprecating TLS 1.0 and TLS 1.1.” 2021. https://www.rfc-editor.org/
  13. Microsoft. “Windows 10 support ends on October 14, 2025.” https://www.microsoft.com/
  14. Canonical. “Ubuntu release cycle / LTS support.” https://ubuntu.com/
  15. Node.js. “Releases: Node.js Release Working Group (LTS schedule).” https://nodejs.org/
  16. CycloneDX / SPDX. “Software Bill of Materials (SBOM) standards.” https://cyclonedx.org/ , https://spdx.dev/

© Copyright 2005-2026| Rui Software | All Rights Reserved