開発ツール / Git
Git解説
Sparse-checkout(スパース・チェックアウト)は、巨大なモノレポの「どこ」を小さくするのか
ファイルが減っても、履歴まで小さくなったとは限りません。Sparse-checkout(スパース・チェックアウト)、partial clone(パーシャル・クローン)、sparse index(スパース・インデックス)、git worktree(ギット・ワークツリー)が受け持つ範囲を分けると、巨大なリポジトリで何を軽くできるのかが見えてきます。
確認日 2026年7月17日
Git 2.55.0公式文書を確認
読了目安 18分
編集: pluginpluginplugin.com
巨大なモノレポから、apps/webと共有パッケージだけを作業ディレクトリへ出しました。エディタの検索対象は減り、ディレクトリも見通しやすくなります。ところが、.gitの容量はほとんど変わりません。
設定を間違えたのでしょうか。そうではありません。Sparse-checkoutが減らすのは、Gitが持つ履歴ではなく、いま作業ツリーへ展開する追跡済みファイルだからです。
この区別が曖昧なままだと、クローン時の転送量、git statusの負荷、並行ブランチの衝突までSparse-checkoutへ期待してしまいます。それぞれを受け持つのは、partial clone、sparse index、git worktreeという別の仕組みです。
30秒でわかる結論
Sparse-checkoutは、作業ツリー(Working tree)へ置く追跡済みファイルの範囲を絞ります。既存の履歴やGitオブジェクトは削りません。
クローン時の転送量を抑えるのはpartial clone、インデックスの負荷を減らすのはsparse index、並行作業を分けるのはgit worktreeです。
大きなモノレポで、1タスクが触る領域を限定できるときに効果を見込めます。小さなリポジトリや全体変更には不要です。
範囲を変える前に、変更中ファイルとignoredファイルを確認します。Sparse-checkoutは秘密情報を隠す仕組みではありません。
まず概要だけを知りたい場合 3分で読める「ざっくり版」から、用途と最初の一歩を確認できます。
ざっくり版を読む
目次
なぜ .git は小さくならないのか
四つの機能が変える場所
Cone modeでは何が見えるのか
AI並行開発で中心になる仕組み
効果が出るリポジトリの条件
既存リポジトリで安全に試す
新規クローンとpartial clone
Sparse indexを追加する判断
AI用worktreeへ適用する
見えない場所で起きる問題
GitHub Actionsで使う条件
使わない方がよいケース
.gitが残る意味
公式資料
Sparse-checkoutが減らすのは作業ツリーへ展開する追跡済みファイルであり、既に取得した履歴やGitオブジェクトではありません。Gitを使う開発者、レビュー担当者、リポジトリ運用者は、コマンド名だけで判断せず、作業ツリー、ステージ、ローカル履歴、リモートのどこを変えるかを分けてください。最初に行うのは、git status --shortとgit status --short --ignoredで変更中ファイルとignoredファイルを確認することです。本記事は2026年8月6日にGit 2.55.0の公式マニュアルを確認しています。
30秒要約
Sparse-checkoutは作業ツリーを絞る。.gitの履歴や既取得オブジェクトは小さくしない。
初期転送量を減らすのはpartial clone、インデックス負荷を減らすのはsparse index、並行作業を分けるのはworktree。
Cone modeでは指定ディレクトリだけでなく、リポジトリ直下と祖先ディレクトリ直下のファイルも残る。
範囲変更時にignoredファイルが削除される場合がある。ローカルDBや.envは先に退避する。
Sparse-checkoutは秘密情報を隠す境界ではない。対象外でも履歴から参照できる。
前提と状態確認
Gitの操作対象は、少なくとも次の四層に分けます。
層 何があるか 主な確認 作業ツリー エディタで編集中のファイル、未追跡ファイル git status --short、git diffステージ 次のコミットへ入れる候補 git diff --cachedローカル履歴 現在のブランチ、HEAD、過去コミット git branch --show-current、git log --oneline --decorate -n 10リモート 追跡参照、fetch先、push先 git remote -v、git branch -vv
git --version
git status --short
git branch --show-current
git branch -vv
git remote -v
git log --oneline --decorate -n 10
共有先の最新状態を比較したい場合は、作業ツリーへ統合するpullより先にgit fetch --pruneを使います。fetchは通常、現在の作業ツリーを変更せず、リモート追跡参照を更新します。
何が小さくなり、何が残るのか
Gitのリポジトリには、コミット・tree・blobを保存するオブジェクトデータベース、次のコミット候補を管理するインデックス、エディタやビルドが読む作業ツリーがあります。Sparse-checkoutの中心は作業ツリーです。選択外の追跡済みファイルを通常表示しない状態にし、巨大なモノレポでエディタ検索、ファイル監視、普段のビルド対象を絞ります。
困りごと 主に使う仕組み 変わる場所 変わらないもの 作業フォルダのファイルが多い Sparse-checkout 作業ツリー 既取得の履歴・オブジェクト クローン時の転送量が大きい Partial clone 最初に取得するオブジェクト 必要時の追加取得 statusやaddが重いSparse index インデックス表現 選択範囲そのもの 複数ブランチを同時に開きたい Worktree 作業場所、HEAD、インデックス 共有オブジェクトと多くのrefs 過去の巨大バイナリが重い Git LFS・履歴移行 blobの保存方法・履歴 作業範囲だけでは解決しない
Cone modeではディレクトリ単位で指定します。たとえばapps/webを選んでも、ルートのREADME.mdやpackage.json、祖先であるapps/直下のファイルが残る場合があります。これは不具合ではありません。
Sparse index・partial clone・worktreeとの境界
Sparse indexは対象外ディレクトリのインデックス項目をtree単位にまとめる最適化です。作業ツリーをさらに狭める機能ではありません。まずSparse-checkoutだけでIDE、GUI、ビルド、テストを確認し、その後に検証します。
Partial cloneの--filter=blob:noneは、未使用blobの初期取得を抑えます。必要になったオブジェクトは後からpromisor remoteへ取得されるため、オフライン利用、認証、追加通信、リモート側対応を確認します。
Worktreeは別ブランチの作業場所とインデックスを分けます。一つのタスク、一つのブランチ、一つのworktree、一つのSparse範囲へ揃えると変更が混ざりにくくなります。ただしworktreeもSparse-checkoutも権限分離ではありません。秘密情報は別リポジトリ、シークレット管理、隔離した実行環境で扱います。
判断表
状況 選ぶ操作 期待結果 影響・戻し方 作業ツリーだけを小さくしたい git sparse-checkout set ...選択範囲中心の作業ツリー 範囲を変更するかdisableで戻す 初期転送量も減らしたい git clone --filter=blob:none --sparse必要blobを後から取得 追加通信とオフライン制約を確認 複数ブランチを同時に開きたい git worktree add作業場所を分離 clean確認後にworktree remove 秘密情報を隠したい Sparse-checkoutを使わない 権限・実行環境で分離 秘密をリポジトリ外へ移す
安全な手順
既存リポジトリで最小範囲を試す
前提: 変更中ファイルをコミットまたは退避し、ignoredファイルをリポジトリ外へバックアップ済み
git status --short
git status --short --ignored
git sparse-checkout set apps/web packages/ui packages/contracts
git sparse-checkout list
git status --short
期待結果: 指定した範囲とCone modeで必要な祖先ファイルが残り、変更が意図せず消えていない。
影響: 作業ツリーの表示範囲を更新する。履歴は削除しないが、対象外のignoredファイルが削除される場合がある。
戻し方: 必要範囲をaddまたはsetし直す。通常状態へ戻す前に空き容量を確認し、git sparse-checkout disableを使う。
新規クローンで転送量も抑える
前提: リモートがpartial cloneをサポートし、追加通信を許容できる
git clone --filter=blob:none --sparse <REPOSITORY_URL> product
cd product
git sparse-checkout set apps/web packages/ui
期待結果: 作業ツリーは選択範囲中心になり、未使用blobの初期転送を抑えられる。
影響: 必要なblobは後から取得される。オフライン時に未取得内容を参照できない場合がある。
戻し方: 完全なオブジェクトが必要なら通常cloneを別に作るか、必要オブジェクトを取得してからオフライン化する。
Sparse indexを後から試す
前提: Sparse-checkoutだけで日常操作を検証済み
git sparse-checkout reapply --sparse-index
git status --short
# 問題時
git sparse-checkout reapply --no-sparse-index
期待結果: 選択範囲を維持したままインデックス表現を切り替えられる。
影響: 一部ツールとの互換性や性能が変わる可能性がある。
戻し方: --no-sparse-indexで通常インデックスへ戻す。
具体例
Webアプリだけを担当する
apps/webだけでなく共有UI、型定義、ルート設定を含めます。全パッケージ探索を前提とするビルドは、対象外ディレクトリがなくても正しく動くか確認します。
AIエージェントを複数動かす
先にworktreeで作業場所を分け、その後に各worktreeでSparse範囲を設定します。同じブランチを複数worktreeへ強制checkoutせず、タスクごとに専用ブランチを作ります。
失敗時の復旧
通常checkoutへ戻したい
git status --shortを確認し、十分な空き容量を用意してからgit sparse-checkout disableを実行します。全追跡済みファイルが再展開されます。
ignoredファイルが消えた
Git履歴には入っていないためGitだけで必ず復元できません。作業を止め、バックアップ、開発DBダンプ、OSスナップショットを確認します。
競合後に範囲外ファイルが残る
mergeまたはrebaseを完了・中止してからgit sparse-checkout reapplyを実行します。競合中に強制削除しません。
チーム運用上の注意
操作前後のブランチ名、対象コミット、実行コマンド、結果、担当者をPull Requestや作業記録へ残します。
共有済み履歴を変える操作は、個人のローカル整理と同じ基準で実行しません。保護ブランチ、レビュー、CI、リリース規則を優先します。
コマンド例のorigin、main、パスは例です。実際の追跡先はgit branch -vvとgit remote -vで確認します。
認証情報、トークン、秘密鍵、個人情報をコマンド、URL、コミットメッセージ、ログ例へ含めません。
破壊的操作を自動化する場合は、dry-run、対象限定、バックアップ、承認、停止条件、復元テストを先に設計します。
チームで範囲一覧を共有する場合はgit sparse-checkout set --stdinで適用できるファイルを管理します。
全体テスト、ライセンス検査、コード生成などリポジトリ全体を読む処理には通常checkoutを残します。
更新履歴
2026-08-06: Git 2.55.0の公式マニュアルを確認し、Sparse-checkout(スパース・チェックアウト)は、巨大なモノレポの「どこ」を小さくするのかの状態確認、安全手順、復旧条件を整理しました。
参考リンク
コミット、ツリー、blobを保存する。リポジトリの履歴とファイル内容が残る。
partial clone
Index(インデックス)
次のコミットへ入れる内容と、作業ツリーとの対応を管理する。
sparse index
Working tree(作業ツリー)
エディタ、検索、ファイル監視、ビルドが直接触るファイルを置く。
sparse-checkout
作業場所
ブランチごとの作業ツリーとインデックスを分け、同時に開けるようにする。
git worktree
同じ「軽くする」という説明でも、四つの機能は異なる場所に作用します。
対象外のファイルはコミットから消えません。git switchやgit commit -aもSparse-checkoutを考慮するため、作業ツリーにないファイルを一斉削除として扱いません。
定義と動作は、Git 2.55.0のgit-sparse-checkout公式マニュアル で確認できます。公式文書は、このコマンド全体を現在もexperimental(実験的)としています。
Sparse-checkoutは倉庫を空にする機能ではありません。巨大な本棚から、いま読む本だけを机へ出す機能です。
そのため、作業ツリーが見通しやすくなっても、過去に取得したblobが.gitへ残るのは想定どおりです。容量の問題を解きたいなら、どの場所が膨らんでいるのかを先に分ける必要があります。
Cone mode(コーンモード)では何が見えるのか
Sparse-checkoutは、既定のCone modeではディレクトリ単位で範囲を指定します。個別ファイルを複雑なパターンで選ぶNon-cone modeも残っていますが、公式文書は非推奨としています。
モノレポ全体
product/
├── README.md
├── package.json
├── apps/
│ ├── package.json
│ ├── web/
│ ├── mobile/
│ └── desktop/
├── services/
│ ├── api/
│ └── billing/
└── packages/
├── ui/
└── contracts/
apps/webを選んだ後
product/
├── README.md
├── package.json
└── apps/
├── package.json
└── web/
指定していないREADME.mdやpackage.jsonが残っても、不具合ではありません。Cone modeはリポジトリ直下のファイルと、指定ディレクトリへ至る祖先ディレクトリの直下にあるファイルを含めます。
この規則があるため、ルートの設定ファイルやapps/package.jsonを保ったまま、apps/mobile以下を作業ツリーから外せます。ディレクトリを一つ指定したら、そのパス以外がすべて消えるわけではありません。
対象ディレクトリを設定する
git sparse-checkout set apps/web packages/ui packages/contracts
この範囲変更はignoredファイルを削除する場合があります。変更中ファイルとignoredファイルを確認し、必要なローカルデータを退避してから実行します。
対象を増やすときはgit sparse-checkout addを使います。対象を減らす専用のremoveはないため、残したいディレクトリの完全な一覧をsetし直します。
マージやrebaseの競合処理で対象外ファイルが現れた場合は、競合を解消してからgit sparse-checkout reapplyを実行します。通常のcheckoutへ戻すときはgit sparse-checkout disableですが、すべての追跡済みファイルを再展開できる空き容量を先に確認します。
古い解説にあるgit sparse-checkout init --coneは、現在の標準手順ではありません。Git 2.55.0の公式マニュアルではinitは非推奨で、将来削除される可能性があると説明されています。
AI並行開発で中心になるのはworktree
一つのモノレポでWeb画面、API、E2Eテストを同時に進めると、ファイル数より先に作業場所が衝突します。同じ作業ツリーで片方がブランチを切り替えれば、もう片方の未コミット変更も影響を受けます。
Sparse-checkoutは、各タスクに見せるファイルを絞れます。しかし、同じ作業ツリーを複数タスクが共有する問題までは解きません。並行作業を物理的に分ける中心はgit worktreeです。
三つの並行タスクへ割り当てるブランチ、作業ツリー、Sparse範囲の例
タスク
ブランチ
作業ツリー
表示する主な範囲
Web画面
ai/frontend
product-ai-frontend
apps/web、packages/ui、packages/contracts
API
ai/backend
product-ai-backend
services/api、packages/contracts
E2E
ai/e2e
product-ai-e2e
tests/e2e、apps/web、services/api
運用単位を一つのタスク、一つのブランチ、一つの作業ツリー、一つのSparse範囲にそろえると、変更が混ざる場所を特定しやすくなります。ただし、これは権限分離ではありません。
worktreeは作業ツリー、HEAD、インデックス、Sparse設定を分けますが、Gitオブジェクトや多くの参照情報(refs)を共有します。対象外の内容もgit showで参照でき、Sparse設定自体も変更できます。AIエージェントから秘密情報を隠す用途には、別のリポジトリ権限と隔離した実行環境が必要です。
git-worktree公式マニュアル は、同じリポジトリへ複数の作業ツリーを接続する仕組みと、checkout前にSparse設定を行う--no-checkoutを説明しています。
効果が出るリポジトリの条件
Sparse-checkoutの価値は、リポジトリの大きさだけでは決まりません。大きな一つのリポジトリに半独立の領域があり、一つのタスクが触る範囲を限定できるときに候補になります。
Web、モバイル、API、インフラストラクチャが同居し、共有する型定義やUIパッケージだけを横断するモノレポは典型例です。リポジトリを分割せず、タスクの作業ツリーだけを小さくできます。
一方、フロントエンドとバックエンドが既に別リポジトリで、どちらも十分小さいなら、管理するSparse範囲一覧が増えるだけかもしれません。全体検索や大規模なリファクタリングを頻繁に行うチームも、通常のcheckoutの方が単純です。
もう一つの境界はビルドです。全package.jsonを探索するスクリプト、全サービスから生成物を作る処理、全ソースを読むライセンス検査は、対象外ファイルがないと正しく動かない場合があります。導入前に、ビルドとIDEが必要とする範囲を確認します。
既存リポジトリで安全に試す
最初に確認するのは、Sparse-checkoutの設定ではありません。いま作業ツリーにしか存在しないデータです。
ignoredファイルは範囲変更で消える場合があります
Cone modeで対象外になったディレクトリにignoredファイルしか残っていない場合、Gitはそのディレクトリを削除することがあります。.env、SQLiteデータベース、ローカルのアップロードデータ、開発用証明書を別の場所へ退避してから進めます。
Gitの版、変更中ファイル、ignoredファイルを順に確認します。チーム、CI、AI実行環境でGitの版が異なる場合は、その差も記録します。
事前確認
コピー
git --version
git status --short
git status --short --ignored
変更をコミットするか退避し、ignoredデータをバックアップしたら、最初はsparse indexを付けずに範囲を設定します。作業ツリーを絞る機能と、インデックスを圧縮する実験的な最適化を同時に入れないためです。
最小構成で開始
コピー
git sparse-checkout set apps/web packages/ui packages/contracts
git sparse-checkout list
git status --short
listの出力と、必要な設定ファイルが残っていることを確かめます。ビルド、テスト、IDE、Git GUIも普段の操作で確認します。足りないディレクトリはaddで増やし、範囲を狭めるときは新しい完全な一覧をsetします。
対象の追加と再適用
コピー
git sparse-checkout add services/mock-api
git sparse-checkout reapply
対象外に残ったファイルを調べる場合、Git 2.52で追加されたcleanのdry-runを使えます。次のコマンドは削除せず、対象ディレクトリと内部のファイルを表示します。
削除候補だけを確認
コピー
git sparse-checkout clean --dry-run --verbose
実際の削除には強制オプションが必要ですが、記事の共通手順にはしません。表示されたパスを一件ずつ確認し、バックアップと変更状態を再確認してから、公式マニュアルの説明に沿って個別に判断します。
Sparse-checkout公式マニュアル はignoredファイルの削除条件とcleanの挙動を説明しています。追加時期はGit 2.52.0リリースノート で確認できます。
Sparse-checkoutをやめるときはgit sparse-checkout disableを使います。すべての追跡済みファイルが作業ツリーへ戻るため、巨大リポジトリでは空き容量と展開時間を先に見積もります。
新規クローンではpartial cloneを組み合わせる
まだリポジトリを取得していないなら、作業ツリーだけでなく初期転送量も絞れます。git clone --sparseは最初にリポジトリ直下のファイルだけを展開し、--filter=blob:noneはファイル内容であるblobを必要になるまで取得しません。
新規クローンの例
コピー
git clone --filter=blob:none --sparse <REPOSITORY_URL> product
cd product
git sparse-checkout set apps/web packages/ui packages/contracts
二つのオプションは同じ効果を重ねているのではありません。--sparseは作業ツリーの初期状態を決め、--filter=blob:noneはリモートから受け取るオブジェクトを絞ります。
Partial cloneはblobを永久に省く仕組みではありません。checkoutや履歴表示で未取得オブジェクトが必要になると、Gitはpromisor remoteへ接続して取得します。作業を続けるほど.gitの容量は増え得ます。
したがって、オフラインで全履歴を参照する必要がある環境には慎重に適用します。リモート側の対応、追加通信、認証、回線遅延も運用条件に入ります。
オプションの定義はgit-clone公式マニュアル 、後からオブジェクトを取得する仕組みと制約はPartial clone設計文書 で確認できます。
Sparse indexは動作確認の後に追加する
作業ツリーのファイルを減らしても、通常のインデックスにはリポジトリ全体のファイルエントリが残ることがあります。大きなモノレポでは、git statusやgit addがインデックス全体を扱う負荷も無視できません。
Sparse indexは、対象外ディレクトリのファイルエントリをtree単位へまとめます。作業ツリーをさらに減らす機能ではなく、インデックスの表現をSparse範囲へ近づける機能です。
通常のindex
services/billing/a.go
services/billing/b.go
services/billing/internal/c.go
Sparse index
services/billing/
Git 2.55.0ではSparse indexは既定で無効で、公式上もexperimental(実験的)です。古いGit、IDE、Git GUI、独自ツールがSparseディレクトリエントリを理解できない場合があります。
まずSparse-checkoutだけで日常操作を確認し、その後に有効化します。問題があれば作業ツリーの範囲を維持したまま通常インデックスへ戻せます。
Sparse indexを有効にする
コピー
git sparse-checkout reapply --sparse-index
通常インデックスへ戻す
コピー
git sparse-checkout reapply --no-sparse-index
速度はリポジトリ構造、選択範囲、実行するコマンドによって変わります。一部のコマンドが遅くなる可能性も公式文書に記載されているため、特定環境のベンチマークを一般化せず、実際の操作を計測します。
AI用worktreeへSparse範囲を適用する
Git worktreeの--no-checkoutは、コミットを展開する前にSparse-checkoutなどの設定を行うためのオプションです。既存の作業場所を使い回さず、AIタスク用のブランチとディレクトリを新しく作ります。
新しいAI用worktreeの例
git fetch origin
git worktree add --no-checkout -b ai/frontend ../product-ai-frontend origin/main
git -C ../product-ai-frontend sparse-checkout set apps/web packages/ui packages/contracts
git -C ../product-ai-frontend status --short
git worktree list
この例はブランチ名、基準ブランチ、作成先パスが空いていることを確認してから実行します。既存パスや既にcheckout中のブランチを強制的に上書きする手順ではありません。
既存の変更を強制的に破棄してHEADへ合わせる操作は、通常手順に含めていません。set自体が必要な設定とWorking treeの更新を行うためです。
作業完了後は変更をコミットし、Pull Requestやマージの状態を確認してからgit worktree removeで削除します。未コミットの変更があるworktreeは通常の削除をGitが拒否するため、その安全装置を強制的に迂回しない運用にします。
チームで範囲を共有するなら、改行区切りのディレクトリ一覧をリポジトリへ置き、git sparse-checkout set --stdinで適用できます。共有パッケージを加え忘れたときはプロファイルを直し、各自の手入力だけで差を抱えないようにします。
見えない場所で起きる問題
Working treeから見えなくなったことは、削除されたことも、保護されたことも意味しません。この違いを忘れると、範囲を絞った後の事故を説明できなくなります。
Ignoredファイルは「Git管理外だから残る」とは限らない
Cone modeで範囲を変えると、対象外ディレクトリの中身をGitが調べます。ignoredではない未追跡ファイルがあれば削除せず警告しますが、ignoredファイルしか残っていなければディレクトリごと削除され得ます。
.gitignoreはバックアップ機能ではありません。ローカルDB、秘密情報、アップロードデータをリポジトリ外へ退避してからsetを変更します。
Mergeとrebaseでは対象外ファイルが現れる
競合を表示するため、GitがSparse範囲外のファイルを一時的に展開する場合があります。競合を解消し、変更をコミットまたは退避してからgit sparse-checkout reapplyで現在の範囲を再適用します。
git add --sparseを通常操作にしない
通常のgit addはSparse範囲外のインデックスエントリを更新しないよう警告します。--sparseでその制限を越えられますが、対象外ファイルは後で作業ツリーから消える可能性があります。
範囲外を編集する必要が生じたら、先にgit sparse-checkout addで対象へ含める方が作業状態を追いやすくなります。オプションの意図はgit-add公式マニュアル で確認できます。
サブモジュールは別に状態を持つ
Sparse範囲を変えても、既にcheckoutしたサブモジュールが自動で片付くわけではありません。強制的なdeinitはサブモジュール内の変更や未追跡ファイルを失う可能性があるため、共通レシピには含めず、対象サブモジュールの状態を個別に確認します。
ビルドは存在しないディレクトリを待っているかもしれない
全ワークスペースを走査するビルド、全スキーマからコードを作る生成処理、全ソースを読むライセンス検査は、Sparse範囲だけでは完結しない場合があります。コマンドが成功したことだけでなく、必要な入力とテストが省かれていないことを確かめます。
Worktreeを増やすとGit管理外の容量は増える
worktreeが共有するのはGitオブジェクトです。node_modules、dist、.next、coverage、仮想環境、ローカルDBはworktreeごとに作られます。
ディスク使用量の中心が依存パッケージやビルド成果物なら、パッケージマネージャーの共有ストアとビルドキャッシュを組み合わせます。Sparse-checkoutで解決する対象へ無理に含めません。
秘密情報を見せない境界にはならない
対象外のファイルはgit showなどで参照でき、Sparse設定も変更できます。秘密情報はリポジトリへ置かず、シークレット管理、リポジトリ権限、サンドボックス、実行環境の分離で制御します。
GitHub Actionsでは限定されたジョブに絞る
actions/checkout@v7は、改行区切りのsparse-checkout入力を持ち、Cone modeを既定で有効にします。特定アプリだけをテストするジョブなら、checkout範囲をジョブの入力へ合わせられます。
部分テスト用のワークフロー例
コピー
steps:
- uses: actions/checkout@v7
with:
sparse-checkout: |
apps/web
packages/ui
packages/contracts
sparse-checkout-cone-mode: true
- run: npm ci
- run: npm test
ただし、filter入力を指定すると、actions/checkoutではその設定がsparse-checkoutを上書きします。二つの入力を書けば自動的にpartial cloneとSparse-checkoutが合成される、という設定ではありません。
リリースビルド、リポジトリ全体のlint、ライセンス検査、セキュリティ検査、コード生成の整合性確認、全体E2Eでは完全checkoutを残す判断があります。CIが速くなっても、必要な検査まで見えなくなれば成功ではありません。
現在の入力と例はactions/checkout公式リポジトリ で確認できます。2026年7月17日時点の最新リリースはv7.0.0 です。
Sparse-checkoutを使わない方がよいケース
導入判断は、使えるかどうかだけでは決まりません。設定と範囲一覧を保守する負担が、減らせる作業量より大きいなら、通常のcheckoutを保つ方が安全です。
状況ごとの判断と代わりに検討する方法
状況
判断
理由または代替
リポジトリが小さい
通常は使わない
範囲管理の手間に対して減らせるファイルが少ない。
フロントエンドとバックエンドが既に別リポジトリ
通常は使わない
作業範囲が既に分かれ、横断変更も少ないなら効果が小さい。
毎回リポジトリ全体を変更する
使わないか一時解除
全体検索、移行、大規模リファクタリングでは完全checkoutが分かりやすい。
ビルドが全ファイルを必要とする
使わない
入力不足を速度改善と取り違えない。ジョブやキャッシュを見直す。
IDEやGit GUIがSparse index非対応
Sparse indexだけ外す
Sparse-checkoutを維持し、通常indexへ戻せる。
過去の巨大バイナリが問題
別の問題
Git LFSや履歴移行を検討する。
秘密情報を隠したい
使用不可
権限、シークレット管理、隔離した実行環境で制御する。
オフラインで全履歴が必要
Partial cloneを避ける
未取得オブジェクトの追加取得に接続が必要になる。
使わない判断は、Sparse-checkoutの失敗ではありません。解くべき問題が作業ツリー以外にあると分かった結果です。
.gitが残る意味
冒頭でファイル数を減らした後、.gitがほとんど小さくならなかったのは、設定ミスではありませんでした。Sparse-checkoutが狙った作業ツリーだけを変えた結果です。
エディタが読むファイル、検索範囲、ファイル監視の対象を減らしたいなら、その変化には意味があります。クローン時の転送量も抑えたいならpartial cloneを加え、インデックスの処理が重いなら互換性を確認してsparse indexを試し、並行ブランチが衝突するならworktreeを分けます。
巨大なリポジトリを無理に分割する前に、困っている場所を一つ選びます。作業ツリーが問題なら、Sparse-checkoutはリポジトリ全体を保ったまま、いまのタスクに必要な範囲だけを机へ出せます。