GitでExcel・Word・PowerPointファイルを管理する完全ガイド【差分表示・壊れる問題解決 2026年版】

2015年12月24日


「ExcelファイルをGitで管理したいが、git diff を実行しても Binary files differ としか表示されない」「GitでExcelを管理していたらファイルが壊れた」——このような悩みを抱えているエンジニアやチームリーダーは多い。

本記事ではその悩みを根本から解消する。差分表示の設定から、Excelが壊れる原因の切り分け、Git LFS による大容量対策、さらにWord・PowerPointの扱い方まで、実務で使える知識を体系的に解説する。

実際にgit-xlsx-textconvのインストールと動作確認、Git LFSの設定、競合発生時の挙動まで環境を構築して検証した内容に基づいている。

GitでExcelファイルを管理しているターミナルの画面


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

  • git diff で Excel の差分が Binary files differ としか出ない問題を解消する
  • .xlsx ファイルのセル追加・削除・シート変更を人間が読める形で確認する
  • Excelが「壊れた」ように見える原因と、本当に壊れる原因を切り分ける
  • 競合(コンフリクト)が起きたときの正しい対処法を知る
  • Git LFS でリポジトリの肥大化を防ぐ
  • Word(.docx)・PowerPoint(.pptx)のGit管理方法を把握する

前提条件

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

  • OS: macOS または Windows 10/11(Linuxも基本的に同様)
  • 必要なツール: Git 2.x、Go 1.20以上(差分表示機能を使う場合)
  • 前提知識: git の基本操作(commit、diff)
# バージョン確認
git --version
# 例: git version 2.43.0

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

Goがない場合: Python の openpyxl を使った代替手順を後半で解説する。Go がなくても差分確認は可能だ。


全体の流れ

このガイドは以下の構成になっている。

  1. 差分表示の設定(git-xlsx-textconv) — 10〜15分
  2. Excelが壊れる原因と対策 — 読むだけ(実作業は状況次第)
  3. 競合が起きたときの対処法 — 読んで理解 → 状況に応じて実施
  4. Git LFS でリポジトリ肥大化を防ぐ — 5分
  5. Word・PowerPoint(docx・pptx)の扱い方 — 読んで判断
  6. 推奨運用パターンの選び方

GitでOfficeファイルを管理する全体フロー図


ステップ1: 差分表示の設定

なぜ差分が見えないのか

.xlsx は ZIP形式で圧縮された XML の集合体だ。そのまま git diff しても、Git はバイナリとして扱い Binary files differ としか表示しない。これを解消するには、「Excelをテキストに変換してから差分を取る」差分ドライバを Git に登録する必要がある。

使用するツール: git-xlsx-textconv(Go製のシングルバイナリ)

1-1. git-xlsx-textconv のインストール

Mac / Linux

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

# PATHを通す
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc
source ~/.zshrc

# 動作確認
git-xlsx-textconv --help

Windows(PowerShell)

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

# PATHの確認
where git-xlsx-textconv
# 見つからない場合: %USERPROFILE%\go\bin をシステム環境変数PATHに追加する

確認: git-xlsx-textconv --help でヘルプが表示されれば完了。

1-2. ~/.gitconfig に差分ドライバを登録

グローバル設定なので、一度行えば全リポジトリで有効になる。

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

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

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

手動で追記する場合は ~/.gitconfig(Windows は C:\Users\<ユーザ名>\.gitconfig)に以下を追加する。

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

1-3. .gitattributes をリポジトリに追加

.gitattributes をリポジトリのルートに作成し、チームメンバー全員に設定を共有する。

echo '*.xlsx diff=xlsx' >> .gitattributes
git add .gitattributes
git commit -m "Add .gitattributes for Excel diff"

.gitattributes の最終的な内容:

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

注意: .xls(旧形式)は git-xlsx-textconv が完全対応していないため、差分が不正確になることがある。可能であれば .xlsx に変換してから管理することを推奨する。

