OneDriveで任意のフォルダーを共有する方法

OneDrive
 OneDriveで共有できるのは、「C:\Users\ユーザー名\OneDrive」フォルダーに固定されているため、保存場所が決まっているソフトのデータは手動でOneDriveのフォルダーにコピーしたり戻さなければなりません。せっかく便利なクラウドストレージなのに手動でコピーするなら従来のメールでデータ交換するのと同じになってしまいます。

 そこで何か方法が無いか探した所、Windowsのジャンクションと言うリンク機能を使用すると任意のフォルダをOneDriveで共有できる事を確認しました。


ジャンクションとは

 ショートカットと同じようにフォルダーやドライブにリンクする機能です。(直接ファイルにはリンクできない)

 ショートカットと違うのは、エクスプローラでショートカットを開くとアドレスバーにはフォルダー本体の場所が表示されますが、ジャンクションではジャンクションを設置した場所のアドレスが表示され、1つのフォルダーに対して本体のアドレスの他に臨時のアドレスでアクセスできるようになります。

 主な使用用途はシステムドライブ(Cドライブ)の容量が少ない時など、別ドライブをシステムドライブのフォルダーのように使用する事ができます。

 ジャンクションの欠点として特殊なリンク方法なので、一部の行儀の悪いソフト(OSの標準APIを使わないような)でジャンクション側からアクセスすると正しく動作しない事があるようです。(本体側からなら問題ない)


ジャンクションの作成方法

 ジャンクションの作成は、「mklink」の「Jオプション」を使います。
mklink 使い方

 例えば、「v:\資料」のフォルダーを、デスクトップ上の「参考資料」フォルダーで使用する場合は、「mklink /j “C:\Users\ユーザー名\Desktop\参考資料” “v:\資料”」と入力します。

成功すれば「ジャンクションが作成されましと」と表示され。失敗する場合はリンク先のフォルダーが既に存在しているか、入力ミスやアクセス権限の問題でリンク先にフォルダーが作成できない状況です。


OneDriveにジャンクションを設定する前に

 方法が2種類があり、「ファイル本体をOneDrive側に置き作業フォルダー側をジャンクションにする方法」と逆に「ファイル本体は作業フォルダー側に置きOneDrive側をジャンクションにする方法」です。

 簡単で不具合が少ないのは前者のファイル本体をOneDrive側に置く方法です。しかし作業フォルダー側がジャンクションだと一部のプログラムが動作しないため、その時は後者のOneDrive側をジャンクションにする方法しかありませんが、設定が複雑でOneDriveの同期に不具合があります。

 一度前者で行いプログラムが動作しないなど不具合がある場合に後者で設定するのが良いです。


ファイル本体をOneDrive側に置く設定

 注意:問題発生時に復旧できるようシステム・データのバックアップを行ってください。

 説明上、現在オリジナルファイルがあるPCを「メインPC」、オリジナルファイルと同期したい端末を「サブPC」と呼びます。サブPCは複数台あってもOKです。運用がはじまればメインPC・サブPCの違いはありません(クラウド側がメインとなる)。また説明の中のフォルダに「ユーザー名」とあるご自身の環境に合わせて変更して下さい。

  InternetEexplore(以下IE)のお気に入り(C:\Users\ユーザー名\Favorites)をOneDriveとジャンクションを使ってメインPCと複数のサブPCと同期する場合を例として説明します。

 (1)メインPCのOneDriveに適当なフォルダーを作成します。例えば個人フォルダーに「リンク共有」フォルダーを作成したとします。

 (2)メインPCのIEのお気に入りフォルダーの中身を、(1)で作成したフォルダーに全てコピーします。

 (3)メインPCのお気に入りフォルダーを削除します。(フォルダーがあるとジャンクションが作成できないため)

 (4)メインPCのジャンクション作成。
 スタートを右クリックし「コマンドプロンプト」を起動し、本体があるOneDriveの個人/リンク共有(C:\Users\ユーザー名\OneDrive\個人\リンク共有)から、先ほど削除したIEのお気に入りフォルダーにジャンクションを作成するため、コマンドプロンプトに次のコマンドを入力しエンター
 「mklink /j “C:\Users\ユーザー名\Favorites” “C:\Users\ユーザー名\OneDrive\個人\リンク共有”」
 ジャンクションを作成されましたと表示されれば次へ。
