プログラミング

Gitが自分の職場に導入されそう。Gitってどんなもの?

  • これまでGitを使ったことが無い。
  • 職場で「Gitを導入しよう」という声が挙がっている。
  • Gitって具体的にどんなもの?

こんな状況の人、今すごく多いと思います。世の中でGitの活用が急速に広まっているからです。そんななかで、まだGitが導入されていない職場があれば、導入しようという話が持ち上がるのは自然なことだといえます。

というわけでGit導入の判断や導入後の運用に必要な、「Gitってだいたいこんな感じ」というイメージを持ってもらうための記事を書きました。そのためGitの具体的な操作方法などについては触れていません。必要性や運用イメージといった部分にフォーカスした内容になっています。

また、自分の勤め先にも導入してもらいたい!と考えている方も、同僚などにこの記事を見せることで社内のGit熱を上げることができるかもしれません。

Gitとは

Git(「ギット」と読みます)はバージョン管理システムの1つです。

バージョン管理システムというのは、複数人で仕事をするときに、ファイルに対する変更内容が競合しないような仕組みを提供しつつ、誰が、いつ、どんな変更を加えたかの変更履歴も残してくれるようなシステムのことを指します。

プログラムのソースコード管理にバージョン管理システムが活用されることが多いのですが、それ以外にも様々な電子ファイルを管理することも可能です。

多くのバージョン管理システムが世の中に存在するなかで、今もっとも利用されているバージョン管理システムがGitです。Linuxカーネルの生みの親であるリーナス・トーバルズ氏がLinuxソースを管理する目的で作成したのが始まりです。

そしてGitが公開されてから15年以上が経った現在、多くのプロジェクトで当たり前のように使われるようになり、Gitはバージョン管理システムのデファクトスタンダードと言ってもよい状況になりました。

バージョン管理システム 2つの方式

バージョン管理システムの方式・概念には、大きく分けて2つあります。

  • ロック方式(集中型)
  • コピー・マージ方式(分散型)

以前はロック方式が多く使われていましたが、近年ではコピー・マージ方式が広く使われるようになりました。

ロック方式

ロック方式のバージョン管理システムでは、ファイルの内容を変更したい人がまず「私がこれからこのファイルの内容に変更を加えます」と宣言してから作業を開始します。

すると宣言されたファイルはバージョン管理システムによってロックされます。

ファイルがロックされている間、他の人間はロックされたファイルに対して変更を加えることが出来なくなります。ロックをした人が変更内容をコミット(反映)するか変更作業を中断することでロックは解除されます。

このようにある時点でファイルの内容を変更できるのは1人だけという制限を設けることで、2人以上の人間が同じファイルの内容を同時に変更することで発生する情報競合を防ぐ、という考え方に基づいています。

これはバージョン管理システムなどを使っていなくても、日常業務などで「私はこれからこのファイルの内容を修正するのでその間触らないでくださいね」といった声掛けと同じですね。

コピー・マージ方式

コピー・マージ方式のバージョン管理システムでは、自分の手元(ローカル環境)に複製してきたファイルに対して変更を加えます。そのため誰でも自由なタイミングで変更を加えることができます。

そして変更を加えたら、ローカルからサーバーに対してマージ(オリジナルに対する差分を追加)することで反映します。

複数の人間が同時に同じファイルに変更を加えていたとしても、変更内容が競合していなければどちらもマージする時に問題にはならなず、変更内容に競合が発生したときだけ、人間が目で見て解決すれば済む…という考え方に基づいています。

実際のところ、同じファイルを複数人が同時に修正したとしても内容的に競合することというのはそれほど頻繁には発生しません。ほとんどのマージ作業がノーコストで完了することができます。

Gitはこのコピー・マージ方式に基づいた設計で作られています。

バージョン管理システムの主流がロック方式からコピー・マージ方式に変わってきたという歴史的背景からも推測できるように、様々な点でロック方式よりもコピー・マージ方式の方が優れています。優位性について1つ1つ解説するとテクニカルな話になってしまい、この記事のコンセプトから逸脱してしまうため割愛しますが、これから導入するとしたら、Gitを選択しておけば間違いない、と覚えておけば大丈夫です。

Git有識者の方へ

上述した説明は、有識者の方からすると「そこfetchしてrebaseしてからpushする操作の説明抜けてるやろ」といったツッコミが入るかもしれませんが、敷居を低くするためにあえて触れないことにしました。

Gitを使った文書のコピーとマージ

先ほどのロック方式やコピー・マージ方式の説明では、ファイルや人を単位として説明しました。今度はある1ファイルだけに焦点を当てて、Gitを活用しながら複数人で内容を変更するときのイメージを紹介します。

