2009年9月30日水曜日

ネットでバージョン管理 No.3


前回までで、オンラインサービスである、Unfuddleを利用して、ローカルに有るファイルをオンラインリポジトリにコミットするところまでが出来るようになったはずである。

これで、システム開発、もしくはホームページの更新、また、何か書きあげている文章等が出来上がっていく工程がしっかり保存されていく事になる。

ココからは、仕事でも使える方法等も交えてGitの便利な使い方を書く事にする。

■別のPCからも接続する
ここで、一度別のPCからも、同じリポジトリに接続してみよう。
必要無ければこのセクションは読み飛ばしてOK。

私の場合は、会社と自宅の両方から同じリポジトリに接続できるようにしている。

まず、接続したい別のPCにも「No.1」Gitクライアントのセクションを参考に TortoiseGit をインストールしておく。

キーファイルに関してはセキュリティの考え方によってやり方が異なります。以下1.2.の方法が有る。
1. 「No.1」キーの作成と登録5. で保存していた秘密鍵ファイルをUSBメモリ等で別のPCに持っていく。
2. 「No.1」キーの作成と登録を参考に別のPC用に新たなキーを作成しておく。(この場合、Unfuddle側にもその公開錠を追加登録しておかなければなりません)

キーファイルが用意できたところで、リポジトリを読み込んでみよう。
試しにデスクトップ上で右クリックして「Git Clone...」をクリック。
クローンとは名前で想像する通りリポジトリのコピーを作る事であり、クリックすると以下のようなダイアログが出てくる。

クリックで拡大

URL:の欄にリポジトリのアドレス(No.2 でも使用したgit@・・.git のようなアドレス)を指定。
ディレクトリ:の欄にこれから編集用コピーを保存するフォルダの場所を指定。
Load Putty Key の欄に秘密鍵ファイルの場所を指定。
「OK」をクリックするとその場所にフォルダが作成される。

中身がリポジトリと同期されるので、フォルダの名前は別に何でもよい。


■アイコンについたマークについて
所で前回から見てきたと思うが、フォルダやファイルに追加されたこのようなチェックマークの意味について代表的なものだけ簡単に説明する。

リポジトリのコピー内では、以下の表のように各ファイルやフォルダのアイコンの左下にマークが追加されている。
これはTortoiseGitTortoiseSVNの機能なので、詳しい事は各ソフトのドキュメントを見てもらうとして、上の4つの説明だけ。(私が使った感想のようなものなので間違えてるところが有るかもしれません。)

緑のチェック
リポジトリが最新である。ただし、ここで言うリポジトリはローカルのリポジトリであって、インターネット上のリポジトリが最新かどうかはこのマークだけでは判断できない。

赤の感嘆符
更新されているのでコミットする必要が有る。右クリックのメニューから「コミット」を行えば緑のチェックに変わる。

黄色の感嘆符
競合が発生している。これは二人、または二カ所以上からのアクセスが有り、同じファイルに各それぞれが違う更新を行って、それぞれがコミットした場合に、どちらの更新を優先するか、または両者の更新をどのように融合させるかを、解決しなければならないという警告が出ている事を指しています。マージして競合の解決を行う事で、解除される。

グレーのチェック
読み取り専用の状態。このマークのついたフォルダの中身は直接編集しない方が良い。
Gitのリポジトリは各リポジトリがサーバーに有るリポジトリと同じような使い方をする事が出来る。ちょっと分かりにくいかもしれないが、例えば、USBメモリにリポジトリを配置して、それをデスクトップにクローンコピーし、編集してコミット後、USBのリポジトリにプッシュ!
別のマシンでもおなじUSBを差し込んでプッシュ!
と、このような使い方も可能。
その時、このUSB側のリポジトリはグレーのマークになっているはずだ。
要は、プッシュされた側のリポジトリは読み取り専用としてマークされ「直接編集しないでくれ」と警告を出すのだ。

