🐶

Git超入門講座-エンジニアの必須スキル

2022/11/14に公開

エンジニアをするのであれば、Gitは必須ツールです。

けれど、しっかりと理解してない人も多いかと思います。

僕も駆け出しの頃は、Gitの理解に苦しんだ覚えがあります。

なので今回は、Gitをしっかりと理解できるような記事を書きました。

対象読者としては、「Git全然分からん。。」という初心者になります。

本当は中級者向けの記事を書こうと思ったのですが、なぜか超初歩の内容を書いてしまいました。。

なのでGitを理解してる中級者の方は、ブラウザバックしてください🙇‍♂️

それでは解説を始めていきます。

基本用語の解説

まずはGitを使う際に知っておくべき用語を解説していきます。

Gitとは

Gitとはバージョン管理ツールの1つです。

バージョン管理ツールとは、その名の通りデータのバージョン管理を行うためのツールです。

特定のファイルに加えられていく、変更履歴を記録・管理していくものになります。

要は、ゲームのセーブデータみたいなものです。

Gitでは、「誰が、いつ、何を変更したか」を管理することができ、特定のバージョンを確認したり、過去のバージョンに戻したりできます。

なのでチーム開発する際なども、ファイル管理がとても楽になります。

基本的にWeb開発会社でGitを使っていな所はほとんどないと言えます。

それ故、Gitを理解しておくことはかなり大事になります。

GitHubとは

Gitと一緒に学んでおくべきなのが、GitHubです。

GitHubは、ソースコードをWeb上で管理・公開するためのサービスになります。

このサービスを使うことで、チーム全体でGitのバージョンを共有できるので、チーム開発が進めやすくなります。

他にも似たようなサービスがいくつかありますが、基本的に大体の会社はこのGitHubを使ってます。

リポジトリとは

Gitではリポジトリという単語を使います。

リポジトリとは、「1つのプロジェクトの全てのファイルを管理してるフォルダ」だと思っていただければOKです。

このリポジトリ内でGitを使い、バージョン管理をしてるわけです。

GitHub上にあるリポジトリはリモートリポジトリと呼ばれ、ローカルのGitリポジトリをローカルリポジトリと呼びます。

基本的に「それぞれのPCのローカルリポジトリで作業を進め、キリの良いタイミングでその変更をリモートリポジトリに反映させる」という手順で開発を進めていきます。

Gitプロジェクトの作成

色々と説明してきましたが、作業しないと分からないと思うので、実際の作業手順を解説していきます。

まずは、Gitのプロジェクトを作成していきます。

方法としては、主に3通りありのでそれぞれ解説していきます。

Gitconfigの設定

まずプロジェクトを作成する前にするべきなのが、.gitconfigファイルの設定です。

これはgitの設定ファイルになります。

ここにgitで使う環境変数を登録しておくわけです。

基本的な使い方は以下の通りです。

git config -—global <attribute> <value>

そして設定しておくべきなのは、次の2つです。

git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"

この設定が終わったら、実際にGitのプロジェクトを作成していきましょう。

ちなみに、"--global"はグローバルに環境変数を設定するためのコマンドなので、特定のフォルダに環境変数を作りたい場合は必要ないです。

プロジェクト作成方法1:「Clone」

まず1つ目のプロジェクト作成方法が、「Clone」です。

これをすることで、既にあるリモートリポジトリの情報を自分のローカルリポジトリに持ってきて、開発に携わることができます。

なので実務の際は、まずこの作業をすることになるでしょう。

まず、Cloneしたいプロジェクトに飛び、clone用のURLをコピーします。

HTTPSとSSHが選べるので好きな方をお選びください(基本的にsshの方がセキュアなので推奨です)

そして、以下のコマンドを入力すればOKです。

git clone <url>

これで、ローカルにリポジトリをクローンすることができました。

プロジェクト作成方法2:「Init」

次に、リモートリポジトリの情報をローカルに持ってくるのではなく、ローカルで0からリポジトリを作成する方法を紹介します。

個人開発などをする場合は、このパターンになります。