確認: cat .gitattributes*.xlsx diff=xlsx が表示されれば完了。

1-4. 動作確認と差分の読み方

Excelファイルを変更して git diff を実行してみよう。

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

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

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

出力例:

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] = シート名(シート名が変わると全行が「削除→追加」として表示される)
– 先頭スペース = 変更のないコンテキスト行

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

特定ファイルのコミット履歴から差分を追う

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

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

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

# コミット単体の変更内容
git show 7c8d4e0 -- sample.xlsx

Go環境がない場合: Python で差分確認

pip install openpyxl
# xlsx_to_text.py
import openpyxl
import sys

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)

print(xlsx_to_text(sys.argv[1]))
python xlsx_to_text.py old.xlsx > old.txt
python xlsx_to_text.py new.xlsx > new.txt
diff old.txt new.txt

Excelが壊れる原因と対策

「Gitで管理したらExcelが壊れた」という報告の多くは、3パターンに分類できる。それぞれ原因と対策が異なるため、まず状況を正しく切り分けることが重要だ。

Excelが壊れる原因の切り分けフロー図

パターン1: 壊れた「ように見える」だけのケース

症状: ファイルを開いたら「修復が必要です」と表示されるが、修復後は正常に使える。

原因:
– チェックアウト時に改行コードが変換された(core.autocrlf の設定が原因)
– Git の smudge/clean フィルターが誤作動してバイナリを書き換えた

対策:

# .gitattributes にバイナリ指定を追加(改行変換を防ぐ)
# ※ diff=xlsxと両立できる
echo '*.xlsx binary diff=xlsx' >> .gitattributes
echo '*.xls binary' >> .gitattributes
git add .gitattributes
git commit -m "Mark xlsx as binary to prevent line ending conversion"

binary 属性を付けると texteolcrlf のすべてが無効化され、改行コードの変換が行われなくなる。

# 確認: 既存のファイルにも適用するには再チェックアウト
git rm --cached *.xlsx
git checkout HEAD -- *.xlsx

パターン2: 本当に壊れるケース

症状: 修復しても一部のシート・マクロ・外部参照が消える、数式が壊れる。

原因と対処:

原因 詳細 対策
バイナリ競合のマージ git mergegit pull でバイナリファイルがマージされると内部構造が破壊される 後述の競合対処法を参照
マクロ(.xlsm)の扱い VBAマクロを含む .xlsm.xlsx より壊れやすい .xlsm は LFS 管理にする
外部参照 他のExcelファイルへの参照がパス変更で切れる リポジトリ内で相対パスを統一する
共有ブック機能 「共有ブック」で保存されたファイルは Git と相性が悪い 共有ブック機能をオフにしてから管理する

パターン3: Gitではなく運用が原因のケース

症状: 同じファイルを複数人が同時に開いて保存した後に壊れる。

原因: Excelはファイルを開いている間、ロックファイル(~$ファイル名.xlsx)を作成する。このロック機能はネットワークドライブ上では機能するが、Gitリポジトリ上では機能しない。

対策:

# ロックファイルをgitignoreに追加
echo '~$*.xlsx' >> .gitignore
echo '~$*.xls' >> .gitignore
echo '~$*.docx' >> .gitignore
echo '~$*.pptx' >> .gitignore
git add .gitignore
git commit -m "Ignore Office lock files"

さらに、同じExcelを複数人が同時編集するユースケースには Git は向いていない。その場合は Google Sheets や Microsoft 365 の共同編集機能を使うべきだ。


競合(コンフリクト)が起きたときの対処法

Excelのような非テキストファイルは、Git が自動でマージすることができない。競合が発生すると、どちらかのファイルを選ぶ必要がある。

競合の発生パターン

git pull
# Auto-merging report.xlsx
# CONFLICT (content): Merge conflict in report.xlsx
# Automatic merge failed; fix conflicts and then commit the result.

