Meta、巨大リポジトリ向けコード管理システム「Sapling」を公開 Git互換クライアントをオープンソース化:数千万のファイル、ブランチ管理に対応、Web UIも
Meta(旧Facebook)は、社内向けのユーザーフレンドリーでスケーラブルなソースコード管理システム「Sapling」のGit互換クライアントをオープンソース化した。
Meta(旧Facebook)は2022年11月15日(米国時間)、社内向けのユーザーフレンドリーでスケーラブルなソースコード管理システム「Sapling」のGit互換クライアントをオープンソース化したと発表した。
Saplingクライアントは、互換性のあるSaplingサーバおよび仮想ファイルシステム(Metaは将来、これらもオープンソース化したい意向)との組み合わせにより、数千万のファイル、数千万のコミット、数千万のブランチを持つMetaの社内リポジトリを管理してきた。
MetaはSaplingシステムを、主に大規模なモノリシックリポジトリ(モノリポ)で使用しているが、SaplingクライアントはGitリポジトリのクローンや操作もサポートしており、開発者はGitHubなどのGitホスティングサービスの操作に利用することもできる。
使いやすさとスケーラビリティを重視したSaplingシステム
Metaは2012年ごろ、急速に大規模化していた社内のモノリポをさらにスケールアップしていくための取り組みとして、Saplingの開発を開始した。当時利用していたソースコード管理システムでは、Metaの大規模リポジトリを扱えず、リポジトリを分割するとモノリポの利点(依存関係管理を簡素化できる、広範な変更を迅速に反映できるなど)が失われることから、Metaはソースコード管理システムのスケールアップを目指した。
Saplingは、オープンソースの分散型バージョン管理システム「Mercurial」の拡張として開発を開始し、新しいストレージフォーマット、ワイヤプロトコル、アルゴリズム、動作といった特徴を持つ独自システムとして成長するに至った。MetaはSaplingのスケーラビリティだけでなく、ソース管理での使い勝手の向上にも力を入れるようになった。
その結果としてSaplingクライアントは、GitやMercurialのユーザーになじみのあるものになっており、リポジトリのクローン、コミット、リベース、コミットのプッシュなど、全てのコマンドがシンプルで使いやすいように設計されている。「各コマンドは1つのタスクを実行」「ローカルブランチの名前は任意」「ステージングエリアがない」と、Metaは説明している。
さらに、MetaはSaplingの使い勝手の良さを、3つの領域を取り上げて紹介している。
リポジトリの全体像が把握しやすい
最も重要なSaplingコマンドの一つとして、スマートログ(sl)がある。Saplingクライアントで「sl」コマンドを引数なしで実行するだけで、「全てのローカルコミット」「現在の場所」「重要なリモートブランチの場所」「どのファイルが変更されたか」「どのコミットが古いか」「どのコミットに新しいバージョンがあるか」などを確認できる。
またスマートログでは、重要でないリモートブランチは表示されず、メインにある何千もの無関係なコミットは、破線の後ろに隠される。そのため、リポジトリのサイズにかかわらず、リポジトリの明確で簡潔な全体像が得られる。
GUI(グラフィカルユーザーインタフェース)に慣れている人のために、スマートログの対話的なWeb UIも提供されている。「sl web」を実行するだけでWebブラウザが起動し、そこからスマートログ、コミット、修正、チェックアウトなどを表示できる。
ミスの修正が簡単
「sl undo」「sl redo」「sl uncommit」「sl unamend」のようなコマンドを使えば、多くの操作を簡単に元に戻せる。「sl hide」「sl unhide」のようなコマンドは、コミットを簡単かつ安全に隠したり、再表示したりできる。
コミットスタックの処理が容易
Saplingは明確なコマンドとワークフローを提供し、スタック内のコミットの編集、並べ替え、理解を容易にする。
スタック内のコミットを編集したい場合、「sl goto COMMIT」でコミットをチェックアウトし、変更を加え、「sl amend」で修正すれば済む。Saplingがスタックの先頭を、新しく修正されたコミットに自動的に移動(リベース)するので、直ちにコンフリクトを解決できる。直ちにコンフリクトを修正しない場合は、そのコミットで作業を続け、後で「sl restack」を実行して、スタックを再び元に戻せる。
Saplingでは、スタックをナビゲートするコマンド(sl next、sl prev、sl goto top/bottom)や、スタックを調整するコマンド(sl fold、sl split)も提供される。また、作業コピーから未コミットの変更をスタック内の適切なコミットに自動的に取り込めるコマンド(sl absorb、sl amend -to COMMIT)も利用できる。
今後の計画
Metaは将来的に、Saplingと互換性のある仮想ファイルシステムのオープンソース化も目指している。この仮想ファイルシステムにより、任意の大きさの作業コピーを扱い、変更したファイルの数にかかわらず、チェックアウトを高速化できるようになるとしている。
さらに、Saplingと互換性のあるサーバも、オープンソース化を目指している。このサーバが提供するスケーラブルで分散型のソース管理サービスは、MetaでSaplingの運用に使われている(近いうちにGitリポジトリの運用にも使われる)。このサーバは、多くの新しいソース管理体験を可能にするという。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- GitHubがクラウドホスト型開発環境「Codespaces」を月60時間まで無料提供、できることは?
GitHubは、「GitHub Free」および「GitHub Pro」プランの全ユーザー向けにクラウドホスト型開発環境「GitHub Codespaces」の一般提供を開始すると発表した。 - 「Git 2.38」で追加、巨大リポジトリ向けの管理コマンド「Scalar」は何ができる?
GitHubは公式ブログで、Gitの最新版「Git 2.38」の主要な新機能として、新しいリポジトリ管理ツール「Scalar」と、「git rebase」コマンドの新しい「--update-refs」オプションを取り上げて紹介した。 - Pythonを超えて熱烈に支持される開発言語は? 人気フレームワークは? 2万6000人の回答を徹底分析
SlashDataは開発者動向レポートの最新版「State of the Developer Nation 23rd Edition」を公開した。ブロックチェーン開発、学生のキャリア目標、プログラミング言語コミュニティー、ベンダーが所有するオープンソースプロジェクトへの開発者の貢献、ゲーム開発者の所属スタジオ、Webフレームワークの盛衰といった6つのテーマに沿って調査結果をまとめている。