
勉強のためプログラミングの記事とかを読んでいると、サンプルプログラムコードの置いてある先が「GitHub」で、いきなり「クローンしてきて」って言われても何のことやら??という方もいらっしゃると思います。
そんな方々のために今だからこそ、当たり前のように使われているGitについて、わかりやすく説明していきたいと思います。
かくいう私もGitはここ数年使ってきてはいますが、今だに知らない機能だったり、使ったことない機能もたくさんあります。本記事を読んで、Git使ってみよう、いや使わなきゃ!と思っていただけるような内容にしたいと思っています。
Gitとは?
バージョン管理ソフトウェアである
Gitはプログラムコードなどのバージョン管理を行うソフトウェアです。例えば、自分がプログラムをエディタで修正して上書き保存しただけだと、「どこをどのように修正したのか」がわからなくなってしまいます。うまく動いた場合は良いですが、動かなくなってしまったら困りますよね。
Gitはプログラムの変更を履歴として「リポジトリ」という入れ物に保持してくれるので、特定の時点のプログラムに戻ったり、消してしまったプログラムを復活させたりすることができます。
Gitは、その「リポジトリ」をネットワーク上に分散して管理できるため、分散型バージョン管理と呼ばれる特徴をもっています。この分散型で管理を行うGitの特徴が、大人数での開発をスムーズに進めるのに一役買っていたり、リポジトリのあるサーバが壊れてしまった場合の耐性を高めたりするのです。
分散型のほかにはどんなものがあるの?
分散型の対になるものが集中型と呼ばれるバージョン管理ソフトウェアで、有名なものにはSubversionがあります。集中型の場合、リポジトリにあたる履歴情報を格納する場所が一箇所に集まっており、プログラムコードを書き換える人は、みんながその場所をアクセスして変更を加えていく形になります。
どこが優れているの?
どちらの型でも一人で使っているぶんにはあまり問題になりませんが、多くのプログラマーが一つのソフトウェアを変更していく場合はどうでしょう?集中型の場合、変更の順番待ちが発生してしまったり、自分の変更がほかの人の変更とかちあって(コンフリクトという)しまったり、問題が発生しやすいのです。
GitはLinuxのカーネルプログラムを管理する目的でつくられたこともあり、多人数でのソフトウェア開発に耐えうるよう、差分管理の仕組み、リポジトリを分散してもつ仕組み、リポジトリ間を同期する仕組みなど、複数の人が自由に安全にプログラムの変更ができるよう工夫されています。
冒頭の例でいうと、GitHubにあるリポジトリがリモートリポジトリであり、「クローンしてきて」というのは、目の前のPC上にそのリポジトリのコピーをもってくることです。あとは手元のリポジトリで心ゆくまで修正し、バグもなく納得がいったら、リモートリポジトリに変更を反映する、という感じで、ほかの開発者に気兼ねすることなく作業ができるイメージが持てるのでは?と思います。
Gitの使い方
CUIツールとGUIツールがある
Gitはもともと「git」というコマンドラインユーザーインターフェイス(CUI)で作られています。慣れない人には若干怖い、黒い「プロンプト画面」で操作しなければなりません。
それだけだと困る人もいるので、Gitのプログラムをベースに普通のエクスプローラーのように操作できる、グラフィカルユーザーインターフェイス(GUI)のツールも有志によって開発されています。
gitコマンド