■その他の機能
「Git Pull...」 サーバー側のリポジトリの更新情報をローカルのリポジトリに持ってくる。
「Git 更新をチェック(F)」 更新されたファイルや追加されたファイルの一覧を表示。
「Git ログを表示(L)」 コミットされた履歴とコメント等を表示。

右クリックで出てくるメニュー(設定から変更可能)には、他にも「別のバージョンのファイルとの比較」、リリースした時に使う「ブランチ」等、ここで全ては紹介しきれない位の物がたくさん使えるようになっています。

上の「USBにリポジトリを配置する」でもそうですが、リポジトリの場所の指定は”git@******.git”でなくとも”C:\Users\hoge\Desktop\コード”というようなパスの指定でもOKです。

色々やってみると分かるのですが、Gitはリポジトリと言う概念が、Subversionよりも掴みやすいかもしれません。


一般ではGitは分散リポジトリ等と呼ばれていて、難しそうなイメージが有るのだが、逆に構造が単純で理解はしやすいのではないだろうかと思い、あえてをGit紹介してみた。

■SubversionとGit
殆どGitについての説明をしてきたが、現在の巷での主流はSubversionだと思うので、一応違いを簡単にまとめておく。

Subversion
動作
 コミット = サーバーへ更新情報を保存
 更新 = サーバーから更新情報を読み込み
 チェックアウト = サーバーからリポジトリ(フォルダ単位)を更新用にコピー
 ブランチ = 別フォルダにコピー
構成
 リポジトリはサーバーにのみある。
 ローカルコピーには、サブフォルダを含め全てのフォルダに”_svn”と言う管理用のフォルダが出来る。

Git:
動作
 コミット = ローカルで更新情報の作成
 プッシュ = サーバーへ更新情報を保存
 プル = サーバーから更新情報を読み込み
 クローン = サーバーからリポジトリ(ブランチ単位)を更新用にコピー
 ブランチ = ブランチと言う単位が有りそこにコピー
構成
 全てのクローンがリポジトリを持つ。
 ローカルコピーのルートフォルダ内のみに”.git”と言うリポジトリの実体フォルダが出来る。

ここまでで、だいたいの概要と使い方が分かったのではないだろうか。
あとは「実際に使ってみる」のが一番理解しやすいと思う。
私のやり方ではありますが、「概要を調べる」そして「使ってみる」それから「細かく調べる」が良いかもしれませんね。

■プロジェクト管理機能を使ってみる
リビジョン管理だけでは一本の履歴がただ保存されているだけだが、ココで「No.1」で書いたプロジェクト管理が便利になっていく。

またまたUnfuddleを例に説明をする。

プロジェクトのページ行くと、「Message」、「Ticket」、「Mileston」と言うのが有るのが分かる。
それぞれの説明

Message:メッセージ
これは特に説明するほどでもないメッセージ。多人数で使用する場合には、連絡事項として、一人で使う場合でもメモとして利用できる。

Ticket:チケット
これはタスクや課題、などと解釈すると良い。実際に作業や実務等のやらなければならない事項を列挙するための物。
例えば、不具合の連絡を受け、それを修正するために課題としてTicketを作成する。等。
各チケットはどれかのマイルストーン達成のために行われる物が殆どとなるため、マイルストーンとの関連付けが出来る。

チケットは作成されたら、誰が担当するのか決めアサインする。
その後実際のタスク完了後に、テスト、確認等を行い、クローズして終わる。

この、経過は各タスクにコメントとして随時追記していくことができる。

Milestone:マイルストーン
これは、プロジェクトの最終目的までに多数の段階を作って、今プロジェクトがどこまで進んでいるのかという目安になるための進捗段階地点を指すもの。
使い方は決まっていないが、今回のソフトウェアの開発プロジェクトで有れば最終目的地が決まっていない物も有る。その場合はMilestoneをリリースするバージョンに置き換えて使えば良い。

マイルストーンには各タスクが関連付けられ、その全てのタスクがクローズされたらMilestoneが達成されたと解釈する。


■使用例
私の場合、どこかで見て真似ているやり方なのだが、マイルストーンに「検討中(期限なし)」「実行予定(期限なし)」の二つを作り。
次に「Version 2.5」などの各バージョンのマイルストーンを作成する。

