SlideShare a Scribd company logo
1 of 32
Download to read offline
1 
Copyright (C) Masanori KataokaAll Rights Reserved. 
ソフトウェア変更歴管理・ バージョン管理ツール 
2014年8月22日 
片岡雅憲 
2014/8/27 
アジャイルツール適合化分科会(第1回)資料
2 
Copyright (C) Masanori KataokaAll Rights Reserved. 
<内容> 
1.ソフトウェア構成管理技術とは 
2.変更歴管理、そしてバージョン管理 
3.Subversion 
4.Gitと分散バージョン管理 
<参考文献>
3 
Copyright (C) Masanori KataokaAll Rights Reserved. 
ソフトウェア構成管理技術は、ソフトウェアの開発に必要とされるリ ソースを統合的に管理する技術である。 
この技術は、次の技術から構成され、発展してきた。 
1)ソフトウェアリソースを開発チームのメンバー間で共有し、その 
変更履歴を管理する技術。また、この変更履歴とバージョンとの 
関係を管理する技術。 
2)ソフトウェアの開発プロセスおよびビルド(作成)プロセス、デプロイ 
(提供)プロセスを自動化する技術。また、これらプロセス間を 
POM(Project ObjectModel)モデルに基づき相互接続し、ワーク 
フロー化する技術。 
3)上記ワークフローを反復型プロセスに発展させ、その自動化を含 
めて総合的に改善するCI(Continuous Integration)および 
CD(Continuous Delivery)技術。
4 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.1変更歴管理の重要性 
ソフトウェアは、その開発の過程においても、また、運用・保守の段階 に入っても、頻繁に変更される。この変更を記録し、過去を復元するた めに変更歴管理は重要である。 
1)失敗に気付いた場合に(不良を検出した場合を含む)、失敗を検討・ 
修正するための過去の状態に戻れる。いわば、タイムマシンであり、 
過去のいかなる時点にも戻れる。 
2)同一のコードに対して、複数の開発者が、管理された方法で並行 
アクセスし、チームによる共同開発が出来る。 
3)既にリリースされたコードを保守しながら、最新のコードの開発を 
並行して進めることが出来る。 
4)変更の経時的な記録が残される。変更の理由、回数等の情報が 
後で利用出来る。
5 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.2ソースコード変更歴管理からバージョン管理へ 
ソースコード変更歴管理技術は、より論理的な単位を扱うバージョン 管理技術へと発展していった。 
1)ソースコードを個人の所有物としてではなく、開発チームメンバー 
全員による共有リソースとして扱う。 
2)単に断片的なソースコードの変更差分を扱うのではなくて、タグに 
よりグループ化する。また、ソースコードの論理的時系列集合であ 
るコードラインを管理するようにする。 
3)コードラインおけるメインライン(トランク)とブランチとを設けて、 
並行作業が出来るようにする。これにより、空間的、時間的に分散 
したチーム間の協業を可能とする。 
4)ソフトウェアのリリースにあたり、ブランチを使ってリリースし、メイ 
ンラインは開発を継続できるようにする。 
5)ブランチの変更は、テスト完了後に、メインラインの変更へマージ 
する。
6 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.3バージョン管理上の留意事項 
1)出来るだけ頻繁にチェックイン(Commit)する(1~数回/日)。これに 
より、失敗した時に着実に回復出来る。 
2)基本的にメインラインにチェックインする。ブランチにチェックインした 
場合は後で、再度メインラインにチェックイン(マージ)することになる。 
後者の方法は、CI(ContinuousIntegration)の考え方と相容れない。 
3)チェックインのメタデータ(変更理由の説明等)を、分かり易く記述す 
る。不良修正等については、これがなおざりになりがちなので注意が 
必要である。 
4)あらゆるリソース、およびそれに関する情報をバージョン管理下に 
おき、旧バージョンが環境も含めて確実に再現出来るようにする。 
5)リリースをする場合に、ブランチを作成して、そのブランチ上でリリー 
スする。リリースしたものの不良はブランチ上で修正する。そしてまた、 
メインライン上にも修正をフィードバックする。
7 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.3バージョン管理上の留意事項(続き) 
6)大規模な機能の追加や変更を行う場合に、ともすると、メインライン 
に迷惑をかけたくないとの理由でブランチを作りたくなる。しかし、 
現実にはブランチを作ることは容易でも、これをメインラインにマージ 
するのには大変な苦労が伴う。大規模な追加、変更であってもメイン 
ライン上でコツコツと着実に進めた方が結局は早道である。 
7)ブランチ上でリファクタリングを行った場合には、このブランチを 
メインラインにマージするのに苦労することが多い。
8 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.4 バージョン管理システムの歴史 
バージョン管理システム発展の歴史を、次に概説する。 
1)SCCS(Source Code Control System): 
1972年にIBMSystem/370上にベル研Marc J.Rochkindが 
開発、その後、UNIX上に移植される。バージョン管理システムの 
元祖とも言うべきツール。 
2)RCS(Revision Control System): 
パデュー大学で1980年代に開発、その後、GNUソフトに組み 
入れられた。複数ユーザは扱えない。 
3)CVS(Concurrent Version System): 
RCSをベースに、①クライアントサーバ機能②ブランチ、タグ機能 
等を強化した。ネットワーク上で複数ユーザを扱うことが出来る。 
Dick Gruneが開発し、1986年にオープン化、1988年に 
B. BerlinerがC環境に移植した。
9 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.4 バージョン管理システムの歴史(続き) 
4)Subversion: 
CVSの問題点を解決するものとして、K. Fogel, BenCollins- 
Sussman他により開発され、2001年に公開された。彼らは、CVS 
に精通しており、コマンドはCVSに合わせてあることから、CVSを置 
き換えて急速に普及した。 
RCS, CVSでは、管理の基本単位がファイルになっていて、これ 
が処理時間の長さや、排他制御機能の限界の要因になっている。 
Subversionは、管理単位をリビジョン(変更差分)としており、このよ 
うな課題を克服している。 
Subversionは、集中管理方式の開発では、優れたものになって 
いて、現在最も多く使われている。しかし、分散型開発のバージョン 
管理では限界がある。これには、Git等の分散型バージョン管理 
システムが必要である(Gitについては後述)。
10 
Copyright (C) Masanori KataokaAll Rights Reserved. 
2.4 バージョン管理システムの歴史(続き) 
5)Git: 
Linuxカーネルの開発においては、分散バージョン管理ツールで 
あるBitKeeper が使われていた。BitKeeperは、商用ツールであった 
が、無料版も配布していて、これを使っていた。しかし、2005年春に 
無料版の条件を厳しくしたために、Linuxでは継続使用が不可能に 
なった。 
BitKeeperの代替品を探したが適切なものがなく、Linuxプロジェクト 
のリーダーであるLinus Torvaldsと同僚の濱野純の2人が中心となっ 
て、Gitの開発を始めた。開発開始後、3か月経った2005年7月には、 
当初バージョンが開発、公開され、その後、オープンソフトウェア 
コミュニティの中で急速、かつ着実に改良が加えられ、ユーザ数を 
増やしていった。
11 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.1 Subversionの長所 
RCS, CVSにはないSubversionの長所は次のとおり。 
1)ソースコードだけでなく、いかなるファイル、ディレクトリ、オブジェク 
トファイル、メタデータも管理出来る。 
2)ファイル、ディレクトリの追加、削除、コピー、名称変更が可能。 
3)クライアントサーバ方式、ネットワーク対応、複数人でのファイル 
共有が可能。変更において、アトミックなコミットにより、排他制御が 
出来る。 
4)差分管理が可能である。転送、格納にてデータが圧縮されていて、 
性能に優れている。 
5)ブランチ、タグの作成、マージが軽快である(性能に優れている)。 
6)広範囲のプラットフォームをサポートしている。 
3.Subversion
12 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.2 Subversionによるバージョン管理の方法 
Subversionにおいては、全てのリソースをリポジトリで集中管理 
する。 
1)リポジトリの内容に操作を加える場合は、リポジトリから各作業者の 
作業領域に必要な部分をコピーする。これをチェックアウト(Check 
out)と呼ぶ。そして、この作業領域において必要な変更・追加等の 
操作を加える。 
2)テスト等による確認の後、上記を正式のものとして、リポジトリに 
反映して保存する場合は、コミット(Commit)する(チェックイン 
(Check in)と言う場合もある)。 
3)このように、作業領域での操作と、リポジトリへの正式なコミットを 
分けることにより、リポジトリを複数の開発者間で共有することを可能 
とする。これにより、高い品質を維持することが出来る。
13 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.3 Subversionにおけるリビジョン番号の付与方法 
1)RCS, CVSでは、ファイル単位に固有の番号付けが行われている。 
すなわち、そのファイルが変更される度に番号が上がる。従って、 
番号はそのファイルの変更回数を表す。 
2)Subversionでは、リポジトリ全体に対するリビジョン番号が付けられ 
る。したがって、プロジェクトの何かが変更されれば、リビジョン番号 
は更新され、変更されていないモジュールのリビジョン番号も更新 
されることになる。 
3)このリビジョンを指定することにより、ある時点でのプロジェクトの 
すべてのソースコードを正確に入手できる。 
4)一方、このように自動的に付与されたリビジョン番号はとても覚え 
にくい。そのような場合は分かりやすいタグを付与することが出来る。
14 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.4 ブランチとタグ 
1)Subversionのディレクトリには、①トランク、②タグ、③ブランチ 
の3つのサブディレクトリがある。トランクは、開発のためのメインライ 
ンのコードである。 
2)タグは、特定のリビジョンにタグ名称を付けたものである。リビジョン 
番号は、Subversionが自動的に付与したもので憶えにくいが、タグ 
は開発者にとって意味のある覚え易い名称とすることが出来る。タグ 
は、読み取り専用であることが一般的であるが、それだけでなく、これ 
を更新していくことも出来て、次に述べるブランチと同じような扱いが 
出来る。 
3)ブランチはトランクから分岐させたもので、一般には、主たる開発を 
トランクで継続的に行い、ブランチではリリースしたバージョンの保守 
等を行う。
15 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.4 ブランチとタグ(続き) 
4)ブランチとしては、次のものがある。 
①リリースブランチ:リリースしたものの保守 
②リリース準備ブランチ:リリース準備作業が大きい場合 
③ベンダーブランチ:第3者のソースをトランクと別に管理 
④タスクブランチ:メインへ大影響を及ぼす変更に対応 
⑤トピックブランチ:分散開発においてチケット対応の開発を行う
16 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.5 Subversionにおけるロック方式 
ソースコードの同じ個所を二人が同時アクセスして更新すると、 
競合が生じてコードの内容が不正なものになる可能性がある。競合 
を防ぐためのロック方式として次がある。 
A.厳格なロック(strict lock) 
B. 楽観的ロック(optimistic lock) 
上記A.の方式では、誰かがチェックアウトするとこの人がチェックイン 
(コミット)するまで、ファイル全体にロックが掛けられて読み取り専用 
になり、更新出来ない。 
一方、B.の方式では、複数人がチェックアウト出来るが、誰かが 
チェックインした場合は、その更新内容を再度とり込んで、その上に 
自分の変更分を加えてチェックインする。 
Subversionは、B.の楽観的ロック方式を採用している。
17 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.6 Subversionにおけるプロジェクトの作成 
Subversionでは、ソフトウェア資産をプロジェクト単位に管理し、その 概要は次の通りである。(参考文献4)) 
1)プロジェクトとは何か 
プロジェクトと呼ばれるものの中には、一人で1~2週間で作り上げ 
てしまうものや、数百人で2~3年を掛けるものまで多様なものが 
あるが、基本的に次の特性を備えている。 
a) プロジェクトは名称を持っている。独立した実体として識別される 
ものである。 
b) プロジェクトは業務目標を持っている。この目標達成のためにプロ 
ジェクトの構成要素は連携し、結合する。 
c) プロジェクトは一つのまとまりとして保守され、その一つのバージョ 
ンがまとまった形でリリースされる。 
d) プロジェクトの素材は共通の技術標準とガイドラインを共有し、 
共通のアーキテクチャを使う。
18 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.6 Subversionにおけるプロジェクトの作成(続き) 
2)プロジェクトの構造 
Subversion配下で作るプロジェクトの構造の例を、図3.1に示す。 
その概要は下記の通りである。 
a) サブディレクトリとして、①トランク、②タグ、③ブランチがある。 
(3.4 を参照) 
b) 最上位のファイルとして次がある。 
-README:このプロジェクトについての簡単な説明 
-BUILDING:このプロジェクトを再構築するための説明 
-GLOSSARY:このプロジェクトで使われる専門用語
19 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.6 Subversionにおけるプロジェクトの作成(続き) 
2)プロジェクトの構造(続き) 
c) 最上位のディレクトリとして、下記がある。 
ーdoc/プロジェクトに関連するドキュメントを格納する 
-data/ プロジェクトに関連するデータを格納する 
-db/ プロジェクトでデータを扱う場合に、全ての 
スキーマ関連の要素をここに格納する 
-src/ プロジェクトのソースコードを格納する 
-util/ プロジェクト固有のユーティリティプログラム、 
ツール、スクリプトを格納する 
-vendor/ サードパーティ製のライブラリ(バイナリ)等を 
使う場合は、ここに格納する 
-vendorsrc/ 上記のソースコードを格納する
20 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
Sample/ 
tags/ 
trunk/ 
README 
BUILDING 
GLOSSARY 
branches/ 
doc/ 
src/ 
build.xml 
util/ 
vendor/ 
vendorsrc/ 
client/ 
A.java 
B.java 
server/ 
Y.java 
Z.java 
lib/ 
junit.jar 
spring.jar 
junit/ 
spring 
図3.1Sampleプロジェクトの構造(参考文献4))
21 
Copyright (C) Masanori KataokaAll Rights Reserved. 
3.Subversion 
3.7Subversionにおけるコードの共有 
組織内外の他のプロジェクトとコードを共有したくなることがある。 Subversionでは、コードの共有手段として次の3つを用意している。 
1)上位プロジェクトによるコードの共有 
共有するべきコードを上位プロジェクト配下に置き、開発者はこれを 
自分の作業領域にチェックアウトする。数が多くなると管理が煩雑に 
なる。 
2)外部項目(externals)によるコードの共有 
externals属性を使うと別のディレクトリの内容を自分の作業コピー 
に取り込める。チェックアウト時にリストを指定することにより自動的 
に取り込める。 
3)サードパーティ製のコードの取り込み 
vendorsrc/ 配下に置くことにとってとり込むことが出来る。
22 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.1 Gitの概要 
Gitは、Linuxのソースコード管理を目的として、Linuxの開発リーダで あるLinus Torvaldsとその同僚である濱野純により開発された。 
分散型バージョン管理システムであるのが特徴である。分散環境で の変更管理はローカルなリポジトリを使って行われる(リモートのセント ラル・リポジトリにアクセスしないで行われる)。 
データの圧縮に工夫をしていて、Subversionに比較して動作性能が 格段に優れている。
23 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.2 Gitの特徴 
Gitの特徴として次があげられる。 
1)分散開発を容易にする。中央リポジトリと同期をしていなくても、 
分散リポジトリで独立して、並行開発が出来る。 
2)何千人もの開発者を扱える。 
3)高速で効率良く動作する。データ容量を節約して、転送時間を短縮 
するための、データ圧縮技術、差分管理技術が優れている。 
4)SHA1という暗号学的ハッシュ関数を用いて、全てのオブジェクトの 
IDをユニーク化して、完全性や信頼性を維持している。 
5)分岐して、分散開発した後の、マージ処理を容易に行うための機能 
を備えている。
24 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.3 分散バージョン管理の仕組み 
1)分散リポジトリ 
Subversion等の従来型のバージョン管理システムでは、集中型 
リポジトリにより、すべてのデータをセンタに集中管理して、これを 
ネットワーク等を経由して共有させる。 
Gitでは、ユーザ各人が専用のローカルリポジトリを持つ。ユーザは、 
センターとのネットワーク接続が切断された状態であっても、ローカル 
な作業は継続できる。そして、必要な時にセンターリポジトリにコミット 
して同期を取る。 
2)何を格納するか 
Gitでは、ソースコードだけでなく、そのプロジェクトで必要とされる 
あらゆるリソースを格納し、バージョン管理する。
25 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.3 分散バージョン管理の仕組み(続き) 
3)ワークツリー(Work Tree) 
Gitでは、リポジトリがセンターにあるのではなく、各ユーザーのロー 
カルマシン上に作られる。このローカルなリポジトリをワークツリーと 
呼ぶ。ワークツリーには、インデックスとファイルの両方が含まれてい 
る。 
変更・追加の作業はこのワークツリーの上で行われる。これを 
「ステージされた変更」と呼ぶ。このステージされた変更を重ね、妥当 
性を検証した後に、正式な変更として、ログメッセージを付けて 
“commit” する。このように、Gitでの変更は2段階に分けられている。 
“commit”することにより、新しいリビジョンが作られ、これがログメッ 
セージと共に保存される。
26 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.3 分散バージョン管理の仕組み(続き) 
4)上位リポジトリとの同期 
分散管理をしているために、必要に応じて上位のリポジトリに自分 
の変更を反映する必要があり、これは”push”により行われる。 
また、逆に上位のリポジトリの変更を取り込む必要があり、これ 
は、”fetch”で行われ、取り込んだ変更と自分の変更とを”merge”す 
る。”pull”により、”fetch”と”merge”を同時に行うことが出来る。 
5)タグとブランチ 
プロジェクトがあるマイルストーンに達した時に、その時のリポジトリ 
の状態に対して分かりやすいタグをつけられる。 
また、分岐をした時はそれにブランチ名を付けられる。
27 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.4 Gitの内部構造 
Gitの内部構造は次のようになっている。(参考文献5)) 
1)Gitのオブジェクト:次の4種類から構成される。 
a)ブロブ(blob): binary large objectを意味し、データ実体が含まれて 
いて、メタデータ(名前も)は含まれていない。 
b)ツリー(tree):1階層分のディレクトリ情報を持つ。その配下の 
全ファイルのブロブID、パス名、また、再帰的に参照する他の 
ツリー名を含んでいる。 
c)コミット(commit):リポジトリに加えられた各変更のメタデータを 
保持する。具体的には、作者、コミッター、コミット日付、ログメッセー 
ジ、コミットが実行された時のツリーオブジェクトを記録している。 
d)タグ(tag):特定のコミットオブジェクトに対して、人が読める分かり 
やすい名前を付けるための情報を含む。 
4.Gitと分散バージョン管理
28 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.4 Gitの内部構造(続き) 
2) Gitオブジェクトの相互関係 
作成者 
Jon L 
ツリー 
8675309 
ブロブ dead23、 
ブロブ 
feeble 
V1.0 
master 
タグ 
2504624 
コミット 
1492 
ブランチ名 
ブロブ 
dead23 
ブロブ 
feeble 
ツリー 
8675309 
図4.1 Gitオブジェクトの相互関係(参考文献5))
29 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.5 GitとSubversionの連携 
現状において、Gitには勢いがあり、急速にユーザ数を伸ばしている。 元々、Gitは、分散開発を目的として開発されたものでありSubversion の後継として開発されたものではないが、今や、Subversionの競合 ツールとみなされている。 
とはいうものの、いまだ、Subversionのユーザ数は圧倒的な多数を 占めている。SubversionとGitとの相互関係として、次が可能であり、 そのためのツールが用意されている。 
1)Subversionのデータを全てGitに変換する。 
2)Subversionのデータをそのまま活用し、そこから必要とされる変更 
差分だけをGitに取り込む。また、逆に、Gitでの変更差分Subversion 
に戻す。
30 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.6 GitHubサービス 
GitHubは、Gitを利用するプロジェクトのためのホスティングサービス である。GitHubは、Logical Awesome社が運営しており、2008年から サービスが開始された。 
GitHubを利用すれば、設備の準備に気を使うことなく、グローバルな 分散開発が出来る。このために、Eclipse等の多くのOSSプロジェクト がGitHubに移行していて、現状ではOSSプロジェクトの半数をを超え ているという。OSSプロジェクトは、GitHubを無料で利用出来る。 
また、一般企業でのソフトウェア開発もオフショア、グローバル分散開 発が進んでおり、GitHubの活用は更に進展していくものと考えられる。 
Gitは、コマンドベースのツールであるが、GitHubでは、Gitインタ フェースを内部に隠ぺいし、全てをWebインタフェースで利用できるよう にしている。
31 
Copyright (C) Masanori KataokaAll Rights Reserved. 
4.Gitと分散バージョン管理 
4.7 Gerrit 
Gerritは、Googleが開発したGit用ソースコードレビューツールである。 
Android上のAp開発者を中心に普及しつつある。 
Gerritの主要な機能は次の通りである。 
①Gitを用いたソースコード変更の変更差分を分かり易い形式で 
表示する。 
②この変更差分の妥当性を自分でテストするだけでなく、パート 
ナーにも転送して、レビューを受ける。 
③CI(Continuous Integration)ツールと連動する。具体的には、 
自分自身でのテストとパートナーによるレビュー完了したものだけ 
をJenkinsなどのCI ツールに渡して、メインファイルと統合する。 
Gerritを日常作業の中に取り込むことにより、ソースコード更新の信 頼性が大きく改善されると評判になっている。
32 
Copyright (C) Masanori KataokaAll Rights Reserved. 
1)“Continuous Integration” P. M. Duvall, S. M. Matyas, A. Glover 
2007 by Pearson Education, Inc. 「継続的インテグレーション入門」(訳)大 塚庸司、丸山大輔、岡本裕二、亀村圭助2009年日系BP社 
2) “Continuous Delivery: reliable software releases through build,testand deployment automation” JezHumble, David Farley 2010 Addison-Wesley 
3)“Version Control with Subversion Second Edition” C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick 2009 O’Reilly 
「実用Subversion 第2版」宮本久二男(監訳)、朝枝雅子、浜本階生(訳) 
2009年オライリージャパン 
4)“Pragmatic Version Control Using Subversion 2ndEdition” Mike Mason 2006 
「Subversion実践入門:達人プログラマに学ぶバージョン管理第2版」 
でびあんぐる(監訳)2011年オーム社 
5)“Version Control with Git” Jon Loeliger2009 O’Reilly 「実用Git」吉藤英明 
(監訳)、本間雅洋、渡邊健太郎、浜本階生(訳)2010年オライリージャパン 
6)「入門Git」濱野純(著)2009年秀和システム 
7)“Pragmatic Version Control Using Git” Travis Swicegood2008 
「入門git」でびあんぐる(監訳)2009年オーム社 
<以上>

More Related Content

Viewers also liked

УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)
УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)
УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)Pravkonkurs
 
Alam indah dan selamat 2014
Alam indah dan selamat 2014Alam indah dan selamat 2014
Alam indah dan selamat 2014Hadif Syahmi
 
Cómo insertar un power point en un
Cómo insertar un power point en unCómo insertar un power point en un
Cómo insertar un power point en unYisela Mccann
 
Adjectives for jlpt_n4
Adjectives for jlpt_n4Adjectives for jlpt_n4
Adjectives for jlpt_n4Ha Le
 
La organización de los contenidos
La organización de los contenidosLa organización de los contenidos
La organización de los contenidosDaniela Zamudio
 
Centrales de información financiera
Centrales de información financieraCentrales de información financiera
Centrales de información financiera8000981477
 
Starter profesjonalny Betterware
Starter profesjonalny BetterwareStarter profesjonalny Betterware
Starter profesjonalny Betterwarebetterware2014
 
Ley 1620 del 15 de marzo de 2013
Ley 1620 del 15 de marzo de 2013Ley 1620 del 15 de marzo de 2013
Ley 1620 del 15 de marzo de 2013TefaGutierrez22
 

Viewers also liked (16)

УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)
УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)
УЧЕНИЕ БЛАГОЧЕСТИЯ (Нижегородская область, Арзамасский район, с. #Красное)
 
Company profile renting directivos (1)
Company profile renting directivos (1)Company profile renting directivos (1)
Company profile renting directivos (1)
 
Alam indah dan selamat 2014
Alam indah dan selamat 2014Alam indah dan selamat 2014
Alam indah dan selamat 2014
 
Cómo insertar un power point en un
Cómo insertar un power point en unCómo insertar un power point en un
Cómo insertar un power point en un
 
Proposiciones
ProposicionesProposiciones
Proposiciones
 
Adjectives for jlpt_n4
Adjectives for jlpt_n4Adjectives for jlpt_n4
Adjectives for jlpt_n4
 
La organización de los contenidos
La organización de los contenidosLa organización de los contenidos
La organización de los contenidos
 
Centrales de información financiera
Centrales de información financieraCentrales de información financiera
Centrales de información financiera
 
Planificacion 3
Planificacion 3Planificacion 3
Planificacion 3
 
Rishi power point
Rishi power pointRishi power point
Rishi power point
 
BREAK TIMES NITE 1
BREAK TIMES NITE 1BREAK TIMES NITE 1
BREAK TIMES NITE 1
 
seminario 10 etics
seminario 10 eticsseminario 10 etics
seminario 10 etics
 
Dreamweaver
DreamweaverDreamweaver
Dreamweaver
 
Tabaquismo
TabaquismoTabaquismo
Tabaquismo
 
Starter profesjonalny Betterware
Starter profesjonalny BetterwareStarter profesjonalny Betterware
Starter profesjonalny Betterware
 
Ley 1620 del 15 de marzo de 2013
Ley 1620 del 15 de marzo de 2013Ley 1620 del 15 de marzo de 2013
Ley 1620 del 15 de marzo de 2013
 

Similar to Agileツール適合化分科会(変更管理・バージョン管理)

Agileツール適合化分科会(dev opsツール)
Agileツール適合化分科会(dev opsツール)Agileツール適合化分科会(dev opsツール)
Agileツール適合化分科会(dev opsツール)masanori kataoka
 
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)日本マイクロソフト株式会社
 
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編Akihiko Shirai
 
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介日本マイクロソフト株式会社
 
