はじめに
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 間のファイル共有に便利な方法だと思います。


コメント