あなたがコロナウィルスに対する社内対策を作成し、同僚のAさんとBさんに添削を依頼したとしましょう。

あなたが作成したオリジナルの文書に対し、Aさんは感染防止策に「不要不急の外出を控える」という記述を追加し、Bさんは発熱など感染の疑いがある場合に「PCR検査を受ける」という記述を追加しました。

そしてAさんとBさんそれぞれが、オリジナルファイルに対して添削結果をマージすると、GitはAさんの変更内容とBさんの変更内容が別の部分に対して行われたものであるということを理解したうえで、自動的にそれぞれの添削内容をオリジナルファイルの適切な位置に反映します。

これがもし、もっとボリュームがある文書で、Aさん・Bさんから何十もの指摘があった場合を想像してみて下さい。手作業で指摘を反映しようとすると、かなり大変な作業だと思いませんか?

実際、プログラムファイルに対する変更作業というのは、何十行・何百行、ときには1000行以上にも及び、変更場所も数十箇所以上に散らばっている、ということも少なくありません。

Gitはそれらの変更箇所を適切に読み取ったうえで、自動的にマージを行ってくれるのです。

Markdownを使えばドキュメントなどをGit管理することもできる

実はGitがマージできるのは、テキストファイルだけです。バイナリファイルはマージすることができません。だから業務でよく使用されるWordやExcelなどのOffice文書は、うまくマージすることができません。

つまり残念ながら、業務で頻繁に使用するOffice文書をGitを使って管理するのはよい選択とは言えません。(バージョン管理することはできる)

そこで、Markdownの使用をオススメします。Markdownという書式でテキスト文書を書くと、読みやすいドキュメントを作成することができます。

画像の左側がMarkdownで記述したテキストで、右側でそれをHTML文書として表示しています。

客先へ提出するような文書は、PDF出力して提出する、といった運用も可能です。

上記サンプルをsphinxを使用して作成したpdfファイルを表示した例:

導入を前向きに検討しよう

いかがでしたか?今までどんなものなのかよくわからなかったGitについて、「なんとなくこんな感じのモノなんやな」程度にはイメージすることができましたでしょうか?この記事を読んだことで「自分の職場にもGitが使えるようになったら便利そう」と感じてもらえたなら、この記事を書いてよかったかなと思います。

今回はGitの概念的な話のみで具体的な使い方については触れませんでした。それは使い方が簡単だから説明しなくてもいいかなと考えたからではありません。実際はその逆で、使い方がやや複雑でクセがあるため、そこまで説明していると話が複雑になってしまうと判断したためです。

実際にGitを使っていくためには、公式サイトのドキュメントや入門書などを読んで、操作方法を学ぶ必要です。インストールしたら直感的にすぐ使える、というものではありません。

公式サイトのドキュメントについての簡単なコメント

僕が初めてGitを使ったのは今から10年ほど前になります。その時は公式サイトのドキュメントを見てGitの概念を学びました。書いてある内容も順序立っていて図解も多く、書籍となんら遜色ないレベルの内容になっています。しかも日本語ドキュメントも用意されています。

書籍を買わなくても、公式サイトのドキュメントだけで十分理解できる方も多いと思います。

Git公式ドキュメント

全部で10章まであって文章量の多さに圧倒されてしまうかもしれませんが、実際は全て読む必要はなく、5章までの内容を押さえておけばとりえあえず大丈夫です。

入門書について簡単なコメント

プログラムを書いたことがない人やPowerShellなどのコマンドラインにあまり慣れていない人からすると、公式ドキュメントだけでは難しく感じるかもしれません。公式ドキュメントが少しでも難しいと感じたら、書籍を購入してサクサク読み進めた方がおトクです。時は金なりです。

職場で誰かに聞けばいいと考える人もいるかもしれませんが、書籍を読めば体系的な情報として理解できるものを、わざわざ相手の時間をとってまで教えてもらうというのは時間的な損失が大きくオススメしません。時は金なりです(2回目)。

書籍のなかでも初心者向けで、情報も新しいのがわかばちゃんシリーズです。プログラミング経験者を読者として想定した書籍が多いなか、この書籍の主人公はHTMLとCSSが理解できているくらいの学生…という感じでスペックを大幅に下げているところが読者に寄り添っているなと思います。

漫画形式だと脳が記憶しやすいというメリットがあるものの職場や通勤電車などで読むのは少し恥ずかしい気がしなくもないのが悩みどころです。

-プログラミング

© 2022 ヂまるBlog