米Metaは、Git互換のソースコード管理クライアント「Sapling」をオープンソース化したことを、11月15日に発表した。
Saplingは、同社で使用されている、使いやすさとスケーラビリティを重視したソースコード管理システム。将来的にオープンソース化を予定している、Sapling互換サーバと仮想ファイルシステムと組み合わせることで、非常に多くのファイルやコミット、ブランチを持つMetaの内部リポジトリに対応できるようになる。
Metaではおもに、大規模なモノリシックリポジトリにてSaplingが使用されているが、SaplingクライアントはGitリポジトリのクローン作成や対話的な操作にも対応しているので、GitHubやその他のGitホスティングサービスとの連携も可能になっている。
Saplingのコマンドは、シンプルで使いやすいよう設計されており、ローカルブランチ名はオプションで、ステージングエリアは存在しない。
smartlog(sl)は、Saplingにおける重要なコマンドの1つであり、ユーザーエクスペリエンス全体の中心的な要素といえる。Saplingクライアントにて「sl」を引数なしで実行するだけで、すべてのローカルコミット、現在の場所、重要なリモートブランチの場所、変更されたファイル、古いコミットと新しいバージョンのコミットを確認できる。重要でないリモートブランチは表示されず、メインにおける数多くの無関係なコミットは隠されるため、リポジトリのサイズに関係なく必要な内容だけがシンプルに得られる。
なお、インタラクティブなsmartlog Web UIも用意されており、「sl web」を実行するだけでWebブラウザが起動され、スマートログ、コミット、修正、チェックアウトなどの表示が可能となる。ほかにも、sl undo、sl redo、sl uncommit、sl unamendといったさまざまな操作を元に戻せるコマンドも用意されている。
スタック内のコミットを編集する場合は、そのコミットを「sl goto COMMIT」でチェックアウトして、変更を加えて「sl amend」で修正すればよく、スタックの一番上を新しく修正されたコミットに自動的に移動またはリベースするため、競合をすぐに解決できる。競合を直ちに修正しない場合は、そのコミットの作業を続行し、後で「sl restack」を実行すればスタックを再び元に戻せる。
そのほか、スタックをナビゲートするコマンド(sl next、sl prev、sl goto top/bottom)や、スタックを調整するコマンド(sl fold、sl split)、作業コピーから未コミットの変更を適切なコミットに自動的に取り込むコマンド(sl absorb、sl amend –to COMMIT)なども用意されている。
将来的には、Sapling互換の仮想ファイルシステムをオープンソース化することで、任意のサイズの作業コピーを操作して、ファイルがいくつ変更された場合でもチェックアウトの高速化を可能にする。
さらに、Saplingと互換性のあるサーバのオープンソース化も検討している。同サーバは、SaplingとGitリポジトリを提供するためにMetaで使用しているスケーラブルで分散型のソース管理Rustサービスで、多数の新しいソース管理エクスペリエンスを実現し、モノリシックリポジトリに(またはモノリシックリポジトリから)リポジトリを段階的に移行できるので、モノリシックリポジトリにコミットする前にモノリシックリポジトリを試せる。また、組織内のすべてのコミットが作成されると直ちにアップロードされるCommit Cloudも有効になり、同僚にコミットハッシュを送信して「sl goto HASH」を実行してもらうだけでコードの共有が可能になる。
- 関連リンク
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です