Gitでバージョン管理

Gitとは?

Gitは、コードの変更履歴を追跡し、複数の開発者が同時に作業できるようにする分散型バージョン管理システムです。効率的なブランチ管理により、安全な開発フローを実現します。

前職では不要だったバージョン管理

社内SEとして勤務していた頃は、システム周りの技術者が自分独りという環境でした。
ある意味仕方がありませんが、数百人の社員が、数百台のパソコンで仕事をする大会社のオフィスビルなら、複数の技術者でサポートする必要もあるでしょうが、中小企業ではひとり情報システム、いわゆる「ひとり情シス」がある意味当然だったりします。

このため、社内での業務支援に開発したアプリケーションは、要望を聞くのも私で、実現のための機能を考えるのも私。コーディングもテストも私なので、バージョン管理の必要性があまりありませんでした。

例えば、要望を受けてプログラムを修正したとしても、変更部分に理由と日付をコメントで入れておけば、それほど困る事はありませんでした。

結局、前職を辞する前に、後任への引き継ぎが発生する時になって、コードの共有などの必要が生じ、はじめて導入を図りました。

そのとき、大変役にたったのが、udemy の動画でした。
有料ではありますが、時折、かなりの割引をしていて、そのときに買うのが狙い目です。
Gitについては、「もう怖くないGit!チーム開発で必要なGitを完全マスター」を受講しました。

結果、前職で使用していたコードを移植できました。

今回は、復習をかねて、Gitの使い方を記事にしてみます。

Gitのインストール(Windows編)

まず、Gitをパソコンにインストールします。

Git でGoogleを検索すると、すぐに見つかります。

Downloadが表示されているので、クリックして移動しましょう

今回はWindows にインストールするので、Windows を選択します。

ベースのWindowsは、Windows10 64bitなので、64bit版を選択します。

ダウンロードが完了したら、ファイルを実行します。

以降、全て規定値でOKなので、Nextでどんどん送ります

これでインストールは完了です。

Gitを使ってみる

インストールが完了したら、Git を使ってみます。

起動とバージョンの確認

Windowsのスタートキー(通常は画面左下のマーク)を押下すると、現在、インストールされているプログラムが表示されます。

Gの頭文字を探して移動すると、Git という項目ができているはずです。

このうち、Git Bashというアプリを使用するので、押下します。

このような画面が出たら、Gitは正常にインストールされています。

画面内に、git version と入力すれば、現在、インストールされているバージョンが表示されます。

2.44.0がインストールされています

今回使用するプロジェクト

簡単なアプリ制作のプロジェクトを起こします。今回はVB.NETで用意しました。

ボタンを押した瞬間に、パソコンのタイムスタンプを読み、年月日時分秒で数字を並べるだけです。
なお、下のボタンは、Linux系でよく使う、1970/01/01 00:00:00を起点に、今何秒後なのかを図る、エポック秒を吐き出します。

現在の内容をGitにコミットする

今回のプロジェクトは、

C:\Users\Public\Documents\Visual Studio 2017\currenttimestamp-master\currenttimestamp

に作成しましたので、Git Bash の cd コマンドでプロジェクトのフォルダに移動します

移動したら、git init コマンドを入力します。

これにより、空のフォルダが作成されます。

画像で見ると、プロジェクトフォルダに .git というフォルダが出来ています

ls コマンドでフォルダの中身を確認できます。

次に、git add . [ピリオド] コマンドを実行します。

すると、現在のプロジェクトフォルダの内容が、Git によって、一時保存されます。

追加されたかどうか確認します。

git status と入力すると、追加が成功しているなら、プロジェクトのディレクトリと小梨構造が出力されます。

それではコミットします。

最初のコミットなので、

git commit -m "Initial commit"

と入力しましたが、Author identity unknown とエラーになりました。

「お前は誰だ?」と聞いている状態なので、

git config --global user.email "info@raspberry_pi
git config --global user.name "Yoshikawa_Kazuhiro"

で名前とメールアドレスを登録します。

その後、コミットすると実行できました。

プログラムに変更を加える

ここまでで、タイムスタンプを表示するプログラムはGitに保存されました。

この後、要望が入り、ボタン3を追加してとの要望に応えたとします。

ボタン3を新設し、ボタンを押下すると、ダイアログが表示されるようにしました。

変更が完了したら、git add . [ピリオド] コマンドを実行します。

続けてgit commit -v を実行すると、イメージのように、変更された箇所を表示してくれます。

一番上にテキストの入力が可能なので、変更内容の要約と、変更した理由を記載しておくと、後で再修正する時便利です。

メッセージを書き終えたら、Escキーを押し、:wq で保存します。

 git log と入力すると、履歴が表示されます。

この場合、最初のコミットから、変更後のコミットが表示されています。

以降、なにか修正を加えたら、git add . [ピリオド] → git commit -v すれば、変更履歴が蓄積されます。

GitHUBアカウントを取得する

現状は、Gitの変更履歴は、そのパソコンの中のみになります。

そのため、リモートリポジトリを作成して、そこに保存しておくのが色々と便利です。

関係無い話? と思われるかもしれませんが、パソコンは必ず壊れます。