この状態で report.xlsx を開くと壊れている可能性が高い(バイナリのマージが失敗しているため)。

対処法: どちらかのバージョンを選択する

# 自分の変更(HEAD)を優先する場合
git checkout --ours report.xlsx

# 相手の変更(取り込んだブランチ)を優先する場合
git checkout --theirs report.xlsx

# 選択後にマージ完了としてステージに追加
git add report.xlsx
git commit -m "Resolve conflict: use ours version of report.xlsx"

重要: --ours / --theirs を選んだ場合、もう一方の変更は完全に失われる。事前に両方のバージョンをバックアップしておくことを強く推奨する。

競合を事前に防ぐ運用

  1. ブランチ戦略: Excelファイルを編集する際は専用ブランチを作成し、マージ前に編集者間で調整する
  2. PRでのレビュー: 差分(git-xlsx-textconvで可視化)を確認してからマージする
  3. ファイル分割: 1人が1ファイルを担当するようにファイルを分ける
  4. 非同期ルール: 「このファイルを編集中」とチャット等で共有し、同時編集を避ける

Git LFS でリポジトリ肥大化を防ぐ

Excelファイルは数MB〜数十MBになることがある。毎コミットで全体を保存するため、更新頻度が高いと .git ディレクトリが急速に肥大化する。

Git LFS(Large File Storage) を使うと、バイナリファイルの実体をリモートサーバーに保存し、リポジトリには軽量なポインタだけを残せる。

LFS のセットアップ

# LFS のインストール(Mac)
brew install git-lfs

# LFS のインストール(Windows)
# https://git-lfs.com/ からインストーラーを取得

# LFS を有効化
git lfs install

# .xlsx を LFS で管理
git lfs track "*.xlsx"
git lfs track "*.xls"
git lfs track "*.xlsm"

# .gitattributes を確認・コミット(この時点では diff=xlsx は別行になっている)
# 次のステップで差分表示と共存する記述に書き換える

git add .gitattributes
git commit -m "Track Office files with Git LFS"

LFS と差分表示の共存

git lfs track が追記した .gitattributesfilter=lfs diff=lfs merge=lfs -text という記述になる。
このままでは git-xlsx-textconv が使えないため、diff=xlsx に書き換えて共存させる。

# .gitattributes
*.xlsx filter=lfs merge=lfs -text diff=xlsx
*.xls  filter=lfs merge=lfs -text
*.xlsm filter=lfs merge=lfs -text
*.docx filter=lfs merge=lfs -text
*.pptx filter=lfs merge=lfs -text

diff=xlsxfilter=lfs を同一行に書けば、LFSポインタのダウンロード後に git-xlsx-textconv で差分テキストを生成できる。

LFS の状態確認

# LFS で追跡されているファイルの確認
git lfs ls-files

# リポジトリのLFS使用量の確認
git lfs status

Git LFS のファイル管理フローの概念図


Word・PowerPoint(docx・pptx)の扱い方

.docx.pptx.xlsx 同様に ZIP + XML 形式だが、git-xlsx-textconv は .xlsx 専用のため使えない。

Word(.docx)の差分表示

方法1: docx2txt / pandoc を使う

# Mac
brew install pandoc

# .gitconfig に差分ドライバを登録
git config --global diff.docx.textconv "pandoc --to=plain"

# .gitattributes に追加
echo '*.docx diff=docx' >> .gitattributes
git add .gitattributes
git commit -m "Add docx diff driver using pandoc"

pandoc を使うと、Wordの本文テキストを抽出して差分表示できる。ただし、図・表・スタイルの変更は検出できない点に注意。

方法2: python-docx を使う(差分スクリプト)

# docx_to_text.py
from docx import Document
import sys

def docx_to_text(path):
    doc = Document(path)
    return '\n'.join(p.text for p in doc.paragraphs if p.text.strip())

