git で Excel ファイルを管理・差分表示する完全ガイド【Mac・Windows 対応】

2015年12月24日


「Excelファイルを git に上げてしまった。でも git diff を実行しても差分が読めない」という経験はないだろうか。

デフォルトでは Excel(.xlsx)はバイナリファイルとして扱われるため、git は「変更あり」とは検知してくれるが、具体的にどのセルが変わったのかを表示してくれない。本記事では git-xlsx-textconv を使い、git diff でExcelの差分を人間が読める形で表示する手順を、Mac・Windows の両環境で解説する。

さらに、Excelファイルを git で管理する際の注意点・ベストプラクティスも合わせて紹介する。

git diff でExcelファイルの差分が表示されているターミナル画面


この記事で解決できること

  • git diff を実行しても Binary files differ としか出ない問題を解消する

  • .xlsx ファイルの差分(セル追加・削除・シート変更)を可視化する

  • .gitattributes を使ってリポジトリ全体・チーム全体に設定を共有する

  • Excel ファイルを git 管理する際の注意点とファイルサイズ対策を把握する


前提条件

このガイドを進める前に、以下の環境が必要だ。

  • OS: macOS または Windows 10/11

  • 必要なツール: git、Go(コンパイル環境)

  • 前提知識: gitの基本操作(commit、diff)

# バージョン確認
git --version
# 例: git version 2.43.0

go version
# 例: go version go1.22.0 darwin/arm64

Goがない場合: Go公式サイト からインストールできる。macOS なら brew install go、Windows なら公式インストーラーを実行するだけだ。

なくてもOK: Go 環境を用意できない場合は、代替として Python 製の openpyxl を使った自作スクリプトで同等の差分確認が可能だ。詳細は「応用編: Pythonで差分確認」で解説する。


全体の流れ

このガイドは以下の4ステップで構成されている。

gitconfig に diff ドライバ設定を追記した状態のエディタ画面


ステップ1: git-xlsx-textconv のインストール

git-xlsx-textconv は Excel ファイルをテキストに変換する CLI ツールで、git の差分ドライバとして動作する。Go 製のシングルバイナリなので、インストール後のメンテナンスが簡単だ。

Mac / Linux の場合

go install github.com/tokuhirom/git-xlsx-textconv@latest

インストール後、PATH を通す。

# ~/.zshrc または ~/.bash_profile に追記
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc
source ~/.zshrc

Windows の場合

PowerShell(またはコマンドプロンプト)で以下を実行する。

go install github.com/tokuhirom/git-xlsx-textconv@latest

Go のデフォルトインストールでは %USERPROFILE%\go\bin が自動で PATH に追加されることが多い。確認するには次のコマンドを使う。

where git-xlsx-textconv

git-xlsx-textconv.exe のパスが表示されれば成功だ。表示されない場合は、%USERPROFILE%\go\bin をシステム環境変数の PATH に手動で追加する。

動作確認

git-xlsx-textconv --help

ヘルプが表示されればインストール完了だ。

ステップ1完了の確認: git-xlsx-textconv コマンドが実行できれば完了。


ステップ2: ~/.gitconfig に差分ドライバを登録

git に Excel 用の差分ドライバを登録する。グローバル設定なので、一度設定すれば全リポジトリで有効になる。

コマンドで設定する場合(推奨)

git config --global diff.xlsx.textconv git-xlsx-textconv

手動で追記する場合

~/.gitconfig(Windows の場合は C:\Users\%USERNAME%\.gitconfig)を開き、以下を追記する。

[diff "xlsx"]
    textconv = git-xlsx-textconv

設定の確認

git config --global --list | grep xlsx
# 出力例: diff.xlsx.textconv=git-xlsx-textconv

gitconfig に diff ドライバ設定を追記した状態のエディタ画面

補足: --global で設定するとホームディレクトリの ~/.gitconfig に書き込まれる。特定リポジトリだけで有効にしたい場合は --global を外し、リポジトリのルートで実行すると .git/config に書き込まれる。

ステップ2完了の確認: git config --global --list | grep xlsx を実行し、diff.xlsx.textconv=git-xlsx-textconv が表示されれば完了。


ステップ3: リポジトリに .gitattributes を追加

.gitattributes ファイルをリポジトリの ルートディレクトリ に作成し、.xlsx ファイルに差分ドライバを割り当てる。このファイルはリポジトリにコミットできるため、チームメンバー全員に設定を共有できる。

# リポジトリのルートで実行
echo '*.xlsx diff=xlsx' >> .gitattributes
git add .gitattributes
git commit -m "Add .gitattributes for Excel diff"

.gitattributes の内容はこうなる。

*.xlsx diff=xlsx

.xls(旧形式)も対象にしたい場合

*.xlsx diff=xlsx
*.xls  diff=xlsx

ただし git-xlsx-textconv.xlsx 専用のため、.xls の差分は正確に出ないことがある。

よくあるミス

|
ミス
| 正しい書き方
|

| .gitattribute(末尾の s が抜ける)
| .gitattributes
|

| ルート以外のディレクトリに置く
| リポジトリのルートに置く
|

| コミットせずに .gitattributes を置く
| git add してからコミットする
|

ステップ3完了の確認: cat .gitattributes*.xlsx diff=xlsx が表示されれば完了。


ステップ4: 動作確認と差分の読み方

設定が完了したら、実際に Excel ファイルを変更して git diff を実行してみよう。

基本的な差分確認コマンド

# ワーキングツリーとステージの差分
git diff sample.xlsx

# ステージとHEADの差分
git diff --staged sample.xlsx

# 特定コミット間の差分
git diff COMMIT_HASH_A COMMIT_HASH_B -- sample.xlsx

