バージョン管理ツールの使い方

なぜ使うのか?

同じデータを複数人で変更すると、他人の変更を上書いてしまったり
誰が何を変更したの分からなくなったりすることがあります。
他人が危険な変更をすることもあるかも知れません。

1人で作業をしているときにも、後戻りできない変更をしてしまって
絶望的な気持ちになることもあるでしょう。

これらの問題を解決できるのがバージョン管理ツールです。
以下のような良いことがあります。

  • 消したデータを復活できる
  • いつプロジェクトが壊れてしまったのか調べられる
  • 意図しない変更を防げる

ぜひ使いこなして、ゆとりのある開発をしていきましょう!

各概念の説明

gitと視覚化ツール

開発ではバージョン管理にgitを使用しています。

ちなみに他のバージョン管理ツールもあります。

gitを操作するには通常はコマンドラインを使用します。
黒い画面に文字が表示される、いかにもハッカーが使いそうなツールです。

視覚化したほうが作業が捗るという人も多いようで、たくさんの視覚化ソフトウェアが生まれました。
以下に例をあげます。だいたい無料です。

注意したいのはこれらのツールはgitのコマンドを操作しやすくしているだけだという点です。
例えばユーザはアイコンをクリックなどをすることで、git push などのコマンドを入力したことと同じで、視覚化ツールを通してgitのコマンドを入力していると考えてください。

ときおり視覚化ツールで表示されるエラーの文章は、そのままgitで表示されるエラーの文章と同じです。

CUIだけを使用してgitを操作している方も大勢います。
gitのコマンドの一覧を覗いておくと理解の助けになるのでおすすめです。

共有する仕組み

ほとんどのバージョン管理ツールは、サーバに本体を置き、それらをチームメンバーで共有します。サーバ側の本体を各自のPC環境に分身のようなものを作って作業します。
(複製に近いのですが少し概念が異なるように思えます)

サーバの本体と自分の環境が常に「対になっている」と理解してください。
この「対」をつくる作業をクローンといいます。

自分が変更をした場合は、サーバに反映させないと他人と共有できません。サーバに反映させることをプッシュといいます。
逆に、他人の新しい変更を見る場合はサーバの状況を自分の環境に反映させる必要があります。これをするにはフェッチプルを行います。

ホスティングサービス

さて、前記のサーバとはどこにあるのでしょうか?

自分でサーバを用意することもできますが、ホスティングサービスを使うのも良いでしょう。基本的にwebのサービスのような見た目で、自動処理や、SNSのような機能を備えているものもあります。基本は無料ですが、上位の機能を使う場合は有料です。以下に例をあげます。

  • GitHub // SNS機能が充実, 公開情報と相性が良い
  • Bitbucket // Atlassianの他のツールと連携
  • GitLab // 自前サーバに展開するのが容易, 無料の先駆け
  • Backlog // 日本製?タスク管理ツールと統合されている

※ややこしいですが、上記のサービスを自前サーバに展開できるサービスも各社行っています

ブランチ

gitにはブランチという概念があります。開発では必ず使います。
既にたくさんの説明資料がwebにあるので、各自、調べてみてください。

作業ブランチ

自分がどのブランチにいるかは、非常に重要です。
なぜなら、各種コマンドは作業ブランチに対して行うためです。

常に確認するようにお願いします。

環境の用意

ホスティングサービスのアカウントを作って管理者にアカウント名を知らせてください。なんのホスティングサービスを使っているかはプロジェクトごとに変わります。

視覚化ツールはお好みのものがあれば自由に使ってください。
こだわりがなければ、Sourcetreeにしてください。

クローンを通して、サーバの状態を自分のPCに「対」を作ります。

運用の流れ

0. フェッチ

フェッチとはサーバの状態を自分のPCの「対」に反映させることです。
無害なので何か作業する前には、ひとまず使いましょう!

1. 作業ブランチの作成

