読者です 読者をやめる 読者になる 読者になる

ブルーマン総合研究所

レポートはこまめに取るようポケモンで学んだでしょ!

【ライザップじゃないよ!】チームプログラミングにおける「コミット」の概念を知る

お久しぶりです。所長です!

 

所長と言っても普通のSIerで働く新入社員なんですけどね、、、笑

 

最近携わっているアプリ開発案件がプログラミング(以下PG)フェーズに入り、EclipseJavaやらHTMLやらをカタカタと作り始めました。やっといかにもIT企業らしい仕事に突入したのです。

 

自分の担当モジュールを割り当てられ、ひたすらそのPGに没頭するわけですよ。

 

しかし、この時僕は重大な意識を忘れていました、、、

 

 

それは「チームでプログラミングをしている」という意識です。

 

f:id:blueMountLab:20170216231616p:plain

 

 

少人数のチームだとモジュール担当を人毎でしっかり分けて実施するのかもしれませんが、今僕は80名規模の大きなチームで開発をしています。

モジュールによっては単体に対して複数人がPGに携わっていることがあります。

 

そこで発生が考えられる問題が「競合・衝突」です。

複数人が同時に一つのファイルのPGを行うと、誤って他のプログラマーが更新した情報を上書き・消去しかねません。

 

それに対する解決策が「バージョン管理システム」及びそれに対する「コミット」なのです。

 

ちょいとWiki先生のお言葉を拝借致します。

バージョン管理システムはデータベースの一種であり、他者から自身の更新が見えるようにするという意味で「コミット」という用語を使用している。

 

もう少し嚙み砕いて説明します。

・「コミット」とは自分の作業したファイルをデータベースに反映させることを指します。

・「バージョン」とは複数人が一つのファイルに対しコミットする際に、各人の作業を番号付けして誰がどんなPGをしたか明確にする仕組みを指します。

・「バージョン管理システム」とは大量のファイル一つ一つを誰がコミットしたか把握し、随時バージョンを割り振っていくシステムのことを指します。CVSSVNが代表的なバージョン管理システムです。

データの最新状態を保持する格納庫の部分を「リポジトリ」と言います。

 

更にWiki大先生のお言葉を拝借致します。

リポジトリにコミットすることで、リポジトリにすでに入っている情報と更新したファイルとの差分をとり、リポジトリに更新差分だけがアップロードされる。
他のユーザーが更新した情報が上書き消去されることを避けるため、コミットする前にアップデートを実行して、自分の作業領域を最新状態に保つことが推奨されている。

 

ここまでのことを要約すると、

複数人でPGをする時はバージョン管理システムを使って、リポジトリから最新のファイルバージョンにアップデートした上で自分の作業をコミットする必要がある。

 

はたから見ると意識高い系のカタカナ羅列にしか見えない、、、笑

 

 

まぁ、

当然そんなことを知りもしない新入社員の僕は自分の担当PGを終え、

「ふぅ~。一仕事してやったぜ。」

と悦に浸っているわけです。メンバーのことを考えずに。

 

すると開発メンバーが鬼のような形相でこちらへ走ってくるではありませんか。

 

「(所長の名前)さん!!担当してるモジュールと他メンバーとの差分がとんでもないことになってますよ!!このままだとアプリが正常に機能しなくなってしまいます!!(怒)」

 

 僕「、、、ファッ!??」

 

 コミットの概念を知らなかった僕は最新のファイルバージョンにアップデートすることなく、一人で全く違うベクトルのPGをしてしまっていたのです。

 

もうその日は一日中、他のコミットメンバーに謝罪してリポジトリーと自分の修正分とのマージに追われました、、、。

 

定時前からの時間も含め6時間近く残業をした僕はもう帰宅即寝でした、、、笑

 

とても苦い思い出でしたが、これでチームプログラミングにおけるコミットの重要性を身に染みて体感できた貴重な機会でもありました。(もう嫌だけど、、、笑)