# 1つ前のコミットとの差分
git diff HEAD~1 HEAD -- sample.xlsx

git diff でExcelファイルの行追加・削除がターミナルに表示されている様子

出力の読み方

差分は [シート名] セル内容 の形式で表示される。

diff --git a/sample.xlsx b/sample.xlsx
index aaa1203..51aa625 100644
--- a/sample.xlsx
+++ b/sample.xlsx
@@ -2,3 +2,4 @@
 [テストシート1] test2
 [テストシート1] test3
 [テストシート1] test4
+[テストシート1] test5

  • + が追加された行、- が削除された行

  • [テストシート1] がシート名、その後がセルの内容

  • 先頭のスペースは変更のない行(コンテキスト行)

行を追加した場合

@@ -2,3 +2,4 @@
 [テストシート1] test2
 [テストシート1] test3
 [テストシート1] test4
+[テストシート1] test5

行を削除した場合

@@ -1,5 +1,4 @@
 [テストシート1] test1
 [テストシート1] test2
 [テストシート1] test3
-[テストシート1] test4
 [テストシート1] test5

シート名を変更した場合

シート名が変わると、そのシートの全行が「削除→追加」として表示される点に注意しよう。

@@ -1,4 +1,4 @@
-[テストシート1] test1
-[テストシート1] test2
-[テストシート1] test3
-[テストシート1] test5
+[testシート1] test1
+[testシート1] test2
+[testシート1] test3
+[testシート1] test5


応用編

git log でコミット一覧を確認してから差分を見る

特定のExcelファイルに関係するコミット一覧を確認してから差分を見ると効率がよい。

# sample.xlsx に変更があったコミット一覧を表示
git log --oneline -- sample.xlsx

# 出力例:
# 9f3a2b1 シート名変更
# 7c8d4e0 test5行を追加
# 3a1b2c9 初回コミット

# 特定コミットの差分を確認
git diff 3a1b2c9 7c8d4e0 -- sample.xlsx

git show でコミット単体の差分を見る

git show COMMIT_HASH -- sample.xlsx

Python で差分確認する方法(Go 環境がない場合)

Go 環境が用意できない場合、Python の openpyxl を使って同様の差分確認ができる。

pip install openpyxl

import openpyxl

def xlsx_to_text(path):
    wb = openpyxl.load_workbook(path, read_only=True, data_only=True)
    lines = []
    for sheet in wb.worksheets:
        for row in sheet.iter_rows():
            for cell in row:
                if cell.value is not None:
                    lines.append(f"[{sheet.title}] {cell.value}")
    return "\n".join(lines)

# 使い方例
text = xlsx_to_text("sample.xlsx")
print(text)

このスクリプトで2つのファイルの出力を比較すれば、diff コマンドで差分を確認できる。

python xlsx_to_text.py old.xlsx > old.txt
python xlsx_to_text.py new.xlsx > new.txt
diff old.txt new.txt

.gitignore で大きな Excel ファイルを除外する

Excel ファイルは数十MB になることもある。リポジトリを軽量に保つために、サイズが大きいファイルは .gitignore で除外し、別途ファイルサーバーや SharePoint で管理する方法も検討しよう。

# .gitignore の例
# 特定のディレクトリ内の xlsx だけを除外
reports/*.xlsx

# すべての xlsx を除外(差分確認が不要な場合)
# *.xlsx

Git LFS でバイナリファイルを管理する

Excel ファイルが頻繁に更新される場合、Git LFS(Large File Storage) を使うとリポジトリの肥大化を防げる。git-xlsx-textconv と Git LFS は併用可能だ。

# Git LFS のインストール
git lfs install

# .xlsx を LFS で管理
git lfs track "*.xlsx"
git add .gitattributes
git commit -m "Track .xlsx with Git LFS"


トラブルシュート

|
症状
| 原因
| 解決策
|

| git diff を実行しても差分が出ない
| .gitattributes がリポジトリルートにない、またはファイル名が間違っている
| ls .gitattributes で存在確認。ファイル名末尾の s を確認
|

| git-xlsx-textconv: command not found
| インストール先が PATH に含まれていない
| echo $PATH$(go env GOPATH)/bin が含まれているか確認。source ~/.zshrc でシェル再読み込み
|

| Binary files differ と表示される
| ~/.gitconfig の設定が反映されていない
| git config --global --list \| grep xlsx で設定確認
|

| Windows で go install 後にコマンドが見つからない
| %USERPROFILE%\go\bin が PATH に含まれていない
| システム環境変数の PATH に %USERPROFILE%\go\bin を追加
|

| シート名変更で全行が差分として表示される
| git-xlsx-textconv の仕様。シート名変更時は全行を再出力する
| 仕様として把握しておく。実害はない
|

| .xls ファイルの差分が正確でない
| git-xlsx-textconv.xlsx 専用
| .xls.xlsx に変換してから管理するか、Python の openpyxl を使う
|


まとめ

本記事では git で Excel(.xlsx)ファイルを管理し、git diff で差分を確認する方法を解説した。

  • ステップ1: go installgit-xlsx-textconv をインストール

  • ステップ2: ~/.gitconfig[diff "xlsx"] ドライバを登録

  • ステップ3: リポジトリのルートに .gitattributes を追加して *.xlsx diff=xlsx を記述

  • ステップ4: git diff で差分を確認。[シート名] セル内容 の形式で表示される

.gitattributes をコミットしておけば、チーム全員が同じ設定で差分を確認できる。Go 環境がない場合は Python の openpyxl を使った代替手段も活用してほしい。

Excelファイルのバイナリ差分問題で困っているチームは、ぜひ一度試してみてほしい。


関連記事

gitExcel

Posted by GENDOSU