不具合の報告や要望などをTicketに書き込み、Ticketのコメント欄でやり取りしながら、検討中や実行予定、または次のバージョンまでにやる物はそのバージョンのマイルストーンに関連付ける。
という使い方がメインだ。


このようにプロジェクト管理ソフトでは、大抵の物がタスクとマイルストーンと言う構成で作られている事が多いので、フリーで使用できるUnfuddle等で使い倒しておけば、何かと今後役に立つかもしれない。

■その他のサービス
この手のサービスは山ほど有りそうなのだが、私が使ってみて勝手にランクインした4つを挙げておく。
私がTortoisSVNとTortoiseGitがお気に入りなので、これらが使えて、今回紹介したような使い方が出来る物に絞っている。

今回紹介した物。リビジョン管理(SVN・Gitの複数のリポジトリ)とプロジェクト管理(1プロジェクト)がフリーで利用可能。絶対フリーじゃないと駄目と言う方には超お勧め。

私がメインで利用しているサービス。フリーではオープンソース限定になる。有料版だと、かなり高機能なので、少し(1プロジェクト1ユーザーで、3.3ドル)位なら払っていいという方には超超お勧めサービスです。
しかも、ここは有料版にすると、アカウント無しのユーザーに対してのアクセス権等を設定出来るので、私の場合は、シェアウェアの不具合報告をここのMessageで受け取り、プロジェクト管理に反映させ、開発したら、リビジョン番号をここのリポジトリと合わせて発行するという使い方をしてる。
公開可能なWikiやバーンダウンチャート等も付いて、見やすく出来ている。

Subversionリポジトリのみのサービス。プロジェクト管理とかは不要だという方にお勧め。
フリーでも3ユーザー100MBまでは利用できる。

ここは日本のサービスだが、かなり良くできている。フリーだといまいちかもしれないが、有料版は使いやすそうな気配。

2009年9月29日火曜日

ネットでバージョン管理 No.2

