🐢

[監査向け]Gitでリリース時のファイル差分を取得する

2023/12/30に公開

システムのリリースに当たって忘れてはいけないのが、システム監査。
メモレベルになりますが、複数の現場での実務経験をもとに、最低限必要な内容をまとめておきます。

なお、システム監査に関する内容は、システム監査制度について | 経済産業省をご覧ください。

概要

  • 本記事の目的: リリース時の記録を残し、システム監査に備える
  • 本記事の対象: Gitでソースコードを管理している場合
  • ポイント: 再現性があること(改ざん不可で、誰が監査しても同じ結果になること)

手順

以下、Gitにて、developブランチをmainブランチにマージする場合

(1) developブランチのコミットハッシュ値を取得

ローカル環境にて、以下を実施

# ①-1:developブランチをチェックアウトしたことがある場合
$ git checkout develop
# ①-2:developブランチをチェックアウトしたことがない場合
$ git checkout -b develop remotes/origin/develop

# ②:ブランチの最新化
$ git pull
# ③:コミットハッシュ値を取得
$ git log --oneline -n 1

(2) mainブランチのコミットハッシュ値を取得

# ①-1:mainブランチをチェックアウトしたことがある場合
$ git checkout main
# ①-2:mainブランチをチェックアウトしたことがない場合
$ git checkout -b main remotes/origin/main

# ②:ブランチの最新化
$ git pull
# ③:コミットハッシュ値を取得
$ git log --oneline -n 1

(3) develop - mainブランチ間のファイル差分を取得

# ①-1: ファイル差分の取得
$ git diff [(2)で取得したmainブランチのコミットハッシュ値] [(1)で取得したdevelopブランチのコミットハッシュ値] --name-status
# ②: この後、差分のあるファイル一覧が表示される

# ①-2, ②-2: ファイル差分が多い場合はファイルに出力するとラク
$ git diff [(2)で取得したmainブランチのコミットハッシュ値] [(1)で取得したdevelopブランチのコミットハッシュ値] --name-status > git_diff.txt

ここで、コンソールの左端に表示される文字の意味は以下の通り

文字 意味 備考
A 追加 addのA
M 変更 modifyのM
D 削除 deleteのD
R リネーム renameのR

リリース用のドキュメントへの記録

リリース用のドキュメント(自分の経験則では、BacklogやRedmine等へリリースチケットを作成→そちらに記載)に以下を記載しておきます。

(1) 基本的な情報

まずは、リリースに当たっての基本的な情報から。

  • リリース日時
  • リリース目的: 何のためのリリースか?
  • リリース担当者、監督者、承認者など: 責任の所在が誰にあるのか?

リリース前にすでに分かっている内容かと思うので、開発を進める中で記入を進めておくとよいでしょう。

(2) マージ元/先のコミットハッシュ値

手順の(1),(2)で取得した値を記入します。

ブランチ コミットハッシュ値 備考
develop(マージ元) xxxxxxx 手順の(1)で取得した値
main(マージ先) yyyyyyy 手順の(2)で取得した値

(3) 差分のあるファイル

続いて、対象のリリースで差分のあるファイルについてです。
手順(3) で取得したファイル一覧でOK。

# 手順の(3) で取得したdevelop - mainブランチ間のファイル差分を貼り付け

(4) リリース手順

どのような手順でリリースしたのか? も超重要!
というわけで、

  • リリース手順(実行コマンドやその順序)

も、記載しておきます。
本記事でいうと、手順(1)~(3)に記載の内容に加え、

  • ソースコードのマージ
  • 環境への展開

などなど。

(5) 証跡

  • リリース後の動作確認手順や仕様書
  • 上記の証跡(スクショなど)

など、リリース内容に不備がないことを証明する内容を取得、保管しておきましょう!

終わりに

ポイントは、マージ元/先のブランチのコミットハッシュ値を取得すること。
これさえできていれば、後から調査が入ってより詳細な内容が必要になった場合も、正確に差分を取得できます。

他のやり方も聞いてみたいので、こんなやり方しているよ、というのがありましたら、ぜひ教えてください!

参考

Discussion