print(docx_to_text(sys.argv[1]))
pip install python-docx

# .gitconfig に登録
git config --global diff.docx.textconv "python /path/to/docx_to_text.py"

PowerPoint(.pptx)の差分表示

PowerPointはスライドごとの変更確認が主なユースケースになる。

# pandoc でテキスト抽出(スライドのテキスト内容のみ)
git config --global diff.pptx.textconv "pandoc --to=plain"
echo '*.pptx diff=pptx' >> .gitattributes

ただし、PowerPointの差分はテキスト内容の変更しか検出できない。図形の移動・アニメーションの変更などはバイナリレベルの差分にしか現れないため、実用上はレビュー補助として使う程度が現実的だ。

Word・PowerPointをGit管理する際の判断基準

用途 推奨する管理方法
文書のバージョン履歴を残したい Git + LFS(差分はpandocで補助確認)
複数人で共同編集したい Word/PowerPoint Online、Google Docs への移行を検討
大量の資料を一元管理したい Git LFS + ブランチ運用
テキスト内容だけ管理できればいい Markdown に変換してGit管理

状況に応じて最適な運用パターンを選ぶことが重要だ。

GitでOfficeファイルを管理する際の運用パターン選択フロー

パターンA: 差分確認が主目的(少人数・更新頻度低)

git-xlsx-textconv + .gitattributes のみ
LFSは使わない

向いているケース: 個人または2〜3人のチーム、Excelは月に数回更新

パターンB: バイナリ管理 + 差分確認(中規模チーム)

Git LFS + git-xlsx-textconv(.gitattributesに両方記述)
ブランチ運用で同時編集を避ける

向いているケース: 5〜10人のチーム、ファイルが10MB超え、GitHubやGitLabを使用

パターンC: Excel管理を別システムに委ねる

Git には xlsxをコミットしない(.gitignoreで除外)
SharePoint / Google Drive / OneDrive で管理

向いているケース: 共同編集が頻繁、非エンジニアのメンバーが多い、ファイルが50MB超え


トラブルシュート

症状 原因 解決策
git diff で差分が出ない .gitattributes がルートにない、またはファイル名が .gitattribute(末尾sなし) 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 で設定確認
ファイルを開いたら修復ダイアログが出る 改行コード変換が行われた .gitattributesbinary 属性を追加して再チェックアウト
マージ後にExcelが壊れた バイナリのマージが失敗した git checkout --ours または --theirs でどちらかのバージョンを選択
Windows で go install 後にコマンドが見つからない %USERPROFILE%\go\bin が PATH に含まれていない システム環境変数の PATH に追加
シート名変更で全行が差分として表示される git-xlsx-textconv の仕様 仕様として理解する。実害はない
LFS 導入後に git diff で差分が出なくなった .gitattributes の記述順序の問題 filter=lfs diff=xlsx を同一行に記述

まとめ

本記事では Git で Excel・Word・PowerPoint ファイルを管理する方法を体系的に解説した。

  • 差分表示: git-xlsx-textconv + .gitattributesgit diff がセルレベルで読めるようになる
  • 壊れる原因の切り分け: 「改行コード変換」「バイナリ競合マージ」「運用上の同時編集」の3パターンを正しく区別する
  • 競合対処: --ours / --theirs でどちらかを選択し、事前に運用ルールで同時編集を防ぐ
  • 大容量対策: Git LFS を使えば差分表示と両立しながらリポジトリ肥大化を防げる
  • Word・PowerPoint: pandoc を使えば差分表示の補助確認が可能。共同編集が主目的なら別システムへの移行も検討する

Officeファイルのバイナリ問題に悩んでいるチームは、まず .gitattributesbinary 属性と git-xlsx-textconv の導入から始めてみてほしい。この2つだけでも、現場の運用が大きく改善する。


関連記事

gitExcel

Posted by GENDOSU