ディレクターやデザイナーのためのリテラシー向上講座 git入門編
ディレクターやデザイナーのためのリテラシー向上講座 git入門編ディレクターやデザイナーのためのリテラシー向上講座 git入門編
ディレクターやデザイナーのためのリテラシー向上講座 git入門編Yosuke INOUE
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 Hiro Yoshioka
 
BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015minazou67
 
オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発Yuta Matsumura
 
【社内輪読会】Github実践入門2章
【社内輪読会】Github実践入門2章【社内輪読会】Github実践入門2章
【社内輪読会】Github実践入門2章Akira Torii
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話Yahoo!デベロッパーネットワーク
 
A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...
A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...
A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...日本マイクロソフト株式会社
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 

Similar to Agileツール適合化分科会(変更管理・バージョン管理) (20)

Agileツール適合化分科会(dev opsツール)
Agileツール適合化分科会(dev opsツール)Agileツール適合化分科会(dev opsツール)
Agileツール適合化分科会(dev opsツール)
 
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
 
Git 20100724
Git 20100724Git 20100724
Git 20100724
 
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
 
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
 
ディレクターやデザイナーのためのリテラシー向上講座 git入門編
ディレクターやデザイナーのためのリテラシー向上講座 git入門編ディレクターやデザイナーのためのリテラシー向上講座 git入門編
ディレクターやデザイナーのためのリテラシー向上講座 git入門編
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015BTS/ITSの近況とあれこれ 2015
BTS/ITSの近況とあれこれ 2015
 
オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発オルターブースが実践する .NET Core “ガチ” 開発
オルターブースが実践する .NET Core “ガチ” 開発
 
エンタープライズにおける開発ツールの導入と活用推進
エンタープライズにおける開発ツールの導入と活用推進エンタープライズにおける開発ツールの導入と活用推進
エンタープライズにおける開発ツールの導入と活用推進
 
エンタープライズにおける開発ツールの導入と活用推進
エンタープライズにおける開発ツールの導入と活用推進エンタープライズにおける開発ツールの導入と活用推進
エンタープライズにおける開発ツールの導入と活用推進
 
ITpro expo2014_atlassian
ITpro expo2014_atlassianITpro expo2014_atlassian
ITpro expo2014_atlassian
 
Hyperledger Fabric 1.0 概要
Hyperledger Fabric 1.0 概要Hyperledger Fabric 1.0 概要
Hyperledger Fabric 1.0 概要
 
【社内輪読会】Github実践入門2章
【社内輪読会】Github実践入門2章【社内輪読会】Github実践入門2章
【社内輪読会】Github実践入門2章
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
 
A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...
A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...
A07_ビジネス イノベーションを強力に支援する Azure Red Hat OpenShift のススメ [Microsoft Japan Digita...
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
Mercurial入門
Mercurial入門Mercurial入門
Mercurial入門
 
社内勉強会(Git)
社内勉強会(Git)社内勉強会(Git)
社内勉強会(Git)
 

More from masanori kataoka

Agileツール適合化分科会(第8回)議事録
Agileツール適合化分科会(第8回)議事録Agileツール適合化分科会(第8回)議事録
Agileツール適合化分科会(第8回)議事録masanori kataoka
 
Agileツール適合化分科会(tddとbdd)
Agileツール適合化分科会(tddとbdd)Agileツール適合化分科会(tddとbdd)
Agileツール適合化分科会(tddとbdd)masanori kataoka
 
Agileツール適合化分科会(第7回)議事録
Agileツール適合化分科会(第7回)議事録Agileツール適合化分科会(第7回)議事録
Agileツール適合化分科会(第7回)議事録masanori kataoka
 
Agileツール適合化分科会(第6回)議事録
Agileツール適合化分科会(第6回)議事録Agileツール適合化分科会(第6回)議事録
Agileツール適合化分科会(第6回)議事録masanori kataoka
 
Agileツール適合化分科会(gitとgit hub)
Agileツール適合化分科会(gitとgit hub)Agileツール適合化分科会(gitとgit hub)
Agileツール適合化分科会(gitとgit hub)masanori kataoka
 
Agileツール適合化分科会(第5回)議事録
Agileツール適合化分科会(第5回)議事録Agileツール適合化分科会(第5回)議事録
Agileツール適合化分科会(第5回)議事録masanori kataoka
 
Agileツール適合化分科会(issue tracking system)
Agileツール適合化分科会(issue tracking system)Agileツール適合化分科会(issue tracking system)
Agileツール適合化分科会(issue tracking system)masanori kataoka
 
Agileツール適合化分科会(第4回)議事録(改訂版)
Agileツール適合化分科会(第4回)議事録(改訂版)Agileツール適合化分科会(第4回)議事録(改訂版)
Agileツール適合化分科会(第4回)議事録(改訂版)masanori kataoka
 
Agileツール適合化分科会(第4回)議事録
Agileツール適合化分科会(第4回)議事録Agileツール適合化分科会(第4回)議事録
Agileツール適合化分科会(第4回)議事録masanori kataoka
 
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)masanori kataoka
 
