Unit 09-01(STAGE 09 の 1 / 8)

同時に100人がコードを変更したらどうなるか

学習状況:未着手

このユニットの結論

大勢の人が同じプログラムを同時に変えると、変更どうしがぶつかり、誰かの変更が消えたり、組み合わせたときに動かなくなったりします。

作業を小さく分け、作業ごとに別の写しで変更し、決まった手順で1つずつ取り込み、取り込む前に別の人が確かめる。この仕組みがあって初めて、大勢でも安全に開発を進められます。

1. 何の話か

このユニットは、大勢で同じプログラムを変更するときの進め方の話です。

大規模な開発では、多くの人が同じプログラムの集まり(ソースコード)を、同じ時期に少しずつ変えていきます。題名の「100人」は、大勢で同時に作業する状態のたとえです(アステリア案件の規模は、下の CASE FACT のとおり約120人規模のプロジェクトです)。

経理にたとえると、1つの表計算のファイルを大勢で同時に開き、それぞれが直して上書き保存している状態です。

2. なぜ必要か

進め方を決めずに大勢で変更すると、

ということが起きます。人数が増えるほど、こうした事故は起きやすくなります。

3. このユニットで分かること

4. 基本の仕組み

一般的には、変更の履歴を残すバージョン管理という仕組みを使います(よく使われる道具に Git があります)。

用語 意味 たとえ
バージョン管理 誰が、いつ、何を変えたかの履歴を残す仕組み 文書の改訂履歴
本流 みんなで共有する、正式なプログラムの状態 原本
ブランチ(作業用の写し) 本流から分けて、自分の作業をするための写し 原本をコピーした下書き
取り込み(マージ) 写しで行った変更を、本流に反映すること 下書きの修正を原本に反映
競合(コンフリクト) 同じ箇所を2人が別々に変え、自動では合わせられない状態 2人が同じ段落を別々に直した
取り込み依頼 取り込む前に、別の人に確かめてもらう依頼 決裁の回付

写しで作業するので、作りかけの変更が本流に入らず、ほかの人の作業を止めません。

5. ぶつかりを減らす作業の分け方

ぶつかり(競合)をゼロにすることはできません。減らし、早く見つけることを目指します。

6. 取り込みまでの手順(一般的な例)

  1. 本流から、作業用の写しを作る
  2. 写しで変更し、自分で確かめる
  3. 自動テストで確かめる(09-04 自動テストと自動配布)
  4. 取り込み依頼を出し、別の人が変更の差分をレビューする(09-02 コードレビューは何を見るのか)
  5. 本流に取り込む
  6. 取り込んだあとの本流が動くことを確かめる

手順を人によって変えないことが大切です。

CASE FACTFROZEN正本に記載されたアステリア案件の事実

アステリア案件の開発に関係する記載

  • 約120人規模のプロジェクト
  • マルチベンダー
  • Vendor A / ネクサスシステムズ — 新基幹アプリケーション
  • Vendor B / クラウドブリッジ — クラウド基盤、ネットワーク、IAM、連携、CI/CD、監視
  • システムに SYS-09 開発・CI/CD基盤がある
  • 成果物に DEV-001 Git・ブランチ運用方針、DEV-002 開発・レビュー標準がある

アステリア案件で、何人が同時にプログラムを変更したか、チームの分け方、写しの作り方と取り込みの規則、レビューの規則は、正本に記載がありません。未確定

7. THINK — 「自分の変更のほうが新しいので」

取り込もうとしたところ、競合が出ました。締め切りが迫っていた担当者は、「自分の変更のほうが新しいので、自分の方を残す」を選んで取り込みました。

問題

この進め方でよいでしょうか。

判断例を開く

判断

よくありません。

確認すること:

  • 消えた側の変更は、何のための変更だったか
  • 相手の担当者と話したか
  • 両方の目的を満たす形に合わせられないか
  • 合わせたあとの変更を、テストとレビューで確かめたか

競合は、「どちらが新しいか」ではなく、両方の変更の目的を確かめて解きます。

8. よくある失敗

9. 成果物との接続

10. AI WORKFLOW — 作業の重なりを洗い出させる

AIは、作業中の変更の一覧から、ぶつかりそうな組を探す下書きに役立ちます。

指示例:

「次の作業中の依頼の一覧(依頼ごとに変更しているファイルの一覧つき)を見て、同じファイルを変更している依頼の組を挙げてください。どちらを優先するか、どう合わせるかは提案しないでください。」

11. REVIEW — AIの洗い出しを確認する

  • AIが挙げた組を、実際の変更の一覧で確かめたか
  • 同じファイルでなくても、関係する変更(ある画面と、その画面が使うデータの定義など)が漏れていないか
  • 競合の解き方を、AIの案のまま採用していないか

12. 人間が判断すること

  • 作業の分け方と、担当の割り当て
  • 競合を解くとき、どちらの目的を優先するか(業務の判断が必要なときは業務の担当に確かめる)
  • 取り込み依頼を承認するか
  • 取り込みの規則に例外を認めるか

13. 判断演習

あなたは開発チームのリーダーです。別のチームと、同じ画面の別の機能を、同じ時期に変更することが分かりました。

ぶつかりを減らすために、作業を始める前に相手のチームと決めておくことを3つ挙げてください。

あなたの記録あなたの考え。事実ではありません

判断ノート

既定では保存しないため、ページを離れると消えます。

このユニットで覚えてほしいこと

大勢で変更するときは、小さく分け、写しで作業し、決まった手順で1つずつ取り込み、取り込む前に別の人が確かめる。

競合は、どちらが新しいかではなく、両方の目的を確かめて解きます。

次に読むもの

本文で参照している成果物:DEV-002 開発・レビュー標準、DEV-001 Git・ブランチ運用方針

関連成果物:未確定(baselineに対応表なし)

関連危機演習:未確定(baselineに対応表なし)

学習状況

状態:未着手