今日は閑話です。
試しにライフハック的な記事を書いてみます。
Dropbox や OneDrive や Google DriveFileStream ・ iCloud などストレージサービスを使っているとフォルダーの階層が深くなってしまい、コマンドプロンプトや PowerShell で扱い難くなってしまいます。
Microsoft Office などGUI(Graphical User Interface)アプリだけしか使用しない人はあまり気にならないかも知れませんが、CLI(Command Line Interface) のツールを使用していると、階層の深いフォルダーは大変使いにくいものです。
Linux に代表される UNIX 文化圏では、基本操作のほとんどがCLIなのでディレクトリ(フォルダーのこと)名が短く省略された名前になっていて、階層も浅くなっています。
例えば、
/home/username
/bin
/usr/local
/etc
などのようにです。
Windows は元々、MS-DOS時代のCLIから脱却して完全なGUIを目指していた時期が長く、CLIでは使い難いフォルダー構成となっています。
今は PowerShell や WSL などCLIへ回帰しているため、深いフォルダー構成は操作性のボトルネックとも言えるでしょう。
例えば、
C:\Users\username\Documents
C:\Users\username\SourceRepos
C:\Program Files\PowerShell7
C:\Windows\System32
など。
ストレージサービスは通常、「C:\Users\username」の下に専用のフォルダーを作り、その中にストレージサービスに保存するファイルを配置します。
ストレージサービス専用フォルダーの外にあるファイルは保存しません。
それぞれのストレージサービス専用フォルダーは以下のようになります。
C:\Users\username\Dropbox
C:\Users\username\OneDrive
C:\Users\username\iCloudDrive
(Google Drive File Stream) G:\
Dropbox、OneDrive、iCloudDrive はユーザープロファイル「C:\Users\username」の配下に専用フォルダーを作成します。
「username」というのはユーザーアカウントの名称です。ユーザーごとに違います。
Windowsにログインしている時に入力しているユーザーアカウント名称です。
Google Drive File Streamだけは仮想ドライブを専用フォルダーにしています。
Google Drive File Stream の話は後で説明します。
ユーザープロファイルの配下のストレージサービス専用フォルダーの下に、日常的に使用するファイルを配置すると、フォルダーの階層が非常に深くなってしまい CLIでは扱い難くなってしまいます。
例えばDropBoxの下に、開発用のIDEのソースファイル一式を保存した場合、コマンドプロンプトでアクセスした場合、以下のような深いフォルダーになってしまいます。
C:\Users\username\Dropbox\MyDevelopment\Visual Studio 2017\Projects\rmsmf>
この下にも更に階層があるので、CLIツールなど開発するときはコマンドプロンプトのフォルダー移動操作が面倒なだけではなく、画面もフォルダー名が行にいっぱいになってしまい、コマンド引数などの入力が改行されて大変見づらくなります。
シンボリックリンクの薦め
このようにクラウドストレージサービスを使用していてフォルダーの階層が深く使い難い時は、Windows のファイルシステムに標準で組み込まれているシンボリックリンクを使用するのがおすすめです。
シンボリックリンクはファイルシステム上に仮想ファイルや仮想フォルダーを作成する機能です。
仮想ファイルや仮想フォルダーとは、具象ファイルや具象フォルダーに仮名を付けて、仮名でアクセスできる機能です。
例えば、具象フォルダー「C:\Users\username\Dropbox」に「dp」と仮名を付けると、仮想フォルダー「dp」を具象フォルダー「C:\Users\username\Dropbox」と同様に扱う事ができます。
仮想フォルダー「dp」を「C:」に置けば、「C:dp」の下に「C:\Users\username\Dropbox」のファイルが存在するように扱う事ができます。
まるでファイルが全てコピーされたように見えますが、フォルダーがリンクしているだけで、コピーされたわけでは無いです。
情技師(ITエンジニア)なら知らない人はいないでしょうが、一般ユーザーにはそれほど広まっていないように見えます。
シンボリックリンクを作成するには、コマンドプロンプトなら「mklink」コマンドを使用し、PowerShellなら「New-Item -Type SymbolicLink」を使用します。
管理者権限でPowerShell v7.0 を起動し「New-Item -Type SymbolicLink 仮想ファイル名 -Value 具象ファイル名」でシンボリックリンクを作成できますが、PowerShellではシンボリックリンクを削除する時に面倒なのでお勧めしません。
コマンドプロンプトで「mklink」コマンドを使用する事をお勧めします。
管理者権限でPowerShell を起動し「cmd」と入力すれば、PowerShellの中でコマンドプロンプトが起動します。
他の手段としては、「Win」+「S」キーを同時に押して、Windows検索欄へ移動し、そこで「cmd」と入力すると、メニューの中に「コマンドプロンプト」が出てきます。
この「コマンドプロンプト」を選択するとメニューの左側に「管理者として実行」が出てくるので、これをクリックして起動すると管理者権限でコマンドプロンプトが起動できます。
コマンドプロンプトでシンボリックリンクの仮想フォルダを作成するには以下のようにします。
mklink /D C:\dp C:\Users\username\Dropbox
mklink /D <仮想フォルダーパス> <具象フォルダーパス>
作成した仮想フォルダは「dir」コマンドでも、エクスプローラーでも確認できます。
dir \dp
「cd c:\dp」で移動し、「dir」で中身を見れば、「C:\Users\username\Dropbox」の中身が見られるはずです。
削除する時は、
rmdir C:\dp
とします。
ちなみに仮想ファイルの場合は、
del C:\<仮想ファイル名>
とします。
C:\dp のように、シンボリックリンクの仮想フォルダを使用すると、フォルダー名を短く、フォルダー階層を浅くする事ができます。
PowerShell やコマンドプロンプト、wsl2 のbash から、クラウドストレージを使うなら、シンボリックリンクでフォルダー階層浅くして利用することをお勧めします。
「mklink」コマンドは機能が意外に豊富で、その機能をこの記事で全て説明する事はできません。
以下のサイトなどで調べてください。
https://www.ipentec.com/document/windows-create-symbolic-linkhttps://www.atmarkit.co.jp/ait/articles/1306/07/news111.html
「シンボリックリンクの薦め」でした。
Google Drive File Stream の薦め
Dropbox、OneDrive、iCloudDrive を否定するつもりはありませんが、Google Drive File Stream は専用フォルダーを仮想ドライブにしていて、仮想ドライブが丸ごとクラウドストレージとして利用できます。
私の場合は、「G:」に割り当てられています。
Google Drive File Stream は初めからフォルダー階層が浅く出来ています。
ローカルストレージに仮想ドライブの中身は存在しません。
閲覧編集対象となるファイルだけ、一次ファイルとしてダウンロードされ、編集すると即アップロードされる為、クラウドストレージの中のファイル群をローカルストレージに保管しません。
つまり、ローカルストレージをほとんど消費しないのです。
ユーザープロファイルを使用しないので、一代のPCを複数人で使用する場合に、他の人にクラウドストレージの中のファイル群を見られるかも知れないと思うかも知れません。
しかし、Google Drive File Stream は「G-Suite」のアカウントに紐付き、他人はログインできません。
また、先に説明したようにローカルストレージに保管しませんから、同じPCの他のアカウント主に、自分のファイル群を見られることはあり得ません。
ただ、使用中のファイルだけダウンロードするのでIDEのプロジェクトファイルとソースファイル群のように、複数のファイルが連携しているタイプのファイル群を保管するのは止めた方が良いでしょう。
DBMSのデータファイルやGitリポジトリも止めた方が良いかも知れません。
試したわけではないですが。
あとは、モバイル環境のように通信が安定しない、時々通信が寸断する環境の場合は、使用しない方が良いです。
この場合はDropbox、OneDrive、iCloudDrive の方が良いです。