Agileツール適合化分科会(第3回)議事録
Agileツール適合化分科会(第3回)議事録Agileツール適合化分科会(第3回)議事録
Agileツール適合化分科会(第3回)議事録masanori kataoka
 
Agileツール適合化分科会(第2回)議事録
Agileツール適合化分科会(第2回)議事録Agileツール適合化分科会(第2回)議事録
Agileツール適合化分科会(第2回)議事録masanori kataoka
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
Agileツール適合化分科会(第1回)議事録
Agileツール適合化分科会(第1回)議事録Agileツール適合化分科会(第1回)議事録
Agileツール適合化分科会(第1回)議事録masanori kataoka
 

More from masanori kataoka (14)

Agileツール適合化分科会(第8回)議事録
Agileツール適合化分科会(第8回)議事録Agileツール適合化分科会(第8回)議事録
Agileツール適合化分科会(第8回)議事録
 
Agileツール適合化分科会(tddとbdd)
Agileツール適合化分科会(tddとbdd)Agileツール適合化分科会(tddとbdd)
Agileツール適合化分科会(tddとbdd)
 
Agileツール適合化分科会(第7回)議事録
Agileツール適合化分科会(第7回)議事録Agileツール適合化分科会(第7回)議事録
Agileツール適合化分科会(第7回)議事録
 
Agileツール適合化分科会(第6回)議事録
Agileツール適合化分科会(第6回)議事録Agileツール適合化分科会(第6回)議事録
Agileツール適合化分科会(第6回)議事録
 
Agileツール適合化分科会(gitとgit hub)
Agileツール適合化分科会(gitとgit hub)Agileツール適合化分科会(gitとgit hub)
Agileツール適合化分科会(gitとgit hub)
 
Agileツール適合化分科会(第5回)議事録
Agileツール適合化分科会(第5回)議事録Agileツール適合化分科会(第5回)議事録
Agileツール適合化分科会(第5回)議事録
 
Agileツール適合化分科会(issue tracking system)
Agileツール適合化分科会(issue tracking system)Agileツール適合化分科会(issue tracking system)
Agileツール適合化分科会(issue tracking system)
 
Agileツール適合化分科会(第4回)議事録(改訂版)
Agileツール適合化分科会(第4回)議事録(改訂版)Agileツール適合化分科会(第4回)議事録(改訂版)
Agileツール適合化分科会(第4回)議事録(改訂版)
 
Agileツール適合化分科会(第4回)議事録
Agileツール適合化分科会(第4回)議事録Agileツール適合化分科会(第4回)議事録
Agileツール適合化分科会(第4回)議事録
 
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
 
Agileツール適合化分科会(第3回)議事録
Agileツール適合化分科会(第3回)議事録Agileツール適合化分科会(第3回)議事録
Agileツール適合化分科会(第3回)議事録
 
Agileツール適合化分科会(第2回)議事録
Agileツール適合化分科会(第2回)議事録Agileツール適合化分科会(第2回)議事録
Agileツール適合化分科会(第2回)議事録
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
Agileツール適合化分科会(第1回)議事録
Agileツール適合化分科会(第1回)議事録Agileツール適合化分科会(第1回)議事録
Agileツール適合化分科会(第1回)議事録
 

