# Git Ops Folder Init

> 業務フォルダを git リポジトリ化し、ツール設定やナレッジ文書だけを安全に追跡する。Use when: Office 文書や PDF が混在する業務フォルダで、AI ツール用設定と知識資産だけを版管理したいとき。

- Skill: `ryomurakami1983/git-ops-folder-init` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add ryomurakami1983/git-ops-folder-init`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ryomurakami1983/git-ops-folder-init/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: RyoMurakami1983 (https://skillmd.com/u/ryomurakami1983)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/ryomurakami1983/git-ops-folder-init

---

# Git 業務フォルダ初期化スキル

業務フォルダ・運用フォルダをgitリポジトリとして初期化し、**ナレッジアーティファクトだけを追跡**するスキル。
Markdownドキュメント、スクリプト、設定ファイルのみを管理し、バイナリファイル（Officeドキュメント、PDF、画像、動画等）は自動的に除外する。

## こんなときに使う
**使うべき時**:

- **業務フォルダ・運用フォルダ**（製造記録、品質文書、プロジェクトアーカイブ等）の**スクリプトやナレッジ文書**をバージョン管理したい時
- フォルダに**混在コンテンツ**がある — 管理したいファイルと管理したくないファイルが混在している
- **ゼロサプライズのgit管理**を実現したい — 意図しないファイルが絶対にコミットされない状態
- ネットワーク共有ドライブ上の「ただのファイル群」から**docs-as-code**への移行
- **非開発者チーム**向けのgit運用 — 大きなバイナリファイルを誤ってコミットする心配をなくしたい

**使わない方がよい時**:
- フォルダが主にコードリポジトリの場合（言語別の標準gitignoreを使用）
- バイナリファイルも追跡する必要がある場合（Git LFSを使用）
- フォルダ内の全ファイルがテキスト形式で追跡すべき場合（`git init`を直接使用）

---

## 基本理念（Core Principles）

1. **ブロックリストよりアローリスト** — 「全て無視して、意図したものだけを許可」は、予期しないコミットを構造的に防ぐ（基礎と型の追求）
2. **明示的な意図** — 追跡するファイル種別は全て意識的な決断。「なんとなく」で追跡されるファイルがない（余白の設計）
3. **ナレッジ層の分離** — バイナリ文書は「何を」を含む。スクリプトとMarkdownは「どうやって、なぜ」を含む。後者だけがバージョン管理で価値を生む（温故知新）
4. **非開発者にも安全** — 誰でも理解・維持できるシンプルなルール。知識を個人消費せず、チーム全体で活用できる仕組み（成長の複利）

---

## アローリスト vs ブロックリスト：なぜアローリストか

### ブロックリスト（従来の方法 — 脆弱）

```gitignore
# 問題点:
# 1. 想定していない新しいファイル種別が追跡されてしまう
# 2. 新しいバイナリ種別が追加されるたびに更新が必要
*.xlsx
*.pdf
*.png
# ... 終わりのないリスト
```

### アローリスト（このスキルのアプローチ — 頑健）

```gitignore
# デフォルト: 全て無視
*
# ディレクトリの中を覗けるように
!*/
# 追跡したいものだけを明示的に許可
!*.md
!*.py
!*.ps1
# 以上。リストにないものは全て自動的に無視。
```

**重要な洞察**: アローリスト方式では、**新しいファイル種別を誤って追跡することが構造的に不可能**。明示的にオプトインしなければならない。バイナリファイルの種類が予測しにくい業務フォルダでは、この頑健性が特に重要。

---

## Workflow:

### Step 1: フォルダを評価する

> **Values**: 余白の設計 — 構造にコミットする前に、意図を持って評価する。

初期化の前に以下を確認：

| 確認事項 | ガイダンス | アクション |
|---------|-----------|-----------|
| 追跡したいテキスト系ファイルは何か？ | [アローリストのカスタマイズ](#アローリストのカスタマイズ)参照 | アローリストに拡張子を列挙する |
| 機密ファイル（認証情報、PII（個人識別情報）はあるか？ | アローリストから除外するか、`.gitignore`のブロックリストセクションに追加 | ブロックリストセクションに明示的に追加 |
| ネットワーク共有（UNC（Universal Naming Convention）パス）上か？ | [ネットワークドライブ設定](#ネットワークドライブ設定)参照 | 先に`safe.directory`設定を実施 |
| リモート（GitHub等）も必要か？ | このスキルはローカルgitのみ | リモート設定は`git-init-to-github`スキルを使用 |

### Step 2: .gitignoreを作成する

> **Values**: 基礎と型の追求 — `.gitignore`テンプレートは、以降のすべての作業を守るパターン。

フォルダのルートに、以下のテンプレートを使って`.gitignore`を作成する。
ユースケースに合わせてアローリストをカスタマイズする（[カスタマイズ参照](#アローリストのカスタマイズ)）。

### Step 3: Gitを初期化する

> **Values**: 継続は力 — 一度正しく初期化し、一貫して維持する。

```powershell
# フォルダに移動
Set-Location "path\to\your\folder"

