スポンサーリンク

初心者用Git入門のすゝめ(1):バージョン管理システムとは?GitとSVNは何が違うの?

こんにちは。みなみです。

今回はGit未経験者向けにGitの基本的な概念や使い方についてご紹介します!

…その前にこの記事を書くことになった経緯を軽くご紹介します。

今年から転職して新しい会社に入ったんですが、何年も続くプロジェクトが多い会社で、プロジェクトのバージョン管理がSVNだったりそもそもバージョン管理していなかったりと色々と大変な状況にあることが判明しました。

しかも私がいるのは人件費が安いことで便利と言われるオフショア開発の会社、つまり一般的にエンジニアのスキルやプロジェクト管理の品質は日本のモノと比べて低い傾向にあります。

そんな状況でSVNで運用すると、あからさまに描きかけの汚いコードがtrunkにアップされたり、まともに動作もしない状況になったりと色々な惨事が発生します…。

入社してから定期的に「いやこれはあかんでしょ」と上司に物言いし、とうとう今月から始まる管理するプロジェクトで「Git導入して良いよ」ということになりました!言ってみるもんですね。

ただし、全社的にSVN運用してた会社だからGit経験者は皆無!ということで今回はGit未経験者でもGitが理解できるような情報を整理していきます。まずブログで情報整理して、そのうち社内展開用にパワポかなんか資料作る予定です。

Gitのあれこれ説明すると情報量が非常に多くなってしまうので、何回かに分割していきますね。

今回は「そもそもGitって何?」という疑問や「SVNじゃダメなの?」という疑問に答えていきます。

スポンサーリンク

GitとSVNってそもそも何?

まず大前提。GitとSVNの基本情報からご紹介します。

GitとSVNはバージョン管理システムと呼ばれるシステムで、要は過去の変更履歴や内容をいつでも確認できるように管理するシステムです。

バージョン管理システムとは?

通常テキストファイル等を編集して保存した場合、「消しちゃいけない情報消しちゃった!昨日の状態に戻したい!」となっても簡単には戻せませんよね。

そんな時でも大丈夫!バージョン管理システムを使っていれば、簡単に過去の状態を復元できます

バージョン管理システムは「誰が」「いつ」「何を」変更したかの履歴を残してくれるので、「○日前の状態に戻したい」「○日前に変更した内容を確認したい」「○日前に変更した人が誰か確認したい」などの作業がいつでも簡単にできます。

分散型バージョン管理システム vs 集中型バージョン管理システム

それではGitとSVNは何が違うのでしょうか?

GitとSVNは両方ともバージョン管理システムですが、肝心のバージョンを管理する手法が違います。Gitは分散型バージョン管理システム、SVNは集中型バージョン管理システムという手法でバージョン管理を行っています。

名前だけ聞くと難しそうな感じですが、管理方法は至ってシンプルです。それぞれ個別にみていきましょう。

SVNの集中型バージョン管理システム

SVNは集中型バージョン管理システムという手法を採用しています。

集中型バージョン管理システムはサーバー上にある1つのプロジェクトフォルダをみんなが参照します。開発者はみんなサーバー上に保存されたプロジェクトフォルダを自分のPCにコピーして作業し、作業が終わったらサーバー上に変更内容をアップロードします。

注意点として、集中型バージョン管理システムではバージョンの管理(=変更履歴の管理)はサーバー上に上がっているプロジェクトフォルダ内でのみ行われます。自分のPCにあるコピーはあくまでプロジェクトファイルのコピーであり、過去の変更記録などは存在しません。

つまり開発者が自分のPC内でどんなに長い時間かけて大量の変更を加えたとしても、その変更内容がサーバー上のプロジェクトフォルダにアップロードされるまで変更履歴の管理は一切行われません

そのためSVNでは何らかの変更をバージョン管理したい場合、毎回サーバー上のプロジェクトフォルダに変更内容をアップロードしないといけません。

