【TortoiseSVN】送るメニューに「Copy URL to clipboard」を追加する

# 概要

TortoiseSVNはファイルパスがURLで管理されていますが、このURLをWindowsのエクスプローラー上から取得する方法を紹介します。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/f2d61ee6-5dce-5cfa-90fa-fdfe81a2daef.png")>

URLの取得はTortoiseSVN標準の右クリックメニューにもあるのですが、こちらは**URLエンコードされた形式**でコピーされます。

TortoiseSVN標準の右クリックメニュー
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/676b4f34-8a94-f0d6-4a19-7670bc4b9c67.png">

**TortoiseSVN の右クリックメニューにある「Copy URL to clipboard」を利用した場合**
[file:///E:/data/Documents/TortoiseSVN/trunk/%E6%96%B0%E3%81%97%E3%81%84%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88.txt](file:///E:/data/Documents/TortoiseSVN/trunk/%E6%96%B0%E3%81%97%E3%81%84%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88.txt)


これだと使いづらいので、PowerShellスクリプトを利用して新しく「Copy SVN URL to clipboard」を作成して**URLデコードされた形式**でコピーします。

**本記事で紹介する「Copy URL to clipboard」を利用した場合**
[file:///E:/data/Documents/TortoiseSVN/trunk/新しいテキスト ドキュメント.txt](file:///E:/data/Documents/TortoiseSVN/trunk/%E6%96%B0%E3%81%97%E3%81%84%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88.txt)

# 実施環境

* Windows10 64bit
* TortoiseSVN 1.14.29673

# 事前準備

## TortoiseSVNのCLIが利用できることを確認

コマンドプロンプトでもPowerShellでも良いので、下記のコマンドを実行します。
 ```確認コマンド
svn --version
 ```
下記のようにバージョン情報が取得できればOK。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/967552ed-e661-35d6-5b03-24b98346daeb.png">

## TortoiseSVNのCLIが利用できない場合
上記手順でバージョン情報が取得できない場合は先にCLIをインストールする必要があるため、TortoiseSVNをインストールした際に利用したインストーラを利用します。

* TortoiseSVN-1.14.6.29673-x64-svn-1.14.3.msi
※バージョンは各自のものでOK

#### ①TortoiseSVNのCLIインストール
下記の手順でCLIをインストールします。
<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/c9e90138-32b4-4b86-d4a9-bcbbdf9833e5.png">

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/513aa1d8-cdc5-29c4-c95d-2092a738ac6c.png">

下記がCLIのパッケージとなるため、他のパッケージはインストールしなくても大丈夫です。
<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/b20de64e-9833-4b75-0a7c-23ac862928d3.png">

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/7eb83ee3-350c-ca67-42fd-12086d5018a4.png">

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/cf1e4385-76d0-08f3-7c36-b91af70d6afc.png">

#### ②CLIのパスを通す
[Windows]+[PAUSE BREAK]でシステム画面を開く

<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/7a14f5f8-4e70-324a-53ca-9f965297087d.png">

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/197b7ea4-6f78-ff16-73fd-9aa80a571756.png">

環境変数には**ユーザー環境変数**と**システム環境変数**がありますが、どちらに追加しても大丈夫です。
<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/896e1fd2-c914-0412-0ed5-018dfb9bbdc6.png">

追加するパスは下記とは限らず、各自でTortoiseSVNをインストールしたパスとなるため注意。
<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/7571d542-a5ee-5bff-672c-e15dcffe6e8b.png">

**参考値**
*C:\Program Files\TortoiseSVN\bin*

コマンドプロンプトやPowerShell等を開き、確認コマンドを実行。
 ```確認コマンド
svn --version
 ```

:::note warn
CLIをインストールする以前にコマンドラインツールを開いていた場合、一度クローズしてから起動する必要があります。
:::
事前準備は以上で完了です。

# 実装手順

手順は大まかに次のとおりです。

**1\. PowerShellスクリプト（copyUrl2Clipboard.ps1）の作成**
**2\. 作成したPowerShellスクリプトのショートカットを作成**
**3\. 作成したショートカットをSendToディレクトリに配置**

順に説明していきます。

## 1\. PowerShellスクリプト（copyUrl2Clipboard.ps1）の作成

下記のコードをコピーしてPowerShellスクリプトを作成します。
```copyUrl2Clipboard.ps1
Add-Type -AssemblyName System.Web
$OutputEncoding = [Console]::OutputEncoding

$url = svn info --show-item url $Args[0]
[System.Web.HttpUtility]::UrlDecode("$url",[Text.Encoding]::GetEncoding("utf-8")) | clip
```

## 2\. 作成したPowerShellスクリプトのショートカットを作成

作成したショートカットの名称が後の右クリックメニューの名称になります。
本記事では「Copy URL to clipboard」とします。
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/2eedd161-8bcc-6e8c-4e4f-de137db8c7b5.png">

作成したショートカットのプロパティを開き、リンク先の先頭に下記を追記します。

```
powershell -ExecutionPolicy RemoteSigned -File {"元のパスをダブルクォーテーションで囲う"}
```

<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/ad2746a4-4e55-1363-cfe2-e62c5b3b6318.png">

## 3\. 作成したショートカットをSendToディレクトリに配置

ファイルを指定して実行（[Windows]+[R]）にて、「shell:sendto」と入力してOKを押下。

<img width=450 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/9c1c75fd-8b27-c4b9-01a8-0d346fe02f69.png">

SendToディレクトリに作成したショートカットを配置する。
<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/828fc1a8-27f1-212b-3423-86914dd8a873.png">

以上で実装は完了です。

# 使い方

エクスプローラを再起動すると右クリックの送るメニューに「Copy URL to clipboard」が表示されます。

<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626788/5207c362-f950-c0bd-d136-a1f172674ebc.png">

TortoiseSVNのチェックアウトしたファイルに対してこのメニューを押下すると、PowerShellのターミナル画面が開き、クローズされるとURLがコピーされます。

コピーには数秒かかり、ターミナルを非表示で実行するように制御するといつコピーされたかわからなくなるため、あえて表示するようにしています。