# Gitを初期化
git init

# ユーザー情報を設定（グローバル設定がない場合）
git config user.name "氏名"
git config user.email "your@email.local"
```

### Step 4: 初回コミット

> **Values**: 温故知新 — 意図を明確にコミットする。将来のチームメンバーはこれをナレッジ構造の起点として読む。

```powershell
# .gitignoreとナレッジファイルをステージ
git add .gitignore
git add ".github/"   # スキル・エージェントがある場合

# コミット前に何が追跡されるか確認（バイナリが混ざっていないか）
git status
git add --dry-run .  # 追跡されるファイルを確認

# コミット
git commit -m "chore: initialize git with knowledge-artifacts-only tracking

アローリスト方式の.gitignoreにより、Markdown、スクリプト、
設定ファイルのみを追跡。Officeドキュメント、PDF、画像等の
バイナリファイルは意図的に除外。

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
```

### Step 5: 検証する

> **Values**: ニュートラルな視点 — 客観的に、意図したファイルだけが追跡されているか確認する。

```powershell
# 追跡ファイルの確認
git ls-files

# バイナリファイルが追跡されていないことを確認
git check-ignore -v some-document.xlsx   # "ignored"と表示されるはず
```

---

## アローリストテンプレート

このテンプレートをコピーして業務フォルダの `.gitignore` として使用する。

**ディレクトリ指定方式のアローリスト**は、明示的に指定した隠しツール/設定ディレクトリ（`.github/`、`.claude/` 等）配下のファイルのみを追跡する。それ以外のすべて（業務文書、Excelファイル、PDF、画像等）は自動的に無視される。

この設計は意図的なもの：`.` で始まる隠しディレクトリはWindowsエクスプローラーでデフォルト非表示のため、ツール設定のみがバージョン管理下に入る。通常のサブフォルダにある業務ファイルは一切追跡されない。

```gitignore
# ============================================================
# Gitアローリスト: ツール/設定ディレクトリ専用追跡
# 全て無視し、明示的に指定した隠しディレクトリ配下のみを追跡する。
# 追加のツールディレクトリを追跡したい場合は "!.yourdir/**" を追加。
# ============================================================

# デフォルト: 全て無視
*

# ディレクトリの中を覗けるように（アローリストに必須）
!*/