しかも、だいたい最悪のタイミングです。

開発中のプログラムのファイルを保存したパソコンが、いよいよ開発も最終段階という段になって、起動しなくなるなんて話はしょっちゅう聞きます。

しかし、Gitのリモートリポジトリを保存してあれば、最悪、別のパソコンにリポジトリを取得して作業を継続することができます。

まずはGitのアカウントを取得するため、GitHubの公式サイトにアクセスします。

赤枠の「Sign up」をクリックします。

まず、メールアドレスを入力します。

今回はgmailで試してみましょう。

パスワードを設定します。

短いものや、単純なものは「パスワードが短すぎる 15文字以上か、数字と小文字を含む8文字以上にしてください」と警告されます。

16文字以上のランダム英数の組み合わせで作成し、Continueをクリックします

ユーザー名を決定します。

スペースの入ったユーザ名だと「ユーザー名には英数字またはハイフンのみを使用することができます。」と警告されます

一般的な名前だと「ユーザー名Yoshikawaは使用できません」と警告されます。

既に使用者がいると思われます。

is available と出たら、そのユーザー名は使用可能です。

Continueをクリックします

「製品の最新情報やお知らせをお届けします」との案内です。

デフォルトでチェック入っていないので、このままにします。

Continueをクリックします

アカウント作成がロボットで自動作成を試みられていないかの確認ページに移ります。

検証するをクリックして確認に入ります。

画像を判断して、適切なものを選択します。

今回は3回試験されました。

ロボットではないと判断されると、登録に使用したメールアドレスにコードが送られて来ます。

コードをページに入力します。

お客様のプロジェクトに最適なツールをご案内いたします。
チームメンバーは何人ですか?
私一人 2-5 5-10
10-20 20-50 50+
あなたは学生ですか、それとも教師ですか?
該当なし 学生 教師

該当するものをすべて選択すると、適切な GitHub プランをご案内します。

今回のアカウントはFree!で用意します。

GitHUBにログインできました。

ローカルのGitと連結するための準備

SSHキーの準備

Gitを操作していたGit bashで、ssh-keygen を入力します。

Enterとパスコード2回を入力すると、sshキーが作成された事が判ります。

sshキーの生成場所は、ユーザーディレクトリです。

Windows10の場合、C:\Users\[ユーザー名]\.ssh になります。

作成されているファイルで、.pub という拡張子のついたファイルをエディタで開き、内容を全てコピーします。

ログインできたGitHUB上で、https://github.com/settings/keys に接続します。

NEW SSHKey をクリックします。

タイトルを決めます。

複数のパソコンで開発する場合、複数のSSHキーを登録するので、今回は開発機1号機の意味でDevelopment01としました

keyの欄に、先ほどエディタで開いた .pub の中身をコピーしたものを貼り付けします。

Add SSH Key を押下します。

リモートリポジトリの用意

GetHUBページの右上アイコンを押下します。

するとメニューが開くため、Your repositories を押下します。

リモートリポジトリを作成します。

ローカルリポジトリのプッシュ

git bash に戻ります。

先ほど作成したリモートリポジトリにショートカットを作成します。

git remote add origin git@github.com:YoshikawaITLabo/currenttimestamp.git

※2行になっていますが、1つのコマンドです

は、私のリモートリポジトリ currenttimestamp に対してorigin というショートカットを作成します。

ちなみに、ショートカット名はorigin でなくてもいいのですが、gitの慣習上、origin が推奨されます。

これができたら、git push -u origin main でローカルリポジトリをプッシュします。

以降、アプリに変更を加える度、

  • git add .(ピリオド)
  • git commit -v :変更内容と理由
  • git log  :確認
  • git push -u origin main プッシュ

を実行すれば、変更履歴と理由が記録されていきます。

ブラウザからリモートリポジトリをみると、git commit -v で記載した変更の履歴があるのが判ります。

ここではもう一回、サイズ変更という変更を加え、一連のGit操作を実施しています。

Raspberry Piで使って見る

Raspberry PiのOSは、Linuxをベースにしています。

もちろんgitを使う事が可能です。

特にRaspberry Piのような実験に使用する事の多い機材では、接続するセンサーが変ったり、それに対応したプログラムの微修正の結果、内容がわからなくなってしまう事もあります。

正直に言うと、今回、この記事のリライトを図ったのは、Raspberry Pi用のSDカードが増え、どれが何の開発用だったか判らなくなってきたためです。

インストール

sudo apt-get install -y git だけでインストールできます。

ローカルリポジトリの作成

基本的には、Windowsでgit bashを使用した時と変りません。

今回は、Python でSSHログインして、ファイルを取得するプログラムを対象とします。

git version で、2.30.2がインストールされいる事が判ります。

cdコマンドで開発中のpythonのあるディレクトリへ移動します。

git init を実行します。

通常モードでは見えませんが、 ls -la で表示すると、隠しフォルダの .git が在るのが判ります。

git add .(ピリオド) で一時保管し

get statusで内容を確認します。

作成したpythonのファイルが在るので正常です。

git config –global user.email ‘info@yoshisyou.com’