やり方は簡単で、以下のコマンドを実行すだけです。

git init プロジェクト名

これで「プロジェクト名」のフォルダが作られているかと思います。

それがGitのプロジェクトになります。

試しにプロジェクトに移動して、ls -aをすることで、.gitという隠しファイルが作られているかと思います。

このファイルがあるということは、Gitのプロジェクトを作成できたということになります。

ちなみに、これで作成したプロジェクトをGitHubに上げたい場合は、以下の手順を踏めばOKです。

  1. GitHubで新しいリポジトリを作成する
  2. git remote add "クローン用のURL"を実行する
  3. リモートリポジトリにpushする

プロジェクト作成方法3:「Fork」

最後に紹介するのが、Forkです。

このコマンドを実行することで、既にある他人のプロジェクトをコピーして、自分のリモートリポジトリに持ってくることができます。

これは例えば、OSSの開発などに携わりたい場合に使用します。

フォークはGitHub上にそれ用のボタンがあるので、それを押すだけです。

フォークした後は最初に説明したのと同じように、そのリポジトリをクローンすればOKです。

ちなみに、フォークした場合は、フォーク元のリポジトリにPRを出すことができます。

GitIgnoreの設定

最後に、.gitignoreファイルを設定しましょう。

このファイルに記述した対象のファイル・フォルダは、gitの管理から外れます。

「そんなのいつ使うの?」と思うかもですが、サイズが大きいファイルやバイナリファイルはgitの管理に適してないので、管理から外す必要があります。

また、パスワード情報などの機密情報はgithubに上がってしまうと、他の人に見られて悪用される可能性があるので、それらの情報もgitignoreファイルに記述しておく必要があります。

基本的に、チーム開発の場合はこのファイルは元から設定されているはずなので、何をしなくてOKです。

個人開発の場合で、「何を記述すれば良いか分からない!」という場合は、以下のリポジトリを参考にすると良いでしょう。

https://github.com/github/gitignore

Gti開発における基本的なフロー

まず、Gti開発における基本的なフローを解説していきます。

チームによって若干フローが異なる可能性もありますが、基本的にはこのフローに沿って開発を進めていきます。

1.作業ブランチの作成

まず基本的には、作業ブランチというものを作る必要があります。

ブランチ(branch)とはその名の通り枝です。

つまり、このブランチを作成することで、枝分かれして各々の開発をすることができるのです。

ドラクエで例えると、たかしというデータと、たろうというデータをそれぞれ作ってゲームを進めていく感じです。

これをすることで、たかしはAという機能の開発を行い、たろうはBという機能を開発することが出来るわけです。

また、mainブランチで作業を進めてしまうと、本番データをそのまま触ることになるので超危険です。

なので基本的には、作業ブランチを作って開発を進めていく必要がある訳です。

そしてブランチを作成するには、以下のコマンドを実行するばOKです。

git branch <ブランチ名>

また、ブランチの一覧は以下のコマンドで確認ができます。

git branch 

*が頭についてるブランチが現在いるブランチになります。

そして、以下のコマンドでブランチを移動することできます。

git checkout ブランチ名

ちなみに、以下のコマンドはブランチの作成+移動を同時に実行できます。

git checkout -b ブランチ名

基本的にコマンドを使うことの方が圧倒的に多いです。

2.開発を進めていく

次に、実際に開発を進めていきましょう。

変更したファイルは、次のコマンドで確認することができます。

git status

そして、具体的な変更内容は、次のコマンドで確認することができます。

git diff

ちなみに、ファイルの変更情報は、gitの「working directory」というところに保存されます。

また、-wのオプションを追加することで、スペースの違いなどの大したことのない差分を省略して表示することができます。

git diff -w

3.更新情報をstaging areaに上げる

次に、「working directory」上の更新情報を、Git上の「staging area」に上げる必要があります。

このステージングエリアに上がっているファイルの変更情報が、セーブの対象となります。

そしてそれは、次のコマンドを使えばOKです。

git add <対象のファイル名 or ディレクトリ名>

複数ファイルをaddするのが面倒な場合は、次のコマンドで全てのファイルをaddできます。

