Sapling
CLIコマンド名はsl。Metaが開発・社内利用しているソース管理システム。使いやすさとスケーラビリティを重視して設計されている。CLIはもともとMercurialをベースにしており、UIや機能の多くをMercurialから継承している。
背景
Metaのmonorepoをエンジニアリング組織の成長に耐えられるようスケールさせるための取り組みとして10年ほど前に開始され、その後Git互換の独自VCSとして育てられてきた。クライアント部分は2022年にOSS公開された。
主な特徴
- スタック型コミット(stacked commits) — コミットを積み上げていくワークフローが基本。途中のコミットを
amendすると、その上に積まれた子コミット群を自動的にrestack(追従)してくれる。 - Smartlog / Interactive Smartlog (ISL) — リポジトリ内のコミットをツリー表示するコマンド・Web UI。PRやブックマークの情報も併記され、ドラッグ&ドロップでrebaseできるなどブラウザベースの操作が可能。
- Git/Mercurialユーザーにとって基本概念はなじみやすく、コミットスタックの操作や誤操作からの復旧が大幅に簡単になっているとされる。
- Meta社内では専用サーバーと仮想ファイルシステムを組み合わせ、数千万規模のファイル・コミット・ブランチを持つリポジトリまでスケールする設計だが、その高度な機能を支えるサーバー側は現時点では一般公開されていない。
現状
外部での採用はMetaの外ではあまり広がっていない、という指摘がある。クライアント自体はOSSだが、スケーラビリティを支える高度な機能の多くが非公開の専用サーバーに依存しているため、社外の開発者にとっての実用性は限定的という評価がある。
Gitに代わる分散バージョン管理システムの中での位置づけ
Gitのデータモデルをそのまま使いつつUI/UXだけを作り直す「Git互換レイヤー系」の一つ。スタック型ワークフロー・履歴書き換えの容易さを志向する点でJujutsuと目的意識が近いが、SaplingはMercurial由来のCLI・ワークフローを直接引き継いでいる点が異なる。diffビューアのhunkもGit/Jujutsu/Saplingの3つに対応しており、Sapling環境では自動検出してネイティブのrevsetを使う機能を持つ。