OneDriveのフォルダをWSLからアクセスできるネットワークドライブにコピーする

Tips

はじめに

AIチャットを作成する Dify では、ドキュメントをナレッジとして登録できます。ナレッジの API を使用すると、HTTP リクエストでドキュメントの追加や更新が可能になります。 筆者は普段のドキュメント管理に OneDrive を使用していますが、メインの開発環境である WSL からそのままアクセスしてファイルのナレッジ登録などを行う場合、処理が遅くなる場合があります。 そのため、WSL に Samba で共有フォルダを作成し、robocopy を使って OneDrive のフォルダを定期的にコピーする方法を試してみました。 本記事では、その手順をまとめます。

WSL に Samba をインストールする

WSL の Ubuntu に Samba をインストールし、共有フォルダを作成します。

sudo apt update
sudo apt install samba
sudo mkdir -p /srv/share
sudo chmod 777 /srv/share

NOTE: 共有フォルダのパーミッションを 777 に設定するのはセキュリティ上のリスクがあります。実際の運用では、適切なユーザーとグループを作成し、必要な権限のみを付与してください。

Samba の設定をする

Samba の設定ファイルを編集して、共有フォルダの定義を追加します。

sudo vim /etc/samba/smb.conf

ファイルの末尾に以下の内容を追加します。

[share]
path = /srv/share
browseable = yes
writable = yes
guest ok = yes
read only = no

設定を反映するために Samba を再起動します。

sudo systemctl restart smbd

接続に使用する Samba ユーザーを追加します。

sudo smbpasswd -a <ユーザー名>

Windows からネットワークドライブをマウントする

エクスプローラーを開き、「ネットワーク」から「ネットワークドライブの割り当て」をクリックします。 ドライブ文字を選択し(ここでは N:)、フォルダ欄に \\<WSLのIPアドレス>\share を入力して「完了」をクリックします。

Note: WSL の IP アドレスは WSL のターミナルで ip addr を実行して確認できます。

robocopy で OneDrive フォルダをコピーする

PowerShell から robocopy コマンドを使用して、OneDrive の任意のフォルダをネットワークドライブに同期します。

robocopy "C:\Users\<ユーザー名>\OneDrive\Share" "N:\" /MIR

/MIR オプションを指定することで、コピー元と同じ状態にミラーリングされます。

タスクスケジューラーで定期実行する

定期的に同期する場合は、タスクスケジューラーで robocopy を実行するタスクを作成します。 その際、ネットワークドライブのマウントも含めて bat ファイルにまとめておくと便利です。

@echo off
set SHARE_USER=<ユーザー名>
set SHARE_PASS=<パスワード>
net use N: \\<WSLのIPアドレス>\share /user:%SHARE_USER% %SHARE_PASS%
robocopy "C:\Users\<ユーザー名>\OneDrive\Share" "N:\" /MIR

注意: パスワードをスクリプトに平文で記述するのはセキュリティ上のリスクがあります。実際の運用では安全な方法で認証情報を管理してください。

まとめ

WSL に Samba をインストールして共有フォルダを作成し、Windows の robocopy で OneDrive フォルダを同期する方法を紹介しました。 この構成にすることで、WSL 環境から OneDrive 上のドキュメントにファイルシステム経由でアクセスできるようになります。 OneDrive 以外の Windows のフォルダも同様の方法でアクセスできるため、WSL と Windows 間のファイル共有に便利な方法だと思います。

コメント

タイトルとURLをコピーしました