git config –global user.name ‘Yoshikawa_Kazuhiro’

で名前とメールアドレスを指定します。

注意点として、Windows の時は”(ダブルクォーテーション)でしたが、Linuxでは'(シングルクォーテーション)でないとエラーになります。

git commit -m ‘Initial commit’ でコミットします。

リモートリポジトリの作成

Raspberry Piの場合、母機としてパソコンを用意する事が必須です。※そうでないとOSのインストールができない。

このため、SSH接続を用意する事が多いと思います。

その際、作成したSSHキーを使用する事ができます。

Raspberry Piにターミナル接続する設定で作成したSSHキーが、/home/(ユーザー)/.ssh に存在していれば、使用できます。

ただし、ssh-keygenで作成する際、ファイル名を変更せず、デフォルトで作成する必要があります。

ssh-keygen -t ed25519 で作成した場合は、id_ed25519 id_ed25519.pub が存在していなければなりません。

authorized_keys はid_ed25519.pubからcpで作成したもので、id_ed25519.pubも残っている必要があります。

そうでない場合は、ssh-keygen でkeyファイルを作成しなおした方が良いでしょう。

id_ed25519.pubの中身をkeyの欄に貼り付けします。

Raspberry Pi用のリモートリポジトリを作成します。

あとは、リモートリポジトリにショートカットを作成し

ローカルリポジトリをプッシュします。

git remote add origin git@github.com:YoshikawaITLabo/website_backup.git

git remote -v

git push -u origin master

Raspberry Piにインストールされるgitでは、プッシュの際はorigin masterです。

ブラウザから対象リポジトリを確認すると、変更履歴が記録されていました

VSCodeで使ってみる

Visual Studio Code(VSCode)は、Microsoftが開発した無料のコードエディターです。

標準でGitを管理する機能を備えています。

インストールされていない場合は、インストール手順などを記事にしてありますので、ご参照ください。

例として、Raspberry Pi上に作ったGitのあるディレクトリに、SSH接続して、pythonのファイルを開けてみましょう

このように、リポジトリが見つかったと教えてくれます。

はいをクリックします。

いいえを押下してしまったときや、うまく開かなかったときは、左のGitのアイコンからリポジトリを開くを選択し、対象のリポジトリを開くことができます。

ファイル内様に変更を加えます。

ファイルを保存すると、変更ファイルが表示されます。ファイル名にマウスを載せると、処理について表示されるので、+ボタンを押し、変更をステージに入れます。

コマンド操作の git add .(ピリオド) に該当します。

「やばい!しくじった!」という時は、変更を破棄することもできます。

ステージに入れ終えたら、コミットが可能になります。

git commit -v に相当します。

メッセージの枠に、変更内容や理由を記載します。

コミットが終わると、変更の同期が表示されます。

git push -u origin main に相当します。

GitとSSH接続のため、パスコードが要求されます。

入力すれば、ファイルはGitHUBに送られます。

GitHUBのページから確認すると、ちゃんと変更が記録されています。

ちなみに、この操作をおこなったパソコンは別に用意した実験機で、Gitをインストールしていません。

このとおり、git version に対し、エラーを返します。

VSCodeであれば、gitをインストールしたサーバー機の設定を使って、gitによるバージョン管理が行えます。

また、ターミナルを立ち上げておき、いちいちコマンドを入力するより、操作が簡単です。

VB.NETから使用してみる

VisualStudioを開き、作成してあるプロジェクトを開きます。

チームエクスプローラーを開きます。

gitの設定が正しければ、ここにプロジェクト名が表示されています

内容に変更を加え、ビルドします。

再び、チームエクスプローラーに切り換え、変更アイコンを押下すると、先ほどの変更とビルドで変更されたファイルがステージング済みの変更に表示されます。

コマンド操作の git add .(ピリオド) に該当します。

コメントを入れ、ステージング済みをコミットを押下します。

コミットが実行されました。

git commit -v がされたのと同じ状態です。

続いて同期に移動します。

先ほどのコミットが表示されています。

プッシュを押せば、リモートリポジトリに送信されます。

プッシュが完了しました。

リーモートリポジトリを確認すると、更新されています。

初回の接続の場合は、プッシュ時に、ブラウザ経由で連携を要求するダイアログが出現する事があります。

接続に成功すると、このように接続成功の表示がされます。

まとめ

改めて見直すと、gitはすごく便利なツールです。

過去には、要望を受けてプログラムを修正したものの、結局、不要とされ、元に戻すのが大変だった記憶もあります。

あのときgitを使っていれば、確かにラクだったかもしれません。

また、記事中にも書きましたが、コンピュータはだいたい、最悪のタイミグで故障します。

そのときも開発環境のアプリさえ入っていれば、gitHUBからプログラムをcloneしてこれるので、真っ青になる事はないでしょう。

ただ、GitHUBはネット上にありますから、個人的、あるいは小規模の開発は問題ないと思いますが、絶対に秘密にしなければならない機密プログラムは、情報漏洩の心配がありますから利用しない方が良いかもしれません。

非公開リポジトリにすることは可能なようですが、今回は触れません。

では、良き開発ライフを