# ── AI / ツール設定ディレクトリ ──────────────────────────
# これらの隠しディレクトリ内のファイルのみを追跡する。
# 業務文書フォルダ（.xlsx/.pdf等）は一切追跡されない。
!.github/**    # GitHub Actions、Skills、Copilot設定
!.claude/**    # Claude / Anthropicエージェント設定
!.codex/**     # OpenAI Codex設定
!.cursor/**    # Cursor IDE設定

# ── ルートレベルの設定ファイル ─────────────────────────────
!.gitignore
!.gitattributes
```

---

## アローリストのカスタマイズ

### 追加のツールディレクトリを追跡する場合

追跡したい隠しディレクトリを1行ずつ追加する：

```gitignore
# テンプレートに追加:
!.vscode/**    # VS Code ワークスペース設定
!.copilot/**   # GitHub Copilot設定
```

### 製造業・品質管理（IATF、ISO等）
```gitignore
# テンプレートをそのまま使用する。
# PDF、Excel、Word文書など業務フォルダ内のファイルは意図的に除外される。
# スキルやナレッジドキュメントは .github/skills/ や .claude/ に配置する。
```

### ソフトウェア開発サポート

```gitignore
# テンプレートに追加:
!*.ts
!*.js
!*.cs        # C#
!*.sql
!*.dockerfile
!Dockerfile
!*.env.example
```

### データ分析・レポート

```gitignore
# テンプレートに追加:
!*.csv       # CSVが小さい場合
!*.ipynb     # Jupyterノートブック（出力セルには注意）
!*.r
!*.sql
```

### テンプレートから項目を削除する場合

例えば`.txt`を追跡したくない場合（一時メモが多い等）：
```gitignore
# !*.txt の行を単純に削除するだけ
# その行がなければ、.txtは自動的に無視される
```

---

## ネットワークドライブ設定

**UNCパス**（`\\server\share\folder`のようなWindowsネットワーク共有）でgitを初期化する場合：

```powershell
# 特定のパスを信頼するよう一度だけ設定：
git config --global --add safe.directory '%(prefix)///server/share/folder'
```

**なぜこれが必要か**: Git 2.35.2以降、ファイルのオーナーシップを検証できないディレクトリ（ネットワークドライブはオーナーシップを記録しない）には明示的な信頼設定が必要。これはセキュリティ上の保護機能であり、一度設定すれば以降は不要。

---

## よくある落とし穴（Common Pitfalls）

| 落とし穴 | 症状 | 対処法 |
|---------|------|--------|
| `.gitignore`を作る前に`git add .`を実行 | バイナリファイルが初回コミットに含まれる。`git rm --cached`でのクリーンアップが必要 | 常に`.gitignore`を最初にコミットし、その後`git add --dry-run .`で確認 |
| アローリストに`!*/`が欠けている | サブディレクトリが走査されず、ルートのファイルのみ追跡される | `!*.ext`より前に`!*/`を単独行で追加して走査を実装 |
| `!*.*`でファイルを許可しようとする | アローリストが完全に無効化され、全ファイルが追跡対象になる | `!*.md`、`!*.py`のように拡張子を明示的に定義する |
| UNCパス上で`safe.directory`を設定しない | 「unsafe repository」エラーでgitの初期化が失敗 | `git init`の前に`git config --global --add safe.directory '%(prefix)///server/share/folder'`を実行 |

- Use `git add --dry-run .`で、意図したファイルだけがステージされるか必ず確認する
- Implement アローリストの`.gitignore`を`git init`の前に作成する
- Create `.gitignore`を最初のコミットファイルとして定義する
- Avoid `git add .`をdry-run確認なしに実行することを避ける
- Consider ネットワークドライブでのgit initの前に`safe.directory`の設定を検討する

---

## アンチパターン（やってはいけないこと）

| ❌ やってはいけない | ✅ 代わりにこうする | なぜ |
|-------------------|-------------------|------|
| ブロックリスト方式を使う | このアローリストテンプレートを使う | ブロックリストには穴がある。新しいバイナリ種別が自動追跡されてしまう |
| 大きなバイナリファイルを追跡する | 除外する。必要なら Git LFS | バイナリはリポジトリを肥大化させ、差分も意味をなさない |
| dry-run確認なしに`git add .`する | `git add --dry-run .`で確認してから | 特に初回コミットで意図しないファイルが混入するリスクを防ぐ |
| コミット後に.gitignoreを追加する | 常に最初に.gitignoreを作成してからgit init | 後から追加すると`git rm --cached`でのクリーンアップが必要 |
| `!*.*`で「全ファイルを許可」する | 各拡張子を明示的にリストする | `!*.*`はアローリストを完全に破壊する |
| パスワードや認証情報をコミットする | `.env`や`secrets.yml`を明示的に除外 | アローリスト方式でも機密ファイルは手動で確認が必要 |

---

## Quick Reference / FAQ

### どのアプローチを使うべきか

| シナリオ | アプローチ | スキル |
|---------|-----------|-------|
| 混在コンテンツを持つ業務フォルダ | アローリスト方式の.gitignore | このスキル |
| 純粋なコードリポジトリ | 言語別標準gitignore | `git-initial-setup` |
| バイナリファイルも追跡が必要 | Git LFS + 標準.gitignore | Git LFS ドキュメント |
| ローカル設定後にGitHubに接続 | リモートリポジトリ設定 | `git-init-to-github` |

---

**Q: `git status`でフォルダ名が表示されるのに、中のファイルは無視されている？**
A: `!*/`でディレクトリ自体は無視対象外になるため、フォルダ名が表示される。これは外観上のもので、`git add --dry-run .`を実行すると許可されたファイル種別だけが実際にステージされることが確認できる。

**Q: 新しいスクリプト種別（例: `.bat`）を追加する必要が出た場合は？**  
A: `.gitignore`のアローリストに`!*.bat`を追加する。これがアローリストの仕組み — 明示的にオプトインする。

**Q: 特定のバイナリファイル一つだけ例外的に追跡したい場合は？**  
A: `!specific-file.pdf`のようにファイル名を直接アローリストに追加する。ワイルドカードと完全一致ファイル名の両方が使える。

**Q: 現在追跡されているファイルを確認するには？**  
A: `git ls-files`で追跡中の全ファイルが確認できる。

**Q: GitHubにも連携したい場合は？**  
A: セットアップ後、`git-init-to-github`スキルを使ってGitHub連携を設定する。

**Q: macOS/LinuxのNFS/SMB共有でも動くか？**  
A: `.gitignore`の内容はOS非依存。`safe.directory`の設定はWindows固有の対応。

