今更感はあるが、UiPathのワークフローをSVNで構成管理する

# はじめに
とある支援先のプロジェクトにて、SVNを使いたいとの要望を受けたので、UiPath StudioにおけるSVNの仕様を確認してみました。
（令和になって、SVNですか！って思う人も少ないと思います。実際、私も長らくGitしか使っておらず、SVNを使ったのは10年以上前だったと思います。）
とんでもなく今更感のある情報で記事にしても役に立つ人が限られていると思いましたが、もったいないので記事にします。

# 使うもの
* UiPath Studio 2021.10.4
* Subversion　※今回はVisualSVN 5.0.1を使用します

# StudioでSVNを使用できるようにする
デフォルトではGit機能しかオンになっていない模様。SVN機能がオフになっている場合は機能を有効化します。
![Studio設定1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/da459a69-b150-4ed9-82f3-bc188f30b5a2.png)

プロキシサーバを経由してSVNリポジトリにアクセスする場合は、以下のファイルを修正します。
`C:\Users\[username]\AppData\Roaming\Subversion\servers` ※デフォルト
![proxy設定1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/5c625ae8-b187-b074-07d1-bbc573e95018.png)

# 空のリポジトリに新規プロジェクトをコミットする
まずは、空のリポジトリにプロジェクトをコミットしていきます。
Studioにてプロジェクトを開いて、Studio右下の「ソース管理に追加」から「SVNに追加」を選択します。
![SVN追加4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/37183d8d-e033-4fff-94fe-9cf2f8194048.png)

リポジトリのURLと資格情報を入力して、追加ボタンを押します。
※今回は空のリポジトリ「repo」を用意しています。
![SVN追加1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/5989ef6d-900a-a4ac-ec26-5ce564304d0a.png)

SVNサーバに自己証明書を使用していて、「信頼されたルート証明機関」ストアにインポートしていない場合は、以下のメッセージが出ますが、「はい」を押して次に進んでください。
![自己証明書1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/939be277-b8a2-d452-e419-ea68149dac46.png)

次にコミットする資源を選択する画面が表示されるので、対象の選択とコミットログを入力して、チェックインボタンを押します（この操作はgitと同じですね）。
![SVN追加2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/7f6f4d04-33d0-a74d-f391-72146d7569ba.png)

リポジトリにプロジェクトがコミットされました。
![SVN追加3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/68c98a28-1482-cc1d-4fc7-f2d10d96dd20.png)

# チェックアウト
SVNで構成管理されたプロジェクトを変更するには、チェックアウトする必要があります。
チェックアウトせず.xamlを開いたり、アクティビティパッケージを変更しようとすると、メッセージが表示されます。
![チェックアウト1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/76005415-4eb1-4288-fe03-313b5510cbc0.png)

チェックアウトするには、対象のファイルまたはフォルダを右クリックし、「編集用にチェックアウト」を選択します。
チェックアウトされた資源は「鍵」のアイコンがグレーから青に変わります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/f26e7109-6f9c-ecdc-c3e2-a5ad13f61d83.png" width="50%" alt="チェックアウト2.png">

チェックアウトされた資源は、他のユーザから見るとロックされています。
![チェックアウト3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/b4cdc572-7d31-7683-378e-e0a3fb2c15a3.png)

強制的にロックを横取りすることもできるのですが、奪われたユーザのローカルの作業が失われるので、運用上避けた方がよいです。
![ロックエラー1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/b7e5227d-562e-4e08-542c-cbca636f8166.png)

# チェックイン（コミット）
ワークフローの修正が終わったらチェックインしてリポジトリに変更内容をコミットします。プロジェクトを右クリックして「チェックイン」を選択するか、Studio右下の「ペン」のアイコンをクリックします。
![チェックイン1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/ab8faf93-d1ae-8211-6659-32b9ca772ff6.png)

コミットする資材を選択できます。コミットログ（コミットメッセージ）を入れ、チェックインボタンを押します。
![チェックイン2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/9564ff27-30ee-55b0-74b7-59569b432ad1.png)
「変更を表示」をクリックすると、リポジトリとローカルの差分を確認することができます。
![差分1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/e1531983-2189-c7d9-acf0-6a2daa42c389.png)

リポジトリに変更内容がコミットされたことが確認できました。
![チェックイン3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/940750a8-7942-0abf-f7c0-6214edbf9a3a.png)

誰かがロックを奪いリポジトリを更新するなどして変更内容に競合が発生すると、コミットのエラーとなります。
![チェックイン4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/bf708e98-3a2b-e06a-8964-4e550e97396f.png)

# さいごに
久しぶりSVNに触れましたが、「ローカルに資材を落として、ロックをして、修正したらリモートにアップする」だけなので、シンプルさが改めて分かりました。
UiPathの場合、1つのプロジェクトを複数人で同時に開発するケースがほとんどない（経験上）と思うので、SVNでもいいとは思いますが、私はこれからもGitを使い続けると思います。

役に立った方がいらっしゃれば、是非LGTMをお願いします。