ですが通常はバグが残っていたり中途半端な状態のソースコードはプロジェクトフォルダに取り込めません。(一般的にサーバー上のプロジェクトフォルダを変更すると本番環境やリリース済みのアプリケーションに影響が出ます。)なので頻繁にバージョンを管理することは中々難しく、どうしても案件の開発終了時など、週単位や月単位の管理になってしまいがちです。

SVN感想

SVNの集中型バージョン管理システムは、個人的に途中セーブが一切存在しないRPGのようなものだと思っています。難しい処理を実装(ボス戦)しようとして失敗したら最終セーブポイント(サーバー上にアップされているプロジェクトフォルダ)からやり直しとなります。ボス戦突入前のセーブポイントは一切存在せず、イベントクリア時にのみセーブ可能なイメージです。

1つのものを1人や少人数で担当分けして開発する分にはそれでも行けるでしょうが、複数の作業を並行して行う場合や、複数人で同時に関連する箇所を更新する場合はトラブルが発生する確率が高く、非常に大変になりがちです…。

Gitの分散型バージョン管理システム

Gitは分散型バージョン管理システムという手法を採用しています。

分散型バージョン管理システムはサーバー上にあるプロジェクトフォルダをみんなが自分のPCに複製します。分散型バージョン管理システムは、集中型バージョン管理システムと違いプロジェクトの情報を全て自分のPCに複製します。

つまりサーバー上にあるプロジェクトフォルダ、自分のPC内のプロジェクトフォルダそれぞれに変更履歴など、バージョン情報が存在します。

そのため開発者は任意のタイミングで状態を保存することができ、任意のタイミングで保存した状態を復元することができます。

またこれは分散型バージョン管理システムというよりGitの機能ですが、Gitではブランチという作業コピーをとって開発します。サーバーにアップロードする際も特定のブランチでの変更としてアップロードされるため、作業途中のプロジェクトも(本番環境やリリース済みのアプリケーションに影響及ぼすことなく)サーバー上にアップロードすることができます。

ブランチがどのようなものかは後ほどご詳しく紹介しますが、ゲームでいうと「複数のセーブデータを分けて管理する」みたいなイメージです。新しくブランチを作る=セーブデータを上書きしないで、新しくセーブデータを作成する感じです。

Git感想

Gitは自分のPCにあるプロジェクトフォルダでも変更履歴が管理されるため、非常に気軽に自分の変更を保存することができます。

SVNがセーブが存在しないRPGなら、Gitはメニュー画面からいつでもセーブできるノベルゲームな感じですね。

分岐ミスったらいつでも戻れますし、セーブスロットも無限にあるので分岐やイベントシーンの度にセーブできます。

まとめ:GitとSVNはどっちが良いの?

個人的にはGit一択です。

ただSVNを好む人ももちろんいますし、古くから運用されているプロジェクトはSVN運用が続いていたりと、SVNの需要も確かに存在しています。

それでも私はGitを推します。

SVN管理しているプロジェクトでありがちなトラブルは「コミット漏れ」「サーバー上のソースコードに作業中っぽい汚いソースコードが含まれている」「PC内のソースコードとサーバー上のソースコードの差分が多すぎて確認できない(頻繁にバージョン管理できていない)」等があります。

またSVNだとサーバー上にアップロード=プロジェクトフォルダに変更を取り込むということになるので、どうしてもコードレビューがやりづらいんですよね…。なので頻繁に変更履歴を管理したい場合、ソースを綺麗に保ちたい場合、コードレビューを行いたい場合はGitを選びましょう。

Gitは「分かりづらいから導入したくない」とか「今までの方法(SVN)変えたくないから」という理由で嫌われることがありますが。Gitは難しくないので覚えましょう。

そりゃあGitの原理とか、コマンド全部覚えようとかしたら超絶大変です。でもGitでプロジェクト運用するのに本当に必要なのは5つぐらいのコマンドとちょっとした用語だけですあとなんかある度にぐぐれば速攻で解決します。

それでは次回はGitでプロジェクト運用するための基本情報をご紹介します!

コメント

タイトルとURLをコピーしました