git add -a

4.コミットをする

次に作業内容をコミットします。

コミットとは、要はセーブです。

このコミットをすることで、その時のファイルの変更が見れたり、過去の作業状態に戻すことができます。

コマンドは以下を実行すればOK

git commit "コミットメッセージ"

コミットメッセージは、何の作業をしたかを一言でわかるようにつけましょう。

また、以下のコマンドを使うことで、過去のコミット履歴を見ることができます。

git log

ちなみに、直前のコミットメッセージを変更したい時は、次のコマンドを使えばOKです。

git commit --amend -m "新しいコミットメッセージ"

さらに、—-onelineのオプションをつけると、1つのコミットを1行でコンパクトに見ることができます。

また、過去のコミットを詳しく見たい場合は、以下のコマンドを実行しましょう。

git show <コミットid>

5.Pullをする

次に、Pullをします。

Pullは現在のリモートリポジトリの状態を、自分のローカルリポジトリに反映させる作業になります。

これをしないと、他のチームメンバーがリモートリポジトリのコードを書き換えていた場合に、整合性が取れなくなってしまうので。

コマンドは次の通りです。

git pull <対象のリモートリポジトリ> <対象のbranchname>

「対象のリモートリポジトリとはなんぞや?」となると思いますが、git remote -vで確認できます。

基本的に「origin」になっているかと思います。

つまり、「originのリモートリポジトリのmainブランチの情報」を持ってきたいわけなので、以下のコマンドを実行すればOKです。

git pull origin main

ちなみに、pullは現在いるブランチに反映されるので、今いるブランチが間違ってないか注意しましょう。

6.Pushする

次に、Pushをします。

Pushをすることで、ローカルリポジトリの状態をリモートリポジトリに反映させることができます。

コマンドは以下の通りです。

git push <対象のリモートリポジトリ> <反映させたいブランチ>

具体例を出すと、「feature」というブランチで作業していた場合は、以下のような感じになります。

git push origin feature

ちなみに、git push origin mainとすると、今いるブランチの作業内容をmainにpushしてしまうことになるので、絶対にやらないようにしましょう。

7.PRを立てる

次に、PR(プルリクエスト)を立てます。

PRは、「こういう修正・開発をしたから確認して」みたいな感じで、チームメンバーにコードの誤りなどがないか確認してもらうものになります。

タイトルや内容は、分かりやすいものつけるように注意しましょう。

8.マージする

他のチームメンバーがコードをレビューして、問題なければmainブランチにマージします。

マージすることで、作業ブランチの作業内容をmainブランチに反映させることができます。

これが一通りの作業フローになります。

「そんな面倒なことせずに、そのままmainブランチにpushすれば良かったじゃん。」

と思うかもですが、それをするとコードレビューしてない作業内容がいきなり本番データに反映されてしまうので、超危険です。

たまに誰かしらがうっかりこのミスをしてしまうこともありますが、mainブランチにそのままpushしようとするとターミナル上に警告を出すようにしてる会社などもあります。

9.後処理をする

最後に後処理をしましょう。

これをしておかないと、色々とゴミが増えたりするので。

基本的にやることは次の通りです。

  1. GitHub上の作業ブランチを削除する
  2. ローカルの作業ブランチを削除する
  3. ローカルのmainブランチでpullをする

以上になります。

まとめ

これを把握していれば、あまり開発で困ることはないでしょう。

とはいえ、手を動かさないと全然分からないと思うので、実際に手を動かして学びましょう。

本当はもう少し発展的な内容も書きたかったんですが、内容が少し長くなり過ぎてしまうので記事を分けようと思います。

ということで、本記事はここでおわりになります。

宣伝

0からエンジニアになるためのノウハウをブログで発信しています。
https://hinoshin-blog.com/

また、YouTubeでの動画解説も始めました。
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UCqaBUPxazAcXaGSNbky1y4g

インスタの発信も細々とやっています。
https://www.instagram.com/hinoshin_enginner/

興味がある方は、ぜひリンクをクリックして確認してみてください!

Discussion