Gitでバージョン管理

目次
Gitとは?
Gitは、コードの変更履歴を追跡し、複数の開発者が同時に作業できるようにする分散型バージョン管理システムです。効率的なブランチ管理により、安全な開発フローを実現します。
前職では不要だったバージョン管理
社内SEとして勤務していた頃は、システム周りの技術者が自分独りという環境でした。
ある意味仕方がありませんが、数百人の社員が、数百台のパソコンで仕事をする大会社のオフィスビルなら、複数の技術者でサポートする必要もあるでしょうが、中小企業ではひとり情報システム、いわゆる「ひとり情シス」がある意味当然だったりします。
このため、社内での業務支援に開発したアプリケーションは、要望を聞くのも私で、実現のための機能を考えるのも私。コーディングもテストも私なので、バージョン管理の必要性があまりありませんでした。
例えば、要望を受けてプログラムを修正したとしても、変更部分に理由と日付をコメントで入れておけば、それほど困る事はありませんでした。
結局、前職を辞する前に、後任への引き継ぎが発生する時になって、コードの共有などの必要が生じ、はじめて導入を図りました。
そのとき、大変役にたったのが、udemy の動画でした。
有料ではありますが、時折、かなりの割引をしていて、そのときに買うのが狙い目です。
Gitについては、「もう怖くないGit!チーム開発で必要なGitを完全マスター」を受講しました。
結果、前職で使用していたコードを移植できました。
今回は、復習をかねて、Gitの使い方を記事にしてみます。
Gitのインストール(Windows編)
まず、Gitをパソコンにインストールします。
Git でGoogleを検索すると、すぐに見つかります。
これでインストールは完了です。
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 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のリモートリポジトリを保存してあれば、最悪、別のパソコンにリポジトリを取得して作業を継続することができます。

画像を判断して、適切なものを選択します。
今回は3回試験されました。
ローカルのGitと連結するための準備
SSHキーの準備

sshキーの生成場所は、ユーザーディレクトリです。
Windows10の場合、C:\Users\[ユーザー名]\.ssh になります。
作成されているファイルで、.pub という拡張子のついたファイルをエディタで開き、内容を全てコピーします。

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

タイトルを決めます。
複数のパソコンで開発する場合、複数のSSHキーを登録するので、今回は開発機1号機の意味でDevelopment01としました
keyの欄に、先ほどエディタで開いた .pub の中身をコピーしたものを貼り付けします。
Add SSH Key を押下します。
リモートリポジトリの用意
ローカルリポジトリのプッシュ

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 プッシュ
を実行すれば、変更履歴と理由が記録されていきます。
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 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の欄に貼り付けします。

あとは、リモートリポジトリにショートカットを作成し
ローカルリポジトリをプッシュします。
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 add .(ピリオド) に該当します。
「やばい!しくじった!」という時は、変更を破棄することもできます。

ちなみに、この操作をおこなったパソコンは別に用意した実験機で、Gitをインストールしていません。
このとおり、git version に対し、エラーを返します。
VSCodeであれば、gitをインストールしたサーバー機の設定を使って、gitによるバージョン管理が行えます。
また、ターミナルを立ち上げておき、いちいちコマンドを入力するより、操作が簡単です。
VB.NETから使用してみる

再び、チームエクスプローラーに切り換え、変更アイコンを押下すると、先ほどの変更とビルドで変更されたファイルがステージング済みの変更に表示されます。
コマンド操作の git add .(ピリオド) に該当します。
コメントを入れ、ステージング済みをコミットを押下します。

初回の接続の場合は、プッシュ時に、ブラウザ経由で連携を要求するダイアログが出現する事があります。
接続に成功すると、このように接続成功の表示がされます。
まとめ
改めて見直すと、gitはすごく便利なツールです。
過去には、要望を受けてプログラムを修正したものの、結局、不要とされ、元に戻すのが大変だった記憶もあります。
あのときgitを使っていれば、確かにラクだったかもしれません。
また、記事中にも書きましたが、コンピュータはだいたい、最悪のタイミグで故障します。
そのときも開発環境のアプリさえ入っていれば、gitHUBからプログラムをcloneしてこれるので、真っ青になる事はないでしょう。
ただ、GitHUBはネット上にありますから、個人的、あるいは小規模の開発は問題ないと思いますが、絶対に秘密にしなければならない機密プログラムは、情報漏洩の心配がありますから利用しない方が良いかもしれません。
非公開リポジトリにすることは可能なようですが、今回は触れません。
では、良き開発ライフを