最新のMasterから、作業ブランチを作成します。
Masterを作業ブランチに選択し、フェッチし、プルしてください。

命名ルールは下記の通りです。

[作業タスク名] + _ + [自分の名前]

例:improve-main-game_hamada

ブランチは、Sourcetreeからでも、ホスティングサービスからでも作れます。

2. 開発

開発の過程で、新たにファイルを作成したり、変更したり、削除したりするでしょう。その変更をgitは感知します。

3. コミット

前記の変更を、ローカルのgitに反映させることをコミットと言います。
変更を記録するファイルを選んでください。(ステージという)

gitに反映すると記録が残りますので、何かあったときは、いつでもこの状態に戻せます。きりが良いところまで作業したときは是非、積極的にコミットしてください。

オフラインでも使えます。

4. プッシュ

ローカルの「対」をサーバに反映させます。

初心者は、しばしばここでエラーが起き、プッシュができません。

以下のような原因が考えられますので、対処してみてください。

  • サーバ側に新しい変更がある => フェッチ+プルする
    ※ master等、同じブランチを複数人で触っているときに起こる
  • ホスティングサービスへログインできない状態
  • オンライン状態でない

コンフリクト(衝突)が起きてしまった場合は、初心者ではややこしいので管理者に助けてもらってください。

5. プルリクエストの作成

この作業ではSouretreeを使用しません

ホスティングサービスからプルリクエストを作成してください。
※サービスにより名称が異なり、マージリクエストと言う場合もあります

プルリクエストは、git自体の仕組みではなく、各サービスの仕組みです。
一連の作業を、他人にレビューしてもらったり、自分で見直すのに便利です。
マージ先はmasterにしてください。

一旦マージする全ファイルを眺めてみて変なファイルが入っていないか確認してください。もし見つけた場合は修正ができますので、ローカルで修正し、再度コミット+プッシュをしてください。

本プロジェクトではレビューアーを設けませんが、心配な場合は他の方に依頼してください。

何も問題がなければホスティングサービスからmasterにマージができます。

<コンフリクト(競合)が起こった場合>

コンフリクトの解決は初心者では難しいです。
管理者に助けを求めてください。

6. 削除

マージしたブランチを再利用しないでください。
プルリクエストが終わるたびに、サーバ側と自分のPCの「対」のブランチを消しましょう。

ホスティングサービスで削除の案内が表示されますので、サーバのブランチを削除してください。

その後、自分のPCの「対」のブランチも削除してください。
自分の選択ブランチは削除できませんのでmaster等に変更してください。

同じ名前のブランチが残っていると、新たに同名のブランチは作成できません。

FAQ

  • 他人の変更が、視覚化ツールで確認できない
    => フェッチする(最新のサーバの情報がないのが原因)
    => 他人がコミットしたが、プッシュしていない

  • 自分のPCのブランチを削除できない
    => 作業ブランチは削除できないので別のブランチを選んでから消す

  • サーバのブランチを削除したが、残っているように見える
    => 正常, ブランチの削除は記録を消すことでなくブランチのリストから消えるだけ, ブランチの復活も可能

  • 視覚化ツールでクローンができない
    => ホスティングサービスにログインできていない
    ※経験的にややこしい原因のことが多いので管理者に相談する
    => ローカルの指定パスが有効でない(場所を変えて実験してみる)
    => オフラインだった

  • ブランチを作るメリットは?
    => 他人を気にせず実験的なコードをコミットできる
    => 常にサーバの状態を自分のPCに反映させなくてよい, 仮にmasterのみで運用すると、毎回フェッチとプルしないと、コミットするときにエラーがでてしまう, 手間だし忘れることもある, またコミットのタイミングで衝突がわかり驚く
    => ブランチ名を決めることで一連の作業を明確化できる
    => プルリクエストが作成できる, じっくりレビューしてからmasterに反映できる, 事前に衝突の可能性が分る(余裕をもって修正できる)