「あ、やばい!昨日まで動いてたのに、修正したら壊れちゃった!前の状態に戻したい!」って焦ったこと、ない?パソコンでレポートやプログラムを作っているとき、うっかり大事な部分を消してしまったり、直したら逆におかしくなったり…そういうヒヤヒヤ経験って誰でも一度はあるよね。実はそのモヤモヤを全部解決してくれる仕組みが「バージョン管理」なんだ。この記事を読めば、バージョン管理がどんな仕組みで、どうして仕事や開発の現場でなくてはならないものになっているのかが、スッキリわかるよ!
- バージョン管理はファイルの変更をすべて記録して、いつでも過去の状態に戻せる仕組みのことだよ
- 「セーブ(コミット)」を繰り返すことで、どこで何を変えたかが全部わかるようになるよ
- チームで使えば複数人の変更を自動でひとつに合体(マージ)できるから、共同作業がグッとラクになるよ
もうちょっと詳しく
バージョン管理の世界で今いちばん使われているのが「Git」というツールで、2005年にLinuxというOSを作ったリーナス・トーバルズという人が開発したんだ。Gitはパソコンの中でひっそり動いて、ファイルに変更があるたびに「何が・いつ・誰によって変わったか」を全部覚えてくれる。この記録のひとまとまりのことを「リポジトリ」って呼ぶよ。つまり「変更履歴が全部入った引き出し」みたいなもの。このリポジトリをGitHubというサービスを使ってインターネット上に置いておけば、世界中のどこからでもチームで同じファイルを管理できるようになるんだ。個人のメモ帳からプロのシステム開発まで、スケールを問わず使える万能ツールだよ。
GitとGitHubは別物!Gitはパソコン上のツール、GitHubはGitをネット上で管理できるWebサービスだよ。
⚠️ よくある勘違い
→ プログラムだけじゃなく、デザインファイル・文書・写真など、あらゆるファイルに使えるのに「自分には関係ない」と思い込んでしまうのはもったいない!
→ 企画書・小説・デザイン・スプレッドシートなど、変更履歴を残したいファイルなら何でも管理できる。ライターもデザイナーも活用しているよ!
[toc]
バージョン管理ってそもそもなに?ゲームのセーブと同じ考え方
「上書き保存」の怖さを知ってる?
Wordやメモ帳でレポートを書いているとき、「上書き保存」してしまったあとに「やっぱり前の文章のほうがよかった!」ってなったことない? Ctrl+Zで戻れることもあるけど、いったんファイルを閉じてしまったら、もうアウト。前の内容は永遠に消えてしまう。これが「上書き保存の恐怖」だよね。
バージョン管理は、この恐怖を根本から解決してくれる仕組みだよ。ファイルを「セーブ(コミット)」するたびに、そのときの状態がまるごと記録される。だから1週間前の状態でも、1ヶ月前の状態でも、「あの頃に戻りたい!」と思ったときにいつでも戻せるんだ。上書きして消えることがなくなるから、思い切って編集できるようになるよ。
バージョン管理は「歴史の教科書」みたいなもの
バージョン管理が記録するのは「ファイルの中身」だけじゃないよ。「いつ変えたか」「誰が変えたか」「何のために変えたか(コメント)」まで全部残るんだ。これって歴史の教科書みたいだよね。「〇年〇月に〇〇が〇〇した」って記録が残っている感じ。この記録があると、あとから「なんでここ変えたんだっけ?」って振り返るときにめちゃくちゃ便利なんだ。チームで作業しているときは「この変更、誰がやったの?」って確認することも多いから、この記録はとくに重要になってくるよ。
「コミット」と「ブランチ」をわかりやすく理解しよう
コミット=「ここまでOK!」のセーブ操作
バージョン管理で使ういちばん基本の操作が「コミット」だよ。つまり「ある時点の変更を記録すること」ということ。ゲームで言えばセーブポイント。勉強で言えば「ここまで復習した!」というしおり。コミットするたびに、その時点のスナップショット(写真みたいなもの)が残るんだ。
コミットするとき、「何をしたか」を短いメモとして書くのが習慣になってるよ。たとえば「ログイン機能を追加した」とか「タイトルのデザインを修正した」とか。このメモのことをコミットメッセージって言う。あとから見返したとき、このメモがあれば「あ、このタイミングに戻ればいいな」ってすぐわかるんだ。
ブランチ=「試し書きのノート」を別に作る
バージョン管理のもうひとつの超重要な概念が「ブランチ」だよ。ブランチとは、つまり「メインのファイルをコピーして、別の作業スペースで試してみること」ということ。木の「枝分かれ」のイメージから「ブランチ(枝)」って呼ぶんだ。
たとえば料理のレシピを考えてみよう。今使っている「基本のカレーレシピ」はそのままにして、「スパイスを増やしたバージョン」を別のノートに書いて試す感じ。スパイスバージョンがおいしければメインに取り込む(マージ)、イマイチなら捨てればいい。メインのレシピは一切汚れていないから安心でしょ?ブランチも同じで、試したいことを別の空間でやってみて、よければ本番に反映させる、悪ければそのまま捨てられるんだ。
チームで使うとこんなに変わる!共同作業の革命
「最新版どれ?」問題がなくなる
学校でグループ発表の資料を作るとき、こんなことない?「最終版.pptx」「最終版(修正済み).pptx」「最終版ほんとに最後.pptx」…どれが本当の最終版かわからなくなるやつ。あれ、バージョン管理を使えばゼロになるんだよ。
バージョン管理ツールを使うと、ファイルはひとつだけ。変更するたびに履歴が積み重なっていくから、「最新版はどれ?」って迷う必要がなくなる。チームの全員が同じ場所にアクセスして、常に最新の状態を見ることができるんだ。「あれ、Aさんが変えたやつ、私のパソコンには反映されてない!」みたいなトラブルもなくなるよ。
同時作業ができて、しかも衝突しない
バージョン管理のすごいところは、複数人が同じファイルを同時に編集できること。Aさんが「第1章」を編集している間に、Bさんが「第3章」を編集してOK。あとでふたつの変更をマージ(合体)すれば、どちらの変更も反映されたファイルができあがるんだ。
もし同じ部分をふたりが編集してしまったときは「コンフリクト(衝突)」という状態になるよ。つまり「どちらの変更を使うか決めてください」という状態のこと。コンフリクトが起きたら、自分たちで話し合って「こっちの変更を使おう」と決めてから合体させる。衝突をちゃんと人間が確認してから反映できるから、大切な変更が勝手に消えてしまうことがないんだよ。
バージョン管理がない世界はどれだけ大変?
「消えた!」「壊れた!」の恐怖が毎日ある
バージョン管理がない世界を想像してみよう。プログラムを修正して動かしてみたら、今まで動いていた機能が壊れた。でも直前にどこをどう変えたか、もう覚えていない。昨日のファイルもすでに上書き保存してしまった。こうなると、もうお手上げ。一から作り直すしかないかもしれないんだ。
これ、実際に昔のソフト開発の現場では日常茶飯事だったんだよ。バージョン管理ツールが普及する前は、こういった事故が頻繁に起きていた。今ではバージョン管理があるおかげで「最悪でも昨日の状態に戻せる」という安心感がある。エンジニアが大胆に新機能を試したり、思い切ってコードを書き直したりできるのも、この安心感があるからなんだ。
バージョン管理なしのチーム作業は「電話ゲーム」状態
チームで作業する場合はさらに大変。バージョン管理がなければ、誰かがメールでファイルを送り合うしかない。でもAさんがBさんに送って、BさんがCさんに送って…となると、「どれが最新?」「Aさんの変更、Cさんの版には入ってる?」みたいな混乱が生まれる。まるで「伝言ゲーム」で少しずつ内容が変わっていく感じ。バージョン管理があれば、全員が同じ「正」の状態にアクセスできるから、こういった混乱はゼロになるよ。
実際の現場ではどう使われているの?
エンジニアだけじゃない!意外な使われ方
バージョン管理というとプログラムのソースコードを管理するイメージが強いけど、実は使い道はもっと広いんだよ。たとえばデザイナーはイラストやロゴのデータをGitで管理することがある。ライターは文章原稿をバージョン管理して、「初稿」「編集後」「最終稿」を履歴として残す。法律事務所では契約書の変更履歴を管理するのにも使われているくらいだよ。
変更履歴が大切なものなら、ジャンルを問わずバージョン管理は役に立つんだ。「自分は文系だから関係ない」と思っている人も、実は活用できる場面がたくさんあるよ。
GitHubを使えば世界とつながれる
Gitをインターネット上で使えるようにしたサービスがGitHub(ギットハブ)。つまり「Gitの変更履歴をオンラインで保存・共有できるサービス」ということ。GitHubを使うと、世界中のエンジニアが作ったプログラムを見たり、改良に参加したりできるんだ。
有名なところでは、プログラミング言語のPythonや、Webブラウザのエンジン、スマホアプリまで、世界中の開発者が協力してひとつのソフトウェアを作り上げているプロジェクトがGitHub上にたくさんある。自分で作ったプログラムをGitHubに公開して「ポートフォリオ(作品集)」にすることもできるから、就職活動でも役立てているエンジニアがたくさんいるんだよ。バージョン管理は、ひとりの作業を助けるだけじゃなく、世界規模の共同作業を可能にしている「インターネット時代の必須インフラ」と言っても過言じゃないよ!
