ユーザプロファイルを別ドライブにつくる

# 実現したいこと、ゴール
ドライブが複数ついているWindows環境において、ユーザプロファイル（C:/Users/xxx)をOSインストール先とは別のドライブにつくること。

# 前提
- OS: Windows 10

# 背景
Cドライブに小容量のSSD、Dドライブに大容量のHDDをマウントしています。
せっかく二種類のディスクがついているので下記のように使い分けたい。

- システムやアプリケーション ⇒ Cドライブ（SSD）
- ドキュメントや写真データ、ゲームのセーブファイルなど ⇒ Dドライブ（HDD）

ユーザプロファイルは「マイドキュメント」や「マイピクチャ」を含むためHDDに作成したい。しかし、なにも考えずにOSをインストールするとOSインストール先と同じCドライブ（SSD）にプロファイルが作成されてしまいます。

## 小手先で試した方法（失敗）
移行先のDドライブ（HDD）に、`D:/Users/xxx/Desktop`や`D:/Users/xxx/Documents`といったようにそれぞれ対応するフォルダを作成したうえで、既存のCドライブ（SSD）のユーザプロファイルの「デスクトップ」や「ドキュメント」のプロパティから参照先を移行先フォルダに向けてあげました。参照先を切り替えたのち、各フォルダの中身ももちろん移動します。

通常は上記のやり方で問題なく、デスクトップに置いたファイルやブラウザでダウンロードしたファイルはちゃんとDドライブ（HDD）に格納されます。

しかし、環境変数（`USERPROFILE`）やレジストリに刻まれているユーザプロファイルパスは上記操作では変更されず、Cドライブ（SSD）のまま変わりません。ソフトウェアによっては環境変数やレジストリを参照する場合があり、実際のフォルダ構成と不整合があると正しく動作しません。（例をあげるとWindows向けOpenSSH）
環境変数は簡単に変更できますが、レジストリ修正はリスク[^1]があります。

例にあげたOpenSSHの場合は`C:/Users/xxx/.ssh`にジャンクションをしかけて対応する手もありますが、ちょっとダサい……。

小手先で対応するのはあまりウマくないので、腹をくくってMicrosoftさま推奨の方法で対応しましょう。

# ちゃんとした方法（成功）
**OSのリセット（再インストール）が必要です**
当然ですが、OSインストール先ドライブのデータはすべて消えるので必要なデータは退避させておきましょう。

## 事前準備（応答ファイルの作成）
お好みのテキストエディタで、Dドライブ（HDD）直下にXMLファイルを作成します。

```xml:D&#58;&#47;relocate.xml
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
  <settings pass="oobeSystem">
    <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <FolderLocations>
        <ProfilesDirectory>D:\Users</ProfilesDirectory>
      </FolderLocations>
    </component>
  </settings>
</unattend>
```

環境ごとに変更する箇所は、

- 32bit版Windowsの場合は&lt;component&gt;タグの<code>processorArchitecture</code>は<code>x86</code>にする
- &lt;ProfilesDirectory&gt;の中身（ここで指定したパスにユーザプロファイルがつくられます）

の二点です。

## OSのリセット
本題ではないのでサラッと。。。

「設定」->「更新とセキュリティ」->「回復」->「このPCを初期状態に戻す」の「開始」をクリックします。
そのあとのオプションは適当に選んでOSのリセットをかけてください。

リセットが済んでセットアップが開始し、下記のような言語選択画面が出るまで待ちます。
![am1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556115/46dc59cb-b62a-ba4b-8897-b63a26d184f9.png)

## Audit Modeの起動
言語選択画面で<code>Ctrl+Shift+F3</code>を押すとAudit ModeでOSが起動します。 
SysprepのGUIがあがってきますが、今回は使わないので閉じていいです。

## Sysprepの実行
コマンドプロンプトを立ち上げて、下記コマンドでSysprepを実行します。
<code>unattend</code>オプションに指定するファイルパスは先の手順で作成した応答ファイルのパスを指定します。

```bat
%windir%\system32\sysprep\sysprep.exe /generalize /oobe /reboot /unattend:d:\relocate.xml
```

コマンドを実行するとOSが再起動して、再びセットアップ画面が表示されるので、指示に従って進めてください。

## 結果
セットアップが完了してOSが起動したらさっそくユーザプロファイルのパスを確認します。
![2020-01-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556115/301f10d4-9d40-6265-c959-ee824f0fd1d8.png)
無事に指定したパスにつくられました！

環境変数（`USERPROFILE`）をECHOしても、レジストリエディタで`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList`を確認しても、指定したパスがユーザプロファイル作成先に指定されていることがわかります。

# まとめ
とはいえ、OSのクリーンインストールはそのあとの作業も含めてめんどくさいものです。かっこわるいけど[小手先で試した方法（失敗）](#小手先で試した方法失敗)で紹介した方法でしばらく凌いで、PC不調時など別の理由でOSクリーンインストールするきっかけができたときに実施するのがいいかもしれません。

[^1]: [Microsoftのサポート](https://support.microsoft.com/ja-jp/help/973289/customize-the-default-local-user-profile-when-preparing-an-image-of-wi)