回(ネットでバージョン管理 No.1の続き・・・

前回までで、Unfuddleに自分専用のリポジトリを作成し、それを利用するためのソフトをインストールしている。
次に、実際に利用する方法を紹介する。

■ローカルにリポジトリを作成

1. 適当な場所にソースコードを置くフォルダを作成し、右クリック。もしくは、既にソースコードが置いてあるフォルダで右クリック。


2. 「Gitここにリポジトリを作成(Y)」を選択。すると、以下のようなダイアログが表示され、そのフォルダの中にリポジトリが作成される。
※ここで注意が必要なのは、このダイアログでフォルダ名が文字化けしている事。
日本語のフォルダ名も使用できるのだが、文字によっては誤動作の原因となる場合が有る。たとえばカタカナの”ソ”を含んでいると上手く動かないので注意、他にもこのような文字がいくつか有るので、エラーが出たらこの記事を思い出して欲しい。
上の例ではあえてフォルダ名を「ソースコード」としているが、これではエラーがでるので「コード」に変更し、エラーが出ないのを確認できる。
この他、ファイル名でも同じ事が起きる可能性が有るので出来るだけ日本語ファイル名を避けた方が無難だ。(ファイルの中身に有る”ソ”等の文字ではこのような事は起きない)
使用している文字コードに16進表記で 5c (バックスラッシュ)を含む文字は誤動作の原因になり、以下の40文字が有る。
―、ソ、Ы、Ⅸ、噂、浬、欺、圭、構、蚕 十、申、曾、箪、貼、能、表、暴、予、禄 兔、喀、媾、彌、拿、杤、歃、濬、畚、秉 綵、臀、藹、觸、軆、鐔、饅、鷭、偆、砡
これで、ローカルのGitリポジトリが出来た。

3. 次にこのリポジトリと「ネットでバージョン管理 No.1」で作成したunfuddleのリポジトリを関連付ける必要が有る。このフォルダを右クリックし、「TortoiseGit → 設定(S)」をクリック。
4. この設定ダイアログ左の「Remote」(1)の項目を選択。

5. 「Add New」(2)をクリックし、右側(3)のRemote:欄にUnfuddleのリポジトリだと分かるように適当な名前を付ける。その下に有るUrl:欄にUnfuddleのリポジトリ画面に有るメールアドレスのようなリポジトリのアドレス(下図、テスト(test)の下に有る「git@~.git」の文字)をコピペする。



6. Putty Key:欄に「ネットでバージョン管理 No.1」キーの作成と登録5. で保存した秘密キーファイルのパスを入力し、下の「適用」ボタンを押す。
これで、フォルダの設定と関連付けが全て完了。
ここまでで、UnfuddleのリポジトリがWindowsと統合されたような利用が可能な状態になった。

■ソースコードの登録
リポジトリを作成したフォルダの中にこれからバージョンの管理を行いたいシステムのソースコードや関連したフォルダを置き、右クリックのメニューから「Git 追加(A)...」をクリックし、追加したコードにチェックが付いているのを確認し(不要な物はチェックを外し)、「OK」ボタンで登録される。

クリックで拡大

登録されたといっても、管理対象になったと言う意味で、”コミット”しない限りリポジトリ内にコードは保存されてはいない。

■コミット&プッシュ
では、そのままの状態で一度コミットしてみよう。
右クリックのメニューから、「Git コミット -> "master" ...」をクリック。
すると、コミットするダイアログが表示される。メッセージ:の欄に、このコミットで何が更新されるのかの説明や、現在のバージョンに関するコメント等を書く。
今回の場合は「最初のバージョン」等と書いておけば良いだろう。
※このメッセージは、後に各バージョンの比較や変更点の確認等をするときに自分(や一緒に開発している人)が見る物なので、後で見て理解できるように書いておく。
これで、最初のコミットが行われ、リポジトリにソースコードが登録された。
だが、実はこの状態はローカルのみにしか保存されていない。

プッシュして初めてインターネット側のリポジトリに登録される。
コミットが終わると下のようなダイアログが出るので、右下の「Push」ボタンでそのまま続けてサーバーにプッシュする事も出来る。(右クリックから「Git Push...」でも出来る)


プッシュ画面では、先ほどサーバーとの関連付けが完了しているので「Remote:Unfuddle」と表示されているとハズなので、そのまま「OK」ボタンを押せば、プッシュ(Unfuddleに有るリポジトリにローカルのリポジトリの変更点が反映される)
※初めてのプッシュ時にはこのサーバー(unfuddle)を信頼するかどうかを聞いてきます。
今後もずっと信頼する場合は「はい」、今回だけ信頼する場合は「いいえ」、信頼しない場合は「×」ボタンを押す。私は面倒臭がりなのでいつも「はい」にしている。
これで、プッシュ完了だ。

■確認
unfuddleのサイトに行き、リポジトリ一覧を表示してみよう。

クリックで拡大

図のようにリポジトリの右側に「今日は1回コミットシタよ」と言うメッセージ付きのマークが表示された。

このグラフは一番右が今日、左に行くにつれて過去にさかのぼるコミット回数をグラフにした物の様だ。

一人で使う分にはあまり使わない機能だが、多人数開発で管理者が確認するには手早くて良いかもしれない。

これで一通りの流れの説明が終わった。

普段の使用法方としては、編集・コミット・プッシュの繰り返しだ。

次回、「ネットでバージョン管理 No.3」では、便利な使い方について書こうと思う。

2009年9月28日月曜日

ネットでバージョン管理 No.1

システムの開発をする上で最も重要になるのが、ソースのバージョン管理だ。
私もバージョン管理システムを利用しているが、具体的には「SVN(Subversion)」と「Git」の2つを主に利用している。

バージョン管理システムの基本的な動作は、以下のようになっている。
サーバーにリポジトリを置き、その中にプログラムソースファイルを保存しておく。
リポジトリ内のファイルをクライアント側に編集用としてコピーする。
編集する場合はクライアントに有るソースを編集し、編集が終わればリポジトリへ戻してあげる(これをコミットといい、リポジトリ内のソースを次のバージョンへ更新する)。
リポジトリに保存されたソースファイルは変更点等(コミット毎)の履歴を持っているので、後から過去の編集箇所を確認したり元に戻す事が出来る。

このバージョン管理システムを使えば、コミットする度に新しいリビジョン番号と言うのが発行され、変更点等とともに保存されるので、リリースするシステムのバージョン番号にこのリビジョン番号を追加しておけば、いつどのように変更したバージョンの物かがすぐに分かるというものだ。

SVN
基本的にCVSの機能を持ったバージョン管理システムだが、CVSよりも利用しやすくなっている。
「TortoisSVN」というSubversionクライアントを使う方法がお勧めで、Windowsのエクスプローラと統合されてかなり使いやすい。
Gitに比べると単純な構成になっているのでどちらかと言うとこのSVNの方がとっつきやすくて簡単。

Git
これもSVNと似通った機能だが、大きく違う点が一つ。
SVNがリポジトリをサーバーのみに持っているのに対してGitは各クライアント側にもリポジトリが持てる点だ。
操作方法としては、コミットした後にプッシュするという動作が追加される。

ここでのコミットはクライアントに持っているリポジトリを更新する事を指し、プッシュというのはクライアントに持っているリポジトリをサーバー側のリポジトリへ反映させる事を指す。
SVNと同じく「TortoisGit」というGitクライアントを使う方法がお勧めで、Windowsのエクスプローラと統合されてかなり使いやすい。

実際に使ってみる
まずSVNにしろGitにしろ、”リポジトリ”という物を用意しなければ始まらない。
このリポジトリと言うのが、各種ソースコードのリビジョン番号と変更点を管理してくれる。
既にリポジトリを持っている人はそれを使えば良いのだが、ここではタイトルのようにインターネット上に有るリポジトリを利用してみる事にする。

私自身インターネット上に有るいろんなリポジトリサービスを利用してみたが、有償の物、無償の物、付加価値が付いた物、そして保存できる容量にも色々あり、用途に応じて使い分けられるほど種類が豊富なようだ。
今回は無料で使えて機能的にもお勧めな「unfuddle」を例に挙げてみる。
このサイトはとても便利なのだが、ページが英語のみなので、とりあえず日本語で手順を書いておく事にする。
まずは以下の手順でアカウントを作成してみる。

■アカウントの作成手順
1. http://unfuddle.com/ へアクセスし、「Sign up」からアカウントを作成する。

2. 「Private FREE」というプランを選択。

3. 「Subdomain」の欄に好きなURLになる文字を入力。

4. 「Title」の欄には好きな名前を付ける(日本語も可)

5. 「Email」へメールアドレスを記入

6. 「Username」へログイン時に利用するアカウントIDを記入

7. 「Password」と「(Confirm)」へログイン時のパスワードを記入

8. 規約に同意したら「Continue」をクリック


すると、自分専用URLが作成され、そのトップページに遷移します。
ページ上部にタブが有り以下のようになっている。

■各タブの説明

Dashbord … アカウントの状態やプロジェクトの概要がまとめられたページ

Projects … Unfuddleにはリポジトリだけでなく標準でプロジェクト管理システムが搭載されており、ここではそのプロジェクトの一覧が表示される。今回はFreeプランを選択しているので、プロジェクトは1つしか持てない。初期では「My First Project」と言う名前のプロジェクトが用意されている。(後述)

Repositories … リポジトリ一覧。Unfuddleの良い所として、このリポジトリが複数利用できる点が有る。しかもSVN、Gitの両者に対応している。

Tickets … プロジェクト管理内のタスク一覧。フリープランで有ればプロジェクトのページから利用すれば良い事だが、複数プロジェクトが利用できる有償プランで使うためにここに有るのだろう。

People … 利用者一覧。本人以外にもう一人ユーザーを招待出来る。開発者二人で一つのプロジェクトおよびリポジトリを利用する場合等もこのフリープランで利用可能。

Settings … 各種設定。プランの変更やタイムゾーンの変更等。


プロジェクト管理も優れていて使いやすいのだが、話を進めるため、さっそくリポジトリを作成してみよう。

■リポジトリの作成
1. 「Repositories」タブで「New Repository」をクリックすると登録画面が表示される。

2. 「Title」にリポジトリの名前を記入。作成するシステムの名前等を入力すると良い。(日本語も可)

3. 「Abbreviation」はリポジトリにアクセスする際に利用するURLの一部になる。

4. 「Description」は説明文章で、これはオプション。

5. 「Type」でリポジトリの種類を”SVN”と”Git”のどちらかを選択する。フリープランではSSL通信をサポートしていないのだが、Gitを利用するとSSHでのセキュア通信が利用できるので、個人的にはフリープランの場合はGitをお勧めする。

6. 「Create Repository」をクリックすると自分専用のリポジトリが作成される。


さて、ここから一度クライアントのPCの設定に入る。
リポジトリにアクセスするためにSVNリポジトリであればSubversionクライアント、GitリポジトリであればGitクライアントと言うソフトをインストールしておかなければならない。

■Gitクライアント
からダウンロードすると良いだろう。

・TortoiseGit(英語版、インストーラ)
・TortoiseGit日本語言語ファイル
・msysgitインストーラ
の三つをダウンロードし、全てをインストールする。(各ファイルを実行するだけなので、インストール手順は割愛します)

「msysgit」というのがGitクライアントの本体で、「TortoiseGit」というのが、Windows上で操作しやすくするためのGit*Windows統合ソフト。
ちなみにSVNの場合は
にTortoiseSVNと言うのが有りますので、これを使うと便利です。
Gitクライアントのインストールが終わったら、さっそくリポジトリにアクセスしたいところですが、その前に、通信を暗号化するキーとなるファイルを作成しておく必要が有る。
キーと言うのはSSH通信の暗号化を行うための鍵をさらに暗号化するための鍵。
公開錠・秘密錠のセットで暗号化と複合化を行い、公開錠で暗号化した物は秘密錠でしか元に戻せず、さらにこれを利用して通信用の共通暗号化錠を受け取り、この共通錠でセキュアな通信を行います。
この最初の鍵のやり取りを暗号化するための秘密錠と公開錠を作成し、公開錠をUnfuddleに登録します。
TortoiseGitをインストールしたら、スタートメニューに「Puttygen」と言うキーの作成ソフトが有ると思うので、これを使用してキーを作成。

■キーの作成と登録
1. Puttygenを起動


2. 「Generate」ボタンをクリック

3. Keyの欄のプログレスバーがいっぱいになるまで、PuTTY Key Generatorのウインドウ上でマウスを適当に動かします。(このマウスの動きが無作為な鍵の生成に利用されるので同じ鍵は、ほぼ二度と作成されません。)

4. Keyの欄に例のような公開錠(例のような文字列)が表示されます。これをUnfuddleサーバーに登録する事になりますのでコピーしておきます。
例:
 ssh-rsa
 AAAAB3~~FU= rsa-key-20090928

5. 秘密錠を保存します。「Save private key」をクリックして、自分専用のフォルダ(マイドキュメント)等に保存します。※このキーファイルは外部に流出しないように注意して下さい。

6. Unfuddleに戻り、作成した公開キーを登録します。「People」タブから、自分のアカウント(ピンクの枠内)の「Edit」をクリックします。

7. 「Edit Person」というページが開くので、下の方に有る「New Public Key...」をクリックします。


8. 「Title」欄に自分の公開錠である事が分かるよう、この鍵に適当に名前を付けます。

9. 「Value」欄に先ほど 4.でコピーした公開錠を貼り付けます。

10. 「Add」ボタンを押すと登録されます。(右下の「Save changes」を押さなくても登録されます。)


これで、UnfuddleのGitリポジトリの利用環境が整った。

ここまで長かったが、やっとここからがGitの利用方法となる。

■ソースコードの登録
次回、「ネットでバージョン管理 No.2」へ続く