WindowsでSaplingを試す

## 概要
MetaがGit互換のソース管理クライアントをオープンソース化したみたいです。
折角なので試してみようかと思います。


## 導入


### 1. 最新リリースを入手する
GitHubのリポジトリから最新リリースを落としてきます。
https://github.com/facebook/sapling

Windowsの場合はzipファイルです。解凍して適当なディレクトリに置きます。
公式ドキュメントでは`C:\Program Files`に配置していますね。

Saplingの全機能を使うためにはさらに以下が必要みたいです
- Git for Windows (Gitリポジトリを扱う場合)
- Node.js (v10以降、`sl web`コマンドを使うために必要)

### 2. Pathを通す
`sl`コマンドを使うために環境変数にPathを通しておきます。
PowerShellの`Set-Location`と競合するようなので、PowerShellで使うときはエイリアスを変更する必要があるようです。

```powershell:公式サイトから引用
PS> Set-Alias -Name sl -Value 'C:\Program Files\Sapling\sl.exe' -Force -Option Constant,ReadOnly,AllScope
PS> sl --version
Sapling 20221108.091155.887dee39
```

### 3. 設定
初回のみ以下のコマンドで設定ファイルを作る必要があります。
```sh
sl config --user
```
以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248663/148cdba3-5957-3ee0-10d4-f43707636c11.png)

丁寧に説明文や設定例が記載されているので、それに従って設定します。

### 4. GitHubと認証する
公式曰く、GitHub CLIを使うのが推奨とのこと。

以下のコマンドで認証できます。
```sh
gh auth login --git-protocol https
```
GitHub Enterprise Serverとも認証できるので企業でも使いやすいですね。

## 利用

### 1. クローン
試しにsaplingのリポジトリをクローンします
```sh: 公式から引用
$ sl clone https://github.com/facebook/sapling
$ cd sapling
$ sl
@  e11a98084  21 minutes ago  evangrayk  remote/main
│  Make code font not red by default
~
```
ディレクトリの中で、引数なしで`sl`コマンドを実行するとコミットグラフが表示されるようです。
上記の場合`Make code font not red by default`は直近のコミットのタイトルです。

Gitの場合はリポジトリのフォルダ内に`.git`というフォルダが作られますが、Saplingの場合は`.sl`フォルダが作られるんですね。


### 2. コミット

適当にファイルを作ってコミットしてみます
```sh
$ echo 'Hello, World!' > hello.txt
$ sl add .
$ sl commit -m "コミット"
$ sl
  @  2xxxxxxxf  2 minutes ago  xxxxxxxx
╭─╯  コミット
│
o  exxxxxxx4  61 minutes ago  remote/main
│
~
```

コミットグラフが表示されますが、見た感じ自動的にブランチが分岐しているようです。

### 3. GUI操作
以下のコマンドを打つとコミットグラフがブラウザで表示されます
```sh
$ sl web
```
以下の雰囲気
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248663/1c1a485a-5455-4172-7052-e16954fb558a.png)
簡易GUIが付いていると気軽に使えますね

### 4. プルリクエストの作成
このリポジトリでは実験できませんが、
プライベートな自分の実験用リポジトリで試せます。
```
$ sl pr
```
を打ち込むとプルリクを作成します。
この時、プルリクは`pr1`というブランチが自動で作られていました。

ブランチを切らなくても自動で別ブランチとしてスタックを作ってプルリクを出してくれるようです。

### 5. ReviewStackの利用
Metaの内部で利用されるコードレビューツールに触発され、GitHubのUIを意識した、GitHub用プルリクレビューツールのようです。

SaaSみたいで、運営自体はMetaが行っているようです。
なので、利用時にアクセス許可を求められます。認証情報等はブラウザのローカルに保存されるそうですが、企業では使いづらいかもしれません。

とりあえず、使いかたは簡単で、プルリクのアドレスを編集するだけです。
```sh
# 何か適当なリポジトリのプルリクをブラウザで開くと、以下のアドレスだと思います。
https://github.com/user/repo/pull/1
# このアドレスの github.com を reviewstack.dev に置き換えます
https://reviewstack.dev/user/repo/pull/1
```

ブラウザで上記アドレスへアクセスするとアクセス許可を求められ、
許可すると、プルリクのレビュー画面が表示されます。

画面イメージは公式リファレンスを見るのが早いですね( https://sapling-scm.com/docs/addons/reviewstack/ )
シンプルです。しかし、大体これで事足りる気がします。

## VSCcode拡張機能について

VSCode用の拡張機能が存在します。
[Visual Studio Code Marketplace | Sapling SCM](https://marketplace.visualstudio.com/items?itemName=meta.sapling-scm)

試しに入れてみました。`Ctrl + Shift + P`でコマンドパレットを表示して利用するようです。
以下の感じのインターフェースです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248663/4d7a4aee-2762-a5ea-8ba5-58db0327da62.png)

しかし、私の環境がイマイチなのかこれらはエラーが出て動いてくれませんでした。

## まとめ

今回試しにSaplingを使ってみましたが、最も一般的なワークフローを少ないコマンドで実施している印象を受けました。

GitはVSCodeで強力にサポートされていたり、その他Gitクライアントも多数存在しているため、まだまだGitの方が都合が良い場面が多いかもしれませんが、プルリクを出す機能があったりして面白かったです。

開発状況は気にかけていこうと思います。