皆さんプログラミングする上で作成されたソースコードってどのように管理されてますか?
まさか適当なフォルダにソースコードを配置して作り込んでいく度に上書き保存していませんよね?
それで問題なくプログラミングできるなら、その管理方法でも問題ないと思います。
しかし、多くの方はこう感じた経験があるんじゃないでしょうか?
デバッグしたらさっきまでちゃんと動いていたのに、あれこれロジックを追加していったら全然動かなくなってしまった。
ちゃんと動いていた状態まで戻したいけど、上書き保存してきちゃったからもう戻せない・・・
複数人のチームで共同してプログラミングすることになったので、全員で変更内容が把握できるようソースコード上に変更内容をコメントで残すルールとした。
しかし、コメントを残し忘れたりとルールの徹底が完全に行えず、変更内容がワケわからなくなってしまった・・・
動作確認のため、一時的にデバッグコードを埋め込んだ。
しかし、後々になって埋め込んだデバッグコードがどこなのかわからなくなってしまった・・・
ソースコードを1日単位で管理するために日付名でフォルダを作成し、その中にその日作成したソースコードを保存することにした。
しかし、間違ってソースコードが入った日付フォルダを削除してしまった。
しかも、もう復元できない・・・
ソースコードの変更履歴は人が管理するだけでも多くの労力とストレスがかかることがほとんどだと思います。
そのような課題を解決するために、バージョン管理システムなるものが誕生しました。
本記事は長くなるため、5部構成で説明していきます。
【Eclipse×GitHub】図で解説するGitHubバージョン管理方法
①: ~ 概要編 ~ ← 今ここ
②: ~ Git操作用語編(初級) ~
③: ~ Git操作用語編(中級) ~
④: ~ Eclipse操作編(事前準備) ~
⑤: ~ Eclipse操作編(Git操作実演) ~
バージョン管理システム
バージョン管理システムについて、簡単に説明していきます。
バージョン管理システムではリポジトリとよばれるデータの中央システムで全ての変更履歴を管理しています。
ユーザーはこのリポジトリから特定バージョンの変更履歴を取得したり、変更内容をリポジトリへ反映していきます。
変更の反映をするたびに、バージョン履歴が1ずつ追加されていきます。
バージョン管理システムでは、全てのバージョンが履歴として残るため、いつでも好きなバージョンへ立ち戻ることができます。
また、各バージョン履歴どうしの変更差分も視覚化できる場合がほとんどのため、デバッグコード等を埋め込んでも容易に埋め込み個所を把握することができます。
バージョン管理システムは大きく分けて集中型と分散型にわけることができます。
集中型バージョン管理システム
- 単一のリポジトリを持ち、全てのユーザーでこのリポジトリを共有する。
- リポジトリは共有サーバー上に置かれることが多く、リポジトリからデータを取得したり、変更をリポジトリへ反映するにはネットワークに接続している必要がある。
- 構造がシンプルのためリポジトリからデータを取得やリポジトリへのデータの更新が楽。
- ネットワークに接続されていないとリポジトリからデータを取得したり、変更をリポジトリへ反映することができない。
- リポジトリへのデータの更新が常に全員に共有されるため、安易にソースコードをリポジトリへ反映しにくくなる。
リポジトリへの反映が好ましくないソースコードには以下のようなものがあります。
・作成途中でビルドが通らないソースコード
・ちょっとした動作確認したく、デバッグコードを盛り込んでいる状態
分散型バージョン管理システム
- リモートリポジトリと呼ばれる単一のリポジトリを持ち、全てのユーザーでこのリポジトリを共有する。
- リモートリポジトリとは別にローカルリポジトリと呼ばれるリポジトリを各ユーザーがローカル環境に所有している。
- リモートリポジトリからデータを取得するには、以下の手順を踏む必要がある。
- リモートリポジトリの変更内容をローカルリポジトリへ反映
- ローカルリポジトリから変更内容を取得
- リモートリポジトリに変更を反映するには、以下の手順を踏む必要がある。
- 変更をローカルリポジトリへ反映
- ローカルリポジトリの変更内容をリモートリポジトリへ反映
・リモートリポジトリ
集中型バージョン管理システムのリポジトリと同じ用途。
全ユーザーで共有されることから、履歴の改変、消去は容易に行えない。
プロジェクトによってはそれが禁止されているところもある。
・ローカルリポジトリ
個人のローカル環境に配置されるリポジトリのため、ネットワークに接続されていなくても利用可能。
他のユーザーから共有されることがないため、完全に個人専用のリポジトリとなる。
そのため、ローカルリポジトリ内で新規に追加したバージョン履歴の改変、消去は基本的に問題にならない。
- ローカルリポジトリは他のユーザーから参照されることがないことから、ビルドが通らななかったり、デバッグ入りのソースコードを気軽にローカルリポジトリへ反映させることができるし、必要なくなったら履歴を削除することもできる。
- ネットワークに接続されていなくても、ローカルリポジトリからのデータ取得や、ローカルリポジトリへの変更が可能である。
- ローカルリポジトリが壊れてしまっても、リモートリポジトリから何度も復元することができるため、バックアップの役割も果たせる。
- 集中型に比べ複雑な構造をしており、初心者には取っつきにくい場合がある。
集中型と分散型、結局どっちを使えばいいの~?
集中型と分散型バージョン管理ツールのGood/Badポイントはわかったが、結局どっちを使うのがいいの~?って感じで悩んでいる方もいるんじゃないかと思います。
結論から言ってしまうと、どっちを使うべきかは好みの問題になりますが、バージョン管理システムを初めて使う方は「分散型」をオススメします!
なぜ分散型を勧めるかというと、この次で説明する。GitHubによるソーシャル・コーディングの恩恵を受けられるからです。
GitHubとソーシャル・コーディング
GitHubとは?
GitHubは分散型バージョン管理システムのリモートリポジトリを事前に構築し、ユーザーに貸し出してくれるサービスです。
ユーザーはネットに繋がる環境があれば、どこにいてもこのGitHubを利用することができます。
GitHubはあくまでもリモートリポジトリの提供を行うだけであるため、GitHubにソースコードの変更を反映したり、GitHubからソースコードを取得したりするにはGitと呼ばれる分散型バージョン管理システムを利用する必要があります。
そして、GitHubの最大の特徴ですが、何といってもGitHub(リモートリポジトリ)上に反映したソースコードをネット上に公開できることです。
公開されたソースコードはWebブラウザ上で誰でも閲覧することができます。
※こんな感じで閲覧できます。
2022年現在、有料版・有料版を問わずGitHubはリポジトリ作成時にパブリック/プライベートを選択することができるのですが、特段理由がない限りは誰でも閲覧できるパブリック・リポジトリで作成することをお薦めします。
・パブリック・リポジトリ
インターネット上の誰もが閲覧可能。
・プライベート・リポジトリ
自分自身やアクセスを許可されたユーザなど、特定のメンバーのみが閲覧可能。
ソーシャル・コーディング
そもそも、ソースコードをネット上で公開するとどんな良いことがあるのか?
そのメリットを以下に列挙してみました。
- あなたが書いたコードに興味を持った誰かが勝手にデバッグして、不具合をおしえてくれる。
- さらには不具合箇所を勝手に修正してくれる。
- ソースコードを通してコミュニティの輪が広がり、次第にフォロワーが増えていく。
中でも3番目のメリットの恩恵が非常に大きく、個人、企業問わずここ数年で爆発的に使用されることが増えました。
ソースコードをオープンにすることによってコミュニティを形成しながらプログラムを開発していくことを「ソーシャル・コーディング」と呼び、ソーシャル・コーディングによってもたらされるイノベーションを「オープン・イノベーション」といいます。
オープン・イノベーションを目指し、IT業界だけでなくあらゆる分野でもGitHubが使われていると言われています。
ぜひこの機会に使い方を覚えていきましょう!
オープン・イノベーションですか。
ソースコードを公開するだけでイノベーションが起こせるなんてすごいですね!
ソースコードに限らず、何かを公開することでイノベーションを起こす動きは今後のデファクトスタンダードになると思うよ。
その典型的な例がYouTube。
動画を公開するだけでそこに人が集まりだしコミュニティを形成していった。
その結果、YouTuberと呼ばれる世の中に大きな変化をもたらす人が現れ出したでしょ。
あぁ~確かに~!
私もついヒカキンさんの動画見ちゃいます!
「ソーシャル・コーディング」が成功した事例を1つ紹介するよ。
米国にLocal Motorsという自動車製造会社があって、この会社はオープンソースを起点にコミュニティを形成し、コミュニティに参加したデザイナーやエンジニアが自主的に開発に関わることでより良い自動車を作ることで成長していったんだ。
オープンソースを起点としたコミュニティ・ドリブンによる製品開発は今後普及していくと言われてるよ。
まとめ
- バージョン管理システムは2つに大別される。
- 集中型バージョン管理システム
- 分散型バージョン管理システム
- GitHub
- 無料で貸し出しているリモートリポジトリ提供サービスの1つ。
- プライベートリポジトリで作成した場合、アップロードされたソースコードは自動的にネット上に公開される。
- 個人、企業問わず利用者が爆発的に増えている。
- Git
- 分散型バージョン管理システムの1つ。
- GitHubを利用するのに必要。
- ソーシャル・コーディング
- オープン・ソースコードを起点に形成されたコミュニティの中で行っていくプログラミング開発。
参考
本ブログ内で紹介した米国企業Local Motorsのソーシャルコーデイング成功事例について、引用した書籍を紹介します。
2012年に出版された本ですが、クラウドファンディング利用したオープン・イノベーションなど、これからのモノづくりの在り方について学べることが多かった1冊です。
興味ある方はぜひ一度手に取ってみてください。
コメント