今さら人には聞けない?でもサクッと知りたい!という人のためのGit超入門

初心者
プログラマーたるもの、Git使えて当たり前!な雰囲気があるのですが、ゼロからサクッと知るにはどうしたらよいでしょうか?

勉強のためプログラミングの記事とかを読んでいると、サンプルプログラムコードの置いてある先が「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コマンドですが、コマンドラインオプションはそう多くありません。でも説明しようとすると本が何冊も書けてしまうくらい奥深いものです。逆に言うとマスターできればプログラマーから有難がられる存在になれるかも!?

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を扱うことは避けて通れなくなってきていると思います。

操作をすべてマスターするなんて、筆者もできてないので、難しいツールであることもよくわかります。でもチームなどで開発をしてみると、助けられた!という経験も数多くあり、これだけ普及している理由も納得がいきますし、もはや無しでの開発なんて怖くてできないレベルかもしれません。

ご紹介されていただいた「こっそり練習できる環境」もフル活用して、

Git慣れしたプログラマー
あ、コードはGitに入っているんですね。了解しました。見ておきます・・・あれ、ここ変だな。PR投げとこうっと。

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA