コンテンツにスキップ

第2章 Gitの設定と関連ファイル

Git は「インストールしたらすぐ使える」ツールですが、
設定ファイルをきちんと整えることで、チーム全体の開発効率が大きく変わります

この章では、管理者として知っておくべき設定ファイルを順番に見ていきましょう ⚙️


2.1 .gitconfig ─ Gitの設定ファイル

Section titled “2.1 .gitconfig ─ Gitの設定ファイル”

Git の設定には 3つの階層 があり、より狭い範囲の設定が優先されます。

flowchart TD
    S["🖥️ System
/etc/gitconfig
PC全体に適用"] G["👤 Global
~/.gitconfig
ユーザー全体に適用"] L["📁 Local
.git/config
リポジトリごとに適用"] S --> G --> L P["⬆️ 下にいくほど優先度が高い"] style S fill:#F3E5F5,stroke:#8E24AA,color:#4A148C style G fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style L fill:#E8F5E9,stroke:#43A047,color:#1B5E20 style P fill:#FFF9C4,stroke:#F9A825,color:#F57F17
階層ファイルの場所対象範囲設定コマンド
System/etc/gitconfigPC 全体git config --system
Global~/.gitconfigユーザー全体git config --global
Local.git/configリポジトリ単位git config --local
Terminal window
# ユーザー名とメールアドレス(必須)
git config --global user.name "Taro Yamada"
git config --global user.email "taro@example.com"
# デフォルトブランチ名
git config --global init.defaultBranch main
# エディタの設定
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim
# 改行コードの自動変換
git config --global core.autocrlf input # macOS / Linux
git config --global core.autocrlf true # Windows
Terminal window
# fetch 時に不要なリモートブランチを自動削除
git config --global fetch.prune true
# push 時に現在のブランチだけを送る(安全)
git config --global push.default current
# pull 時に rebase する(直線的な履歴を保つ)
git config --global pull.rebase true
# カラー表示を有効化
git config --global color.ui auto
# 日本語ファイル名を正しく表示
git config --global core.quotepath false
Terminal window
# すべての設定を一覧表示(どの階層かも表示)
git config --list --show-origin
# 特定の設定を確認
git config user.name
# Global 設定ファイルをエディタで直接編集
git config --global --edit

2.2 .gitignore ─ 追跡しないファイルを指定

Section titled “2.2 .gitignore ─ 追跡しないファイルを指定”

.gitignore は、Git に 「このファイルは追跡しないで」 と伝える設定ファイルです。
リポジトリのルートに配置し、バージョン管理の対象から除外したいファイルを指定します。

追跡すべきでないファイルの例を見てみましょう。

ファイルの種類理由
ビルド成果物dist/, build/再生成できる
依存パッケージnode_modules/, vendor/パッケージマネージャで復元できる
環境設定.env, .env.local機密情報を含む可能性
IDE 設定.vscode/, .idea/個人の環境に依存
OS 生成ファイル.DS_Store, Thumbs.db不要なノイズ
ログ・キャッシュ*.log, .cache/一時的なデータ
.gitignore
# コメント
# ─────────────────────────────
# 特定のファイル
.env
.DS_Store
# 特定の拡張子
*.log
*.tmp
# 特定のディレクトリ(末尾にスラッシュ)
node_modules/
dist/
build/
# ワイルドカード
*.min.js
*.min.css
# 否定パターン(特定のファイルだけ追跡する)
!important.log
# ディレクトリの深さに関係なくマッチ
**/logs/
**/*.backup
パターンマッチするもの説明
*.logerror.log, debug.log拡張子でマッチ
build/build/ ディレクトリ全体ディレクトリ指定
/TODOルート直下の TODO のみルート限定
doc/*.txtdoc/notes.txt1階層だけマッチ
doc/**/*.pdfdoc/a/b/c.pdf全階層マッチ
!README.mdREADME.md を除外しない否定パターン

すでに追跡してしまったファイルを除外する

Section titled “すでに追跡してしまったファイルを除外する”

.gitignore に追加しただけでは、すでに追跡中のファイル は除外されません。
キャッシュをクリアする必要があります。

Terminal window
# 特定のファイルを追跡から外す
git rm --cached .env
# ディレクトリ全体を追跡から外す
git rm -r --cached node_modules/
# .gitignore 更新後に全体を再適用
git rm -r --cached .
git add .
git commit -m "chore: .gitignore を更新し追跡対象を修正"

2.3 .gitattributes ─ ファイル属性の管理

Section titled “2.3 .gitattributes ─ ファイル属性の管理”

.gitattributes は、ファイルごとに Git の扱い方を指定する 設定ファイルです。
改行コードの統一、差分表示の方法、Git LFS の対象指定などに使います。

Windows(CRLF)と macOS/Linux(LF)が混在するチームでは特に重要です。

.gitattributes
# テキストファイルの改行コードを自動正規化
* text=auto
# 特定の拡張子を明示的に指定
*.js text eol=lf
*.ts text eol=lf
*.json text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.sh text eol=lf
# バイナリファイルとして扱う(差分を取らない)
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.woff2 binary
設定意味
text=autoGit が自動判定してテキストファイルの改行を正規化
text eol=lfチェックアウト時に LF に統一
text eol=crlfチェックアウト時に CRLF に統一
binaryバイナリとして扱う(改行変換・差分表示しない)
.gitattributes
# ロックファイルの差分を非表示
package-lock.json -diff
yarn.lock -diff
# 画像の差分を exif で表示(要設定)
*.png diff=exif

大容量ファイルを扱う場合(第3章で詳しく解説)。

.gitattributes
*.psd filter=lfs diff=lfs merge=lfs -text
*.ai filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text

Git Hooks は、特定のイベント(コミット、プッシュなど)が発生したときに
自動でスクリプトを実行する 仕組みです。

flowchart LR
    A["git commit 実行"] --> B["pre-commit
フック発火 🔥"] B -- "成功 ✅" --> C["コミット完了"] B -- "失敗 ❌" --> D["コミット中止"] style A fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style B fill:#FFF9C4,stroke:#F9A825,color:#F57F17 style C fill:#E8F5E9,stroke:#43A047,color:#1B5E20 style D fill:#FFEBEE,stroke:#E53935,color:#B71C1C
フック名タイミング使用例
pre-commitコミット前リンター実行、フォーマットチェック
commit-msgコミットメッセージ入力後メッセージ形式のチェック
pre-pushプッシュ前テスト実行
post-mergeマージ後依存パッケージの自動インストール
prepare-commit-msgメッセージ編集前テンプレートの自動挿入

実践例:pre-commit でリンターを実行

Section titled “実践例:pre-commit でリンターを実行”
.git/hooks/pre-commit
#!/bin/sh
echo "🔍 コミット前チェックを実行中..."
# JavaScript/TypeScript のリント
npx eslint --quiet .
if [ $? -ne 0 ]; then
echo "❌ ESLint エラーがあります。修正してからコミットしてください。"
exit 1
fi
echo "✅ チェック通過!"
exit 0
Terminal window
# 実行権限を付与(忘れがち!)
chmod +x .git/hooks/pre-commit

実践例:commit-msg でメッセージ形式をチェック

Section titled “実践例:commit-msg でメッセージ形式をチェック”
.git/hooks/commit-msg
#!/bin/sh
MSG=$(cat "$1")
PATTERN="^(feat|fix|docs|style|refactor|test|chore|perf|ci)(\(.+\))?: .+"
if ! echo "$MSG" | grep -qE "$PATTERN"; then
echo "❌ コミットメッセージが Conventional Commits 形式ではありません。"
echo " 例: feat(auth): ログイン機能を追加"
echo " 例: fix: ヘッダーの表示崩れを修正"
exit 1
fi
exit 0
Terminal window
# Husky のインストール
npm install --save-dev husky
# Husky の初期化
npx husky init
# pre-commit フックを設定
echo "npx lint-staged" > .husky/pre-commit

.husky/ ディレクトリはリポジトリに含められるため、
チーム全員に同じ Hooks が自動適用 されます。


2.5 Git Aliases ─ コマンドの効率化

Section titled “2.5 Git Aliases ─ コマンドの効率化”

毎回長いコマンドを打つのは非効率です。
エイリアスで日常操作をスピードアップしましょう。

Terminal window
# ──── 基本操作 ────
git config --global alias.st "status"
git config --global alias.co "checkout"
git config --global alias.br "branch"
git config --global alias.ci "commit"
# ──── ログ表示 ────
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.ll "log --oneline -15"
git config --global alias.last "log -1 HEAD --stat"
# ──── 差分確認 ────
git config --global alias.df "diff"
git config --global alias.ds "diff --staged"
# ──── 便利系 ────
git config --global alias.unstage "restore --staged"
git config --global alias.undo "reset --soft HEAD~1"
git config --global alias.amend "commit --amend --no-edit"
Terminal window
# 設定前
git log --oneline --graph --all
# 設定後
git lg

ファイル / 設定場所バージョン管理主な用途
.gitconfig~/.gitconfigユーザー個人の設定
.gitignoreリポジトリルート追跡除外ファイルの指定
.gitattributesリポジトリルート改行コード統一、LFS 指定
.git/hooks/.git/hooks/ローカル自動化
.husky/リポジトリルートHooks のチーム共有
Git Aliases.gitconfigコマンドのショートカット