Windows 10版のiTunesとiCloudが上手く動かない→別ドライブに移動していたのが原因だった、という話

要約

一般向けに言えば、「ググって見つかる裏ワザは時に動かなくなるから、時々見直した方がいい」
詳しい人に言えば、「シンボリック リンクでフォルダーを指定するのは稀に非対応のアプリがあるので、ジャンクションで指定したほうがいい」

何があったの?

Microsoft Store版のiTunesが起動しない(従来のインストーラー版については正常に起動する)。
また、iCloud for Windowsにログインしようとしても、ログインが完了する瞬間にクラッシュ(静かに閉じるが、イベントログにログが残っている)し、またログインを求められる。

何が原因だったの?

かつて旧バージョンで設定ファイルやバックアップが存在した場所に「シンボリック リンク」を張り別ドライブに移動していた結果、ストアアプリ版のiTunes/iCloudが移行処置としてストアアプリの枠組み内に存在するはずの場所から設定ファイルをコピーするはずが、ファイルを読みだせず、不正な状態になっていたのが原因だった。
現在のバージョンは設定ファイルとバックアップの場所が分離しているので、設定ファイルがあるフォルダーは元通りにし、バックアップの場所は「シンボリック リンク」から「ジャンクション」に形式を変えることで正常に動くようになった。

つまりどういうこと?

過去のiTunesはバックアップする際にユーザーの設定ファイルが置かれたフォルダーと同じ場所(%AppData%\Apple\MobileSync\Backup)にバックアップを保存するため、そのままだと小容量のドライブの容量を食いつぶすという問題が発生していた。
そのため、OS標準機能の「シンボリック リンク」を使い、機能を保持したままバックアップの保存場所を別ドライブに向ける、という裏技的な運用がネットを検索すると出てくるし、自分もそうしていた。

しかし、ストアアプリ(Microsoft Storeから入手できる形式のアプリ)はそのセキュリティ機構が足かせとなり、「シンボリック リンク」だと実際のフォルダーがある場所に辿り着けず、結果的に必要なデータをセキュリティ機構の中に移すことに失敗し、エラーを起こしてしまう。
ストアアプリはアンインストール時などに可能な限りPCに残るものを少なくする目的もあり、アプリが各自それぞれで設定フォルダーを持っているが(%LocalAppData%\Packages\[任意のパッケージ名]で確認できる)、その中に設定ファイルを移す過程で問題が発生していた。

シンボリック リンクを貼らざるを得ないそもそもの元凶であるバックアップデータについては、気が付けばユーザーフォルダー直下の「Apple」フォルダー(%USERPROFILE%\Apple\MobileSync\Backup)に入るように仕様が変わっていた。恐らく前述のストアアプリ版のセキュリティ機構との兼ね合いだろう。もう一つ理由が考えられるが、それは後述する。
そのため、%AppData%にあったシンボリックリンクを削除し、%LocalAppData%\Packages\AppleInc~\LocalCache\内に別ドライブに存在したそれぞれの設定ファイルを移動し、iTunesの起動/iCloudへのログインができるようになった。
しかしそれでもまだiOSデバイスのバックアップが行えなかったのでログを確認したところ、ファイルを読みだせない旨のエラー。そこで%USERPROFILE%\Appleフォルダーを調べたところシンボリック リンクになっていたことを確認。一度削除してジャンクションとして張り直して完全解決した。

なんでバックアップのフォルダーと設定フォルダーが分かれたの?

%LocalAppData%\Packages\AppleInc~\LocalCache\と先ほど書いた通り、あくまで設定ファイルは一時的なファイル(キャッシュ)として判断されている。
どうしてそうしているかというと、ストアアプリ版は問題が発生した際に「リセット」がしやすい構造となっており、その際に設定ファイル等を一度初期化せねばならないからだと思われる。

が、それでバックアップまで消されてしまっては意味がない。そのため、リセットされたとしても残らないといけないバックアップについては、影響が及ばないユーザーフォルダの直下に保存するようになったと思われる。
実際今回の解決策までたどり着くために何度かiTunesとiCloudのアプリを「リセット」したが、バックアップには何ら影響がなかった。

蛇足かつ僕の個人的な考えだが、この仕様は正しいように思う。
そもそもストアアプリの構造が何故こんなややこしいことになったかというと、アンインストール時にレジストリーやファイルを残したままというケースもあり、その後新たなトラブルに発展するケースも見かける。
そのため、「アプリをアンインストールしてもあまり環境が汚れたままにならない」というこの挙動は、場合によっては容量を無駄に消費するというデメリットがあったとしても、正直そちらのほうが管理がしやすい。

どうやって調べたの?

仮想マシンにインストールしてフォルダーがどうなるか眺めたり、残っていたログファイルを調べたりしました……色々試して10時間かかった……orz

この記事と同様の記事をもっと読みたいと思った人は是非サポートをお願いします。責任のあるモチベーションになります。