Gitの全てが凝縮されたgitコマンドですが、コマンドラインオプションはそう多くありません。でも説明しようとすると本が何冊も書けてしまうくらい奥深いものです。逆に言うとマスターできればプログラマーから有難がられる存在になれるかも!?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
$ git --help usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>] These are common Git commands used in various situations: start a working area (see also: git help tutorial) clone Clone a repository into a new directory init Create an empty Git repository or reinitialize an existing one work on the current change (see also: git help everyday) add Add file contents to the index mv Move or rename a file, a directory, or a symlink reset Reset current HEAD to the specified state rm Remove files from the working tree and from the index examine the history and state (see also: git help revisions) bisect Use binary search to find the commit that introduced a bug grep Print lines matching a pattern log Show commit logs show Show various types of objects status Show the working tree status grow, mark and tweak your common history branch List, create, or delete branches checkout Switch branches or restore working tree files commit Record changes to the repository diff Show changes between commits, commit and working tree, etc merge Join two or more development histories together rebase Reapply commits on top of another base tip tag Create, list, delete or verify a tag object signed with GPG collaborate (see also: git help workflows) fetch Download objects and refs from another repository pull Fetch from and integrate with another repository or a local branch push Update remote refs along with associated objects 'git help -a' and 'git help -g' list available subcommands and some concept guides. See 'git help <command>' or 'git help <concept>' to read about a specific subcommand or concept. |
Git特化型GUIアプリケーション
Gitの操作をグラフィカルに行えるようにしたアプリケーションですが、基本的にGitでできる操作に特化しています。ファイルやフォルダの管理画面があり、ブランチと呼ばれる変更履歴を分ける操作や、リモートからの同期操作、その逆のリモートへの反映操作がボタンポチ!でできるようになっていたりします。
代表的なものにアトラシアン社が提供しているSourcetreeがあります。
https://www.sourcetreeapp.com/
統合型GUIアプリケーション
Windowsの世界では有名ですが、エクスプローラーの機能の一部にGitの操作ができるよう組み込むタイプのアプリケーションです。エクスプローラー上でファイル名を右クリックし、そこからリモートリポジトリへ修正を反映したりできます。
代表的なものにオープンソースのTortoiseGitがあります。
統合開発環境(IDE)のプラグイン
プログラミングするときに使う、Visual Studio Codeのような開発ツール(統合開発環境、IDEと呼ばれる)のプラグインとして利用することもできます。この場合、Gitのコマンド動作をIDEのウィンドウやツールバーに当てはめてたりするので、若干慣れないと思ったように操作するのが難しいです。
初心者であれば、環境に合わせて上のどちらかのGUIアプリケーションを使うのが良いと思います。
覚えておきたいgitコマンドオプション5つ
gitコマンドのオプションは多くないと書きましたが、それぞれのオプションできることは引数も組み合わせると、結構膨大な数になります。ここでは、最初に知っておきたいコマンドオプションについて、どんなときに使うのかイメージをつかんでもらいたいと思います。
git clone
何はともあれ、最初にやるのがこのcloneです。手元のPCにURLなどで指定したリモートリポジトリのコピーを生成します。基本的にはこのクローンされたリポジトリをつかってプログラム開発をしていきます。
git pull
リモートリポジトリでは、あなたがクローンしたリポジトリに既に別の変更が加えられているかもしれません。新機能の追加だったり、バグの修正などです。そのような最新の差分をリモートから取得して、ローカルリポジトリに取り込みます。
すごく細かい話をすると、実は中身的にはfetchとmergeの処理を同時に実行しているのですが、最初はpullで理解いただければよいかと思います。
git merge
Gitではある時点からの変更履歴を枝分かれしたように管理できる「ブランチ」という機能があります。よくある例では、公開ソフトウェアを管理するためのmasterブランチがあり、そこに直接変な修正が混ざってしまうと困るので、開発用の「developブランチ」を作成するというケースです。
分けたブランチ側でバグ修正をしながら、開発を進めていき、問題なくなったら、公開用のmasterブランチに結果を反映したくなりますね。このときdevelopブランチの変更をmasterに取り込む、といった操作を行うのがこのオプションです。
後で出てくるGitベースのサービスをつかう場合、あまり意識して操作することはないかもしれませんので、そういう操作だと理解しておいてください。
git commit
手元でファイルとしてセーブした変更をローカルのリポジトリに反映させます。このcommit操作によって、Git上での差分として確定するイメージになります。
ですが、その確定した差分はまだ自分のPCにある状態です。そこで次の操作が必要になります。
push
ローカルリポジトリ上の差分をリモートリポジトリに反映させるオプションです。pushすることであなたの変更をほかの皆さんが取り込むことができるようになり、その修正を利用できるようになります。
Gitをより活用するならサービスを使おう
世の中にはGitの機能をもつ環境をインターネット上に用意してくれていて、Web画面を操作しながらプログラムや設定ファイルをリポジトリに格納したり取り出したりできるサービスがあります。
最も有名なのはGithubです。
Githubでできること
さっきのコマンドでお気づきの方もいらっしゃるかもしれませんが、実際Gitの機能だけだと、誰でもcommitしてpushしてしまえるように思いませんでしたか?
そうなると使っているみんなが困ってしまうので、Githubではいくつかとても有効な機能を加えてサービス公開しています。
Githubがサービスとして提供している機能のうち、主なものは以下になります。
- ユーザー管理とユーザー別のリポジトリ管理機能
- 「プルリクエスト」と呼ばれるプログラムコードのレビュー/マージ機能
- 「イシュー」と呼ばれるバグ報告のための掲示板のような機能
- ユーザーからのpushなどの操作タイミングで別の機能を呼び出す「webhook」機能
webhookとは?
webhookはGithubのリポジトリに対して実行された操作タイミングで、別の機能を呼び出せるようにするものです。最初は何のことやら?と思うかもしれませんが、ここでは主にどういう用途で使われているのか?という部分だけ紹介します。
- プログラムコードをpushしたときに、テストを自動実行する
- プログラムコードの修正がpushされたら、アプリケーションをコンパイルしてリリース用のパッケージを自動的につくる
上のような「プログラムに修正が入ったら実施すること」をあらかじめ設定しておき、Git操作があったタイミングで自動的に処理させるための機能です。
呼び出す機能についてはGithubではなく外部のサービスも呼び出すことができるので、テストの実行と結果のレポートを生成してくれるサービスなどと組み合わせて利用されます。
プログラマー初心者だからこそサービスに参加しよう!
Githubにはさまざまなオープンソースが登録されており、プログラムだけでなく、操作マニュアルやソフトウェアそのものの説明書も格納され、差分管理されています。
中にはマニュアルを多言語化して持っているリポジトリもあり、翻訳してくれるユーザーを募集していたりもします。すぐにスゴイプログラムは書けなくても、こういった部分から貢献できるかもしれません。
日本語のここがおかしいとイシューを切って、自分で修正してプルリクエストを出す。それがマージされて取り込まれたら、あなたも立派な貢献者(コントリビューター)になれるのです。
また、Githubではほかのユーザーからは見えないプライベートリポジトリ機能もあり、ちょっと前に無料化されたので、思う存分pushやcommitの練習もできます。ですので、ぜひサービス登録していろいろ練習してみてください。習うより慣れろ、です。
まとめ
プログラミングを勉強したい、将来仕事としてプログラミングをしたい、と思ったときにGitを扱うことは避けて通れなくなってきていると思います。
操作をすべてマスターするなんて、筆者もできてないので、難しいツールであることもよくわかります。でもチームなどで開発をしてみると、助けられた!という経験も数多くあり、これだけ普及している理由も納得がいきますし、もはや無しでの開発なんて怖くてできないレベルかもしれません。
ご紹介されていただいた「こっそり練習できる環境」もフル活用して、

とサラッと使いこなせるようになるキッカケとなれば幸いです。