Agileツール適合化分科会(変更管理・バージョン管理)

  • 1. 1 Copyright (C) Masanori KataokaAll Rights Reserved. ソフトウェア変更歴管理・ バージョン管理ツール 2014年8月22日 片岡雅憲 2014/8/27 アジャイルツール適合化分科会(第1回)資料
  • 2. 2 Copyright (C) Masanori KataokaAll Rights Reserved. <内容> 1.ソフトウェア構成管理技術とは 2.変更歴管理、そしてバージョン管理 3.Subversion 4.Gitと分散バージョン管理 <参考文献>
  • 3. 3 Copyright (C) Masanori KataokaAll Rights Reserved. ソフトウェア構成管理技術は、ソフトウェアの開発に必要とされるリ ソースを統合的に管理する技術である。 この技術は、次の技術から構成され、発展してきた。 1)ソフトウェアリソースを開発チームのメンバー間で共有し、その 変更履歴を管理する技術。また、この変更履歴とバージョンとの 関係を管理する技術。 2)ソフトウェアの開発プロセスおよびビルド(作成)プロセス、デプロイ (提供)プロセスを自動化する技術。また、これらプロセス間を POM(Project ObjectModel)モデルに基づき相互接続し、ワーク フロー化する技術。 3)上記ワークフローを反復型プロセスに発展させ、その自動化を含 めて総合的に改善するCI(Continuous Integration)および CD(Continuous Delivery)技術。
  • 4. 4 Copyright (C) Masanori KataokaAll Rights Reserved. 2.1変更歴管理の重要性 ソフトウェアは、その開発の過程においても、また、運用・保守の段階 に入っても、頻繁に変更される。この変更を記録し、過去を復元するた めに変更歴管理は重要である。 1)失敗に気付いた場合に(不良を検出した場合を含む)、失敗を検討・ 修正するための過去の状態に戻れる。いわば、タイムマシンであり、 過去のいかなる時点にも戻れる。 2)同一のコードに対して、複数の開発者が、管理された方法で並行 アクセスし、チームによる共同開発が出来る。 3)既にリリースされたコードを保守しながら、最新のコードの開発を 並行して進めることが出来る。 4)変更の経時的な記録が残される。変更の理由、回数等の情報が 後で利用出来る。
  • 5. 5 Copyright (C) Masanori KataokaAll Rights Reserved. 2.2ソースコード変更歴管理からバージョン管理へ ソースコード変更歴管理技術は、より論理的な単位を扱うバージョン 管理技術へと発展していった。 1)ソースコードを個人の所有物としてではなく、開発チームメンバー 全員による共有リソースとして扱う。 2)単に断片的なソースコードの変更差分を扱うのではなくて、タグに よりグループ化する。また、ソースコードの論理的時系列集合であ るコードラインを管理するようにする。 3)コードラインおけるメインライン(トランク)とブランチとを設けて、 並行作業が出来るようにする。これにより、空間的、時間的に分散 したチーム間の協業を可能とする。 4)ソフトウェアのリリースにあたり、ブランチを使ってリリースし、メイ ンラインは開発を継続できるようにする。 5)ブランチの変更は、テスト完了後に、メインラインの変更へマージ する。
  • 6. 6 Copyright (C) Masanori KataokaAll Rights Reserved. 2.3バージョン管理上の留意事項 1)出来るだけ頻繁にチェックイン(Commit)する(1~数回/日)。これに より、失敗した時に着実に回復出来る。 2)基本的にメインラインにチェックインする。ブランチにチェックインした 場合は後で、再度メインラインにチェックイン(マージ)することになる。 後者の方法は、CI(ContinuousIntegration)の考え方と相容れない。 3)チェックインのメタデータ(変更理由の説明等)を、分かり易く記述す る。不良修正等については、これがなおざりになりがちなので注意が 必要である。 4)あらゆるリソース、およびそれに関する情報をバージョン管理下に おき、旧バージョンが環境も含めて確実に再現出来るようにする。 5)リリースをする場合に、ブランチを作成して、そのブランチ上でリリー スする。リリースしたものの不良はブランチ上で修正する。そしてまた、 メインライン上にも修正をフィードバックする。
  • 7. 7 Copyright (C) Masanori KataokaAll Rights Reserved. 2.3バージョン管理上の留意事項(続き) 6)大規模な機能の追加や変更を行う場合に、ともすると、メインライン に迷惑をかけたくないとの理由でブランチを作りたくなる。しかし、 現実にはブランチを作ることは容易でも、これをメインラインにマージ するのには大変な苦労が伴う。大規模な追加、変更であってもメイン ライン上でコツコツと着実に進めた方が結局は早道である。 7)ブランチ上でリファクタリングを行った場合には、このブランチを メインラインにマージするのに苦労することが多い。
  • 8. 8 Copyright (C) Masanori KataokaAll Rights Reserved. 2.4 バージョン管理システムの歴史 バージョン管理システム発展の歴史を、次に概説する。 1)SCCS(Source Code Control System): 1972年にIBMSystem/370上にベル研Marc J.Rochkindが 開発、その後、UNIX上に移植される。バージョン管理システムの 元祖とも言うべきツール。 2)RCS(Revision Control System): パデュー大学で1980年代に開発、その後、GNUソフトに組み 入れられた。複数ユーザは扱えない。 3)CVS(Concurrent Version System): RCSをベースに、①クライアントサーバ機能②ブランチ、タグ機能 等を強化した。ネットワーク上で複数ユーザを扱うことが出来る。 Dick Gruneが開発し、1986年にオープン化、1988年に B. BerlinerがC環境に移植した。
  • 9. 9 Copyright (C) Masanori KataokaAll Rights Reserved. 2.4 バージョン管理システムの歴史(続き) 4)Subversion: CVSの問題点を解決するものとして、K. Fogel, BenCollins- Sussman他により開発され、2001年に公開された。彼らは、CVS に精通しており、コマンドはCVSに合わせてあることから、CVSを置 き換えて急速に普及した。 RCS, CVSでは、管理の基本単位がファイルになっていて、これ が処理時間の長さや、排他制御機能の限界の要因になっている。 Subversionは、管理単位をリビジョン(変更差分)としており、このよ うな課題を克服している。 Subversionは、集中管理方式の開発では、優れたものになって いて、現在最も多く使われている。しかし、分散型開発のバージョン 管理では限界がある。これには、Git等の分散型バージョン管理 システムが必要である(Gitについては後述)。
  • 10. 10 Copyright (C) Masanori KataokaAll Rights Reserved. 2.4 バージョン管理システムの歴史(続き) 5)Git: Linuxカーネルの開発においては、分散バージョン管理ツールで あるBitKeeper が使われていた。BitKeeperは、商用ツールであった が、無料版も配布していて、これを使っていた。しかし、2005年春に 無料版の条件を厳しくしたために、Linuxでは継続使用が不可能に なった。 BitKeeperの代替品を探したが適切なものがなく、Linuxプロジェクト のリーダーであるLinus Torvaldsと同僚の濱野純の2人が中心となっ て、Gitの開発を始めた。開発開始後、3か月経った2005年7月には、 当初バージョンが開発、公開され、その後、オープンソフトウェア コミュニティの中で急速、かつ着実に改良が加えられ、ユーザ数を 増やしていった。
  • 11. 11 Copyright (C) Masanori KataokaAll Rights Reserved. 3.1 Subversionの長所 RCS, CVSにはないSubversionの長所は次のとおり。 1)ソースコードだけでなく、いかなるファイル、ディレクトリ、オブジェク トファイル、メタデータも管理出来る。 2)ファイル、ディレクトリの追加、削除、コピー、名称変更が可能。 3)クライアントサーバ方式、ネットワーク対応、複数人でのファイル 共有が可能。変更において、アトミックなコミットにより、排他制御が 出来る。 4)差分管理が可能である。転送、格納にてデータが圧縮されていて、 性能に優れている。 5)ブランチ、タグの作成、マージが軽快である(性能に優れている)。 6)広範囲のプラットフォームをサポートしている。 3.Subversion
  • 12. 12 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.2 Subversionによるバージョン管理の方法 Subversionにおいては、全てのリソースをリポジトリで集中管理 する。 1)リポジトリの内容に操作を加える場合は、リポジトリから各作業者の 作業領域に必要な部分をコピーする。これをチェックアウト(Check out)と呼ぶ。そして、この作業領域において必要な変更・追加等の 操作を加える。 2)テスト等による確認の後、上記を正式のものとして、リポジトリに 反映して保存する場合は、コミット(Commit)する(チェックイン (Check in)と言う場合もある)。 3)このように、作業領域での操作と、リポジトリへの正式なコミットを 分けることにより、リポジトリを複数の開発者間で共有することを可能 とする。これにより、高い品質を維持することが出来る。
  • 13. 13 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.3 Subversionにおけるリビジョン番号の付与方法 1)RCS, CVSでは、ファイル単位に固有の番号付けが行われている。 すなわち、そのファイルが変更される度に番号が上がる。従って、 番号はそのファイルの変更回数を表す。 2)Subversionでは、リポジトリ全体に対するリビジョン番号が付けられ る。したがって、プロジェクトの何かが変更されれば、リビジョン番号 は更新され、変更されていないモジュールのリビジョン番号も更新 されることになる。 3)このリビジョンを指定することにより、ある時点でのプロジェクトの すべてのソースコードを正確に入手できる。 4)一方、このように自動的に付与されたリビジョン番号はとても覚え にくい。そのような場合は分かりやすいタグを付与することが出来る。
  • 14. 14 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.4 ブランチとタグ 1)Subversionのディレクトリには、①トランク、②タグ、③ブランチ の3つのサブディレクトリがある。トランクは、開発のためのメインライ ンのコードである。 2)タグは、特定のリビジョンにタグ名称を付けたものである。リビジョン 番号は、Subversionが自動的に付与したもので憶えにくいが、タグ は開発者にとって意味のある覚え易い名称とすることが出来る。タグ は、読み取り専用であることが一般的であるが、それだけでなく、これ を更新していくことも出来て、次に述べるブランチと同じような扱いが 出来る。 3)ブランチはトランクから分岐させたもので、一般には、主たる開発を トランクで継続的に行い、ブランチではリリースしたバージョンの保守 等を行う。
  • 15. 15 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.4 ブランチとタグ(続き) 4)ブランチとしては、次のものがある。 ①リリースブランチ:リリースしたものの保守 ②リリース準備ブランチ:リリース準備作業が大きい場合 ③ベンダーブランチ:第3者のソースをトランクと別に管理 ④タスクブランチ:メインへ大影響を及ぼす変更に対応 ⑤トピックブランチ:分散開発においてチケット対応の開発を行う
  • 16. 16 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.5 Subversionにおけるロック方式 ソースコードの同じ個所を二人が同時アクセスして更新すると、 競合が生じてコードの内容が不正なものになる可能性がある。競合 を防ぐためのロック方式として次がある。 A.厳格なロック(strict lock) B. 楽観的ロック(optimistic lock) 上記A.の方式では、誰かがチェックアウトするとこの人がチェックイン (コミット)するまで、ファイル全体にロックが掛けられて読み取り専用 になり、更新出来ない。 一方、B.の方式では、複数人がチェックアウト出来るが、誰かが チェックインした場合は、その更新内容を再度とり込んで、その上に 自分の変更分を加えてチェックインする。 Subversionは、B.の楽観的ロック方式を採用している。
  • 17. 17 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.6 Subversionにおけるプロジェクトの作成 Subversionでは、ソフトウェア資産をプロジェクト単位に管理し、その 概要は次の通りである。(参考文献4)) 1)プロジェクトとは何か プロジェクトと呼ばれるものの中には、一人で1~2週間で作り上げ てしまうものや、数百人で2~3年を掛けるものまで多様なものが あるが、基本的に次の特性を備えている。 a) プロジェクトは名称を持っている。独立した実体として識別される ものである。 b) プロジェクトは業務目標を持っている。この目標達成のためにプロ ジェクトの構成要素は連携し、結合する。 c) プロジェクトは一つのまとまりとして保守され、その一つのバージョ ンがまとまった形でリリースされる。 d) プロジェクトの素材は共通の技術標準とガイドラインを共有し、 共通のアーキテクチャを使う。
  • 18. 18 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.6 Subversionにおけるプロジェクトの作成(続き) 2)プロジェクトの構造 Subversion配下で作るプロジェクトの構造の例を、図3.1に示す。 その概要は下記の通りである。 a) サブディレクトリとして、①トランク、②タグ、③ブランチがある。 (3.4 を参照) b) 最上位のファイルとして次がある。 -README:このプロジェクトについての簡単な説明 -BUILDING:このプロジェクトを再構築するための説明 -GLOSSARY:このプロジェクトで使われる専門用語
  • 19. 19 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.6 Subversionにおけるプロジェクトの作成(続き) 2)プロジェクトの構造(続き) c) 最上位のディレクトリとして、下記がある。 ーdoc/プロジェクトに関連するドキュメントを格納する -data/ プロジェクトに関連するデータを格納する -db/ プロジェクトでデータを扱う場合に、全ての スキーマ関連の要素をここに格納する -src/ プロジェクトのソースコードを格納する -util/ プロジェクト固有のユーティリティプログラム、 ツール、スクリプトを格納する -vendor/ サードパーティ製のライブラリ(バイナリ)等を 使う場合は、ここに格納する -vendorsrc/ 上記のソースコードを格納する
  • 20. 20 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion Sample/ tags/ trunk/ README BUILDING GLOSSARY branches/ doc/ src/ build.xml util/ vendor/ vendorsrc/ client/ A.java B.java server/ Y.java Z.java lib/ junit.jar spring.jar junit/ spring 図3.1Sampleプロジェクトの構造(参考文献4))
  • 21. 21 Copyright (C) Masanori KataokaAll Rights Reserved. 3.Subversion 3.7Subversionにおけるコードの共有 組織内外の他のプロジェクトとコードを共有したくなることがある。 Subversionでは、コードの共有手段として次の3つを用意している。 1)上位プロジェクトによるコードの共有 共有するべきコードを上位プロジェクト配下に置き、開発者はこれを 自分の作業領域にチェックアウトする。数が多くなると管理が煩雑に なる。 2)外部項目(externals)によるコードの共有 externals属性を使うと別のディレクトリの内容を自分の作業コピー に取り込める。チェックアウト時にリストを指定することにより自動的 に取り込める。 3)サードパーティ製のコードの取り込み vendorsrc/ 配下に置くことにとってとり込むことが出来る。
  • 22. 22 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.1 Gitの概要 Gitは、Linuxのソースコード管理を目的として、Linuxの開発リーダで あるLinus Torvaldsとその同僚である濱野純により開発された。 分散型バージョン管理システムであるのが特徴である。分散環境で の変更管理はローカルなリポジトリを使って行われる(リモートのセント ラル・リポジトリにアクセスしないで行われる)。 データの圧縮に工夫をしていて、Subversionに比較して動作性能が 格段に優れている。
  • 23. 23 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.2 Gitの特徴 Gitの特徴として次があげられる。 1)分散開発を容易にする。中央リポジトリと同期をしていなくても、 分散リポジトリで独立して、並行開発が出来る。 2)何千人もの開発者を扱える。 3)高速で効率良く動作する。データ容量を節約して、転送時間を短縮 するための、データ圧縮技術、差分管理技術が優れている。 4)SHA1という暗号学的ハッシュ関数を用いて、全てのオブジェクトの IDをユニーク化して、完全性や信頼性を維持している。 5)分岐して、分散開発した後の、マージ処理を容易に行うための機能 を備えている。
  • 24. 24 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.3 分散バージョン管理の仕組み 1)分散リポジトリ Subversion等の従来型のバージョン管理システムでは、集中型 リポジトリにより、すべてのデータをセンタに集中管理して、これを ネットワーク等を経由して共有させる。 Gitでは、ユーザ各人が専用のローカルリポジトリを持つ。ユーザは、 センターとのネットワーク接続が切断された状態であっても、ローカル な作業は継続できる。そして、必要な時にセンターリポジトリにコミット して同期を取る。 2)何を格納するか Gitでは、ソースコードだけでなく、そのプロジェクトで必要とされる あらゆるリソースを格納し、バージョン管理する。
  • 25. 25 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.3 分散バージョン管理の仕組み(続き) 3)ワークツリー(Work Tree) Gitでは、リポジトリがセンターにあるのではなく、各ユーザーのロー カルマシン上に作られる。このローカルなリポジトリをワークツリーと 呼ぶ。ワークツリーには、インデックスとファイルの両方が含まれてい る。 変更・追加の作業はこのワークツリーの上で行われる。これを 「ステージされた変更」と呼ぶ。このステージされた変更を重ね、妥当 性を検証した後に、正式な変更として、ログメッセージを付けて “commit” する。このように、Gitでの変更は2段階に分けられている。 “commit”することにより、新しいリビジョンが作られ、これがログメッ セージと共に保存される。
  • 26. 26 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.3 分散バージョン管理の仕組み(続き) 4)上位リポジトリとの同期 分散管理をしているために、必要に応じて上位のリポジトリに自分 の変更を反映する必要があり、これは”push”により行われる。 また、逆に上位のリポジトリの変更を取り込む必要があり、これ は、”fetch”で行われ、取り込んだ変更と自分の変更とを”merge”す る。”pull”により、”fetch”と”merge”を同時に行うことが出来る。 5)タグとブランチ プロジェクトがあるマイルストーンに達した時に、その時のリポジトリ の状態に対して分かりやすいタグをつけられる。 また、分岐をした時はそれにブランチ名を付けられる。
  • 27. 27 Copyright (C) Masanori KataokaAll Rights Reserved. 4.4 Gitの内部構造 Gitの内部構造は次のようになっている。(参考文献5)) 1)Gitのオブジェクト:次の4種類から構成される。 a)ブロブ(blob): binary large objectを意味し、データ実体が含まれて いて、メタデータ(名前も)は含まれていない。 b)ツリー(tree):1階層分のディレクトリ情報を持つ。その配下の 全ファイルのブロブID、パス名、また、再帰的に参照する他の ツリー名を含んでいる。 c)コミット(commit):リポジトリに加えられた各変更のメタデータを 保持する。具体的には、作者、コミッター、コミット日付、ログメッセー ジ、コミットが実行された時のツリーオブジェクトを記録している。 d)タグ(tag):特定のコミットオブジェクトに対して、人が読める分かり やすい名前を付けるための情報を含む。 4.Gitと分散バージョン管理
  • 28. 28 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.4 Gitの内部構造(続き) 2) Gitオブジェクトの相互関係 作成者 Jon L ツリー 8675309 ブロブ dead23、 ブロブ feeble V1.0 master タグ 2504624 コミット 1492 ブランチ名 ブロブ dead23 ブロブ feeble ツリー 8675309 図4.1 Gitオブジェクトの相互関係(参考文献5))
  • 29. 29 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.5 GitとSubversionの連携 現状において、Gitには勢いがあり、急速にユーザ数を伸ばしている。 元々、Gitは、分散開発を目的として開発されたものでありSubversion の後継として開発されたものではないが、今や、Subversionの競合 ツールとみなされている。 とはいうものの、いまだ、Subversionのユーザ数は圧倒的な多数を 占めている。SubversionとGitとの相互関係として、次が可能であり、 そのためのツールが用意されている。 1)Subversionのデータを全てGitに変換する。 2)Subversionのデータをそのまま活用し、そこから必要とされる変更 差分だけをGitに取り込む。また、逆に、Gitでの変更差分Subversion に戻す。
  • 30. 30 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.6 GitHubサービス GitHubは、Gitを利用するプロジェクトのためのホスティングサービス である。GitHubは、Logical Awesome社が運営しており、2008年から サービスが開始された。 GitHubを利用すれば、設備の準備に気を使うことなく、グローバルな 分散開発が出来る。このために、Eclipse等の多くのOSSプロジェクト がGitHubに移行していて、現状ではOSSプロジェクトの半数をを超え ているという。OSSプロジェクトは、GitHubを無料で利用出来る。 また、一般企業でのソフトウェア開発もオフショア、グローバル分散開 発が進んでおり、GitHubの活用は更に進展していくものと考えられる。 Gitは、コマンドベースのツールであるが、GitHubでは、Gitインタ フェースを内部に隠ぺいし、全てをWebインタフェースで利用できるよう にしている。
  • 31. 31 Copyright (C) Masanori KataokaAll Rights Reserved. 4.Gitと分散バージョン管理 4.7 Gerrit Gerritは、Googleが開発したGit用ソースコードレビューツールである。 Android上のAp開発者を中心に普及しつつある。 Gerritの主要な機能は次の通りである。 ①Gitを用いたソースコード変更の変更差分を分かり易い形式で 表示する。 ②この変更差分の妥当性を自分でテストするだけでなく、パート ナーにも転送して、レビューを受ける。 ③CI(Continuous Integration)ツールと連動する。具体的には、 自分自身でのテストとパートナーによるレビュー完了したものだけ をJenkinsなどのCI ツールに渡して、メインファイルと統合する。 Gerritを日常作業の中に取り込むことにより、ソースコード更新の信 頼性が大きく改善されると評判になっている。
  • 32. 32 Copyright (C) Masanori KataokaAll Rights Reserved. 1)“Continuous Integration” P. M. Duvall, S. M. Matyas, A. Glover 2007 by Pearson Education, Inc. 「継続的インテグレーション入門」(訳)大 塚庸司、丸山大輔、岡本裕二、亀村圭助2009年日系BP社 2) “Continuous Delivery: reliable software releases through build,testand deployment automation” JezHumble, David Farley 2010 Addison-Wesley 3)“Version Control with Subversion Second Edition” C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick 2009 O’Reilly 「実用Subversion 第2版」宮本久二男(監訳)、朝枝雅子、浜本階生(訳) 2009年オライリージャパン 4)“Pragmatic Version Control Using Subversion 2ndEdition” Mike Mason 2006 「Subversion実践入門:達人プログラマに学ぶバージョン管理第2版」 でびあんぐる(監訳)2011年オーム社 5)“Version Control with Git” Jon Loeliger2009 O’Reilly 「実用Git」吉藤英明 (監訳)、本間雅洋、渡邊健太郎、浜本階生(訳)2010年オライリージャパン 6)「入門Git」濱野純(著)2009年秀和システム 7)“Pragmatic Version Control Using Git” Travis Swicegood2008 「入門git」でびあんぐる(監訳)2009年オーム社 <以上>