OneDrive ジャンクション

 (5)サブPCの設定、 OneDriveに「リンク共有」フォルダーが作成され同期が完了したら、上記の(3)-(4)のメインPCをサブPCと読みかえて、すべてのサブPCで設定を行ってください。

 (6)設定が完了すればメインPC・サブPCすべてのお気に入りが常に同期されます。


ジャンクションをOneDrive側に置く方法

 注意:問題発生時に復旧できるようシステム・データのバックアップを行ってください。

 ジャンクションに対応してないプログラムを使用する場合はファイル本体は作業フォルダーに置き、ジャンクションをOneDrive側に置く方法を使用するしかありませんが、下記のような問題点があります。
 ・初回設定時にPCはネットから切断する必要がある。
 ・初回の同期手順を間違えるとファイルが消える可能性がある。(バックアップ必須)
 ・普通にファイルを作成・更新・削除してもクラウド側に同期(アップロード)されない、同期させるにはOneDrive上のジャンクションでは無い通常ファイルを「削除」すると同期される。(ファイルを変更した側のみ必要な操作で、同期を受ける側はこの操作は不要)
 ・これ以外にも確認できて無い問題もあるかも。

 前項と同じく、IEのお気に入りをOneDriveで共有させる例ですが、前項と違いOneDrive側がジャンクションとなっています。

 (a)全てのサブPCのお気に入りは空にして下さい。

 (b)サブPC(1台目)にジャンクションを作成。
 スタートを右クリックし「コマンドプロンプト」を起動、IEのお気に入りフォルダーからOneDriveの個人\リンク共有(C:\Users\ユーザー名\OneDrive\個人\リンク共有)にジャンクションを作成するため、コマンドプロンプトに次のコマンドを入力しエンター(注意:前項の(4)とフォルダー指定の順番が違うので間違えないように)
 「mklink /j “C:\Users\ユーザー名\OneDrive\個人\リンク共有” ”C:\Users\ユーザー名\Favorites”」
 ジャンクションを作成されましたと表示されれば次へ。

 (c)サブPC(2台目)の設定。1台しかサブPCが無い場合は(f)へ。
 サブPC(2台目)のネットを切断(オフライン)にします。
 OneDriveを確認し(b)で作成した「リンク共有」フォルダーが同期されていたらOneDriveで作成されとフォルダーはジャンクションでは無く普通のフォルダーなので「削除」します。(ネットを切断せずこの削除を行うと・・・、削除の操作が同期され、(b)で作成したジャンクションが消えてしまい、やり直しになるので注意)

 (d)サブPC(2台目)のジャンクション作成は(b)と同じ方法で行います。終わったらネットに再接続します。

 (e)サブPCが3台以上ある場合は(c)~(d)を繰り返してください。

 (f)メインPCの同期するデータをバックアップします。(初回同期時にクラウドの状態によってファイルが消えたり書き換えられる可能性があります)

 (g)メインPCでも(c)~(d)を行います。

 (h)※ジャンクションを設定したフォルダーでファイルを作成・更新・削除してもOneDriveが更新状況をチェックできないようでいつまでたってもファイルがクラウド側に同期(アップロード)されません。同期するためにはOneDriveフォルダーの中でジャンクションでは無い場所に適当なファイルを作成し「削除」するとファイル同期されます。以降「手動同期」と書きます。
 同期を受ける側(ファイルを操作をしてない側)は特に問題なく自動で同期されるようです。

 (i)メインPCの手動同期をします。
 適当に「個人」フォルダ内に「新しいテキスト ドキュメント」など適当なファイルを作成して「削除」するだけ。

 (j)メインPCとサブPCのお気に入りを確認して同期していれば完了。
 もしメインPCのお気に入りの中身が消えているようなら(f)でバックアップを書き戻し手動同期して下さい。

 (k)※※ジャンクションのファイルは手動同期となるので同期忘れが発生しやすいです。試していませんがタスクスケジューラなどで定期的にファイルを作成→削除するようにすれば自動同期っぽくなると思います。しかし頻繁に行うと無駄な通信が発生するため通信量に制限のあるモバイルネットワークではおすすめできません。またグループポリシーエディタを使えばシャットダウン時にバッチ処理が行えるので何かプログラムを実行できるかも。


ジャンクションを戻す方法
・ジャンクション側のフォルダーを削除するだけ。本体側のフォルダーは何も起こりません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA