Mac/LinuxユーザのためのWindows Tips

# 概要

このポストでは、LinuxユーザがWindowsマシンをはじめて触るときに遭遇する疑問点を列挙し、自分なりの答えを書いてみようと思います。

- 対象者：Linux,Macでの開発経験があるが、Windowsにあまり詳しくないひと
- 目的：備忘、トラブル回避

# 1. WSL

**WSLとは？**
[Windows Subsystem for Linux (WSL)](https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux)は、Windows 10から標準サポートされた[互換レイヤー](https://ja.wikipedia.org/wiki/%E4%BA%92%E6%8F%9B%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC)です。WSLを使うことでバイナリレベルでのOS互換性を保ったまま、Linux系のシステムコールを実行できます。Dockerがサポートされていない、など不満点はありますが、2020年現在、WSLはWindowsマシンで開発を行う際のベストプラクティスです。

なお、WSLには、Microfoft社がUbuntuプロジェクトの親元である[カノニカル社 (Canonical Ltd.)](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%8E%E3%83%8B%E3%82%AB%E3%83%AB)と提携して開発したという経緯があるため、現状サポートされているディストリビューションは、Ubuntu・Debian系のディストリビューションのみです。

**WSLのダウンロード方法**
Windows StoreからUbuntuアプリ（無料）をダウンロードするだけで簡単に入手できます。詳しい手順は他記事にくわしい説明があるので、ここでは省略します。また、Ubuntuアプリのターミナルが見にくいので、ターミナルソフトを別途インストールすることをお勧めします。

参考:

https://qiita.com/Aruneko/items/c79810b0b015bebf30bb

https://qiita.com/rubytomato@github/items/fdfc0a76e848442f374e


# 2. .exeファイル

EXEファイル（.exe）は、Windows上で動作するアプリケーションの実行ファイル（の拡張子）です。
WindowsをGUIで使っている限り、内部プログラムを意識することはほとんどありませんが、
唯一アプリケーションの実行時には、このexeファイルを使います。

より正確には、EXEファイルには、オブジェクトコードが記述されたバイナリファイルです。オブジェクトコードとは、開発者が書いたソースコードを、コンパイラやインタプリタが変換した機械語の記述を指します。EXEファイルを作成するためのコンパイラやインタプリタにあたる処理は、Windows(Microsoft社)が規約として定めており、開発者はこれに従う必要があります。

参考
- https://codezine.jp/article/detail/403
- https://wa3.i-3-i.info/word12258.html


# 3. Cドライブ

Windowsマシンを利用する際、WSL(Ubunu)にログインしてCLIのみで開発していてもいいのですが、Windowsのアプリケーションとの間でファイル転送をするためには、ファイルシステムを理解する必要があります。
WindowsではExplorer(MacのFinderとほぼ同じ)というGUIアプリケーションでファイルシステムを管理しています。ここで気になるのが、ルートディレクトリにあたる場所にある「Cドライブ」「Dドライブ」です。

「ドライブ」はLinuxでいうディスクと同じ意味で、データの記憶媒体、保存媒体（具体的にはHDDやSSD）を指します。OneDriveやGoogleDriveと同じです。
そして、「C,D」はそれぞれドライブの保存領域（論理/物理）や保存媒体（メディア）を区別するために識別番号です。もともと、フロッピーディスクが主流だった時代にAドライブ、Bドライブというすみわけがあり、その名残で現在はCドライブ、Dドライブという名称が使われています。また、Cドライブには、OSやそれに付随するプログラムが格納されているという特徴があり、「ユーザ間で共有されるデータやプログラムを保存する」ことが推奨されています。Cは、ComputerやCPUの"C"ではなく単なる連番です。USB、CD、DVD、Blueray、外付けHDD、光学ドライブなどのストレージデバイスをマシンに接続したとき、Windowsはそれぞれの媒体(メディア)をドライブとして認識されます。

- A: フロッピーディスク (昔の名残)
- B: フロッピーディスク (昔の名残)
- C: ローカルディスク (HDD,SSD) ※ただしOSが保存されている
- D: ローカルディスク (HHD,SSD)
- E: USBなど他の記憶媒体
- ...
- Z: ネットワークドライブ(NASなど)

WSLではシステム起動時に、`/mnt/`以下にWindowsドライブがマウントされます。つまり、Cドライブは`/mnt/c/`から、Dドライブは`/mnt/d/`から参照できます。マウントとは「ストレージデバイスをシステム(OS)に認識させること」で、Linuxに特有の機能です。WSLではWindowsにあるCドライブなどのデータをそのまま`/mnt/`以下にマウントすることで互換性を保ちます。

- Cドライブ：`/mnt/c/Users/<USERNAME>`
- デスクトップ：`/mnt/c/Users/<USERNAME>/Desktop`
- WSL: `/mnt/c/Windows/System32/wsl.exe` ( C:\\Windows\\System32\\wsl.exe )
- コマンドプロンプト：`/mnt/c/Windows/System32/cmd.exe` ( C:\\Windows\\System32\\cmd.exe )

# 4. Windows Defender

[Windows Defender](https://ja.wikipedia.org/wiki/Windows_Defender)は、Windows 10で標準インストールされるセキュリティソフト(無料)です。
Windowsは世界中で利用されているため、ウイルスの攻撃対象となることが多く、これまでは市販のウイルスソフトを別途インストールすることが通例でしたが、最近(Windows 10以降, 2016~)ではWindows Defenderのみで対処するユーザも増えています。

一方で、Windows Defenderはもともとマルウェア対策ソフトとして提供されていたため、アプリケーション経由の攻撃に脆弱性があるという情報もあります。セキュリティ関係の最新情報や技術については、[Microsoft Security Response Center](https://msrc-blog.microsoft.com/)からチェックすることができます。

# 5. Windowsのディレクトリ構造

ディレクトリ構造にもLinux/Unix(MacOS)系とWindowsで大きな違いがあります。
treeコマンドを使って、Windowsの階層構造をみてみましょう。
```
$ sudo apt install tree
$ sudo tree -L 2 -d > ~/dirtree.txt
```

クリップボードに張り付けたい場合は、clip.exeを使えばOKです。
```
$ echo `export DISPLAY=localhost:0.0` > ~/.bashrc
$ sudo tree -L 2 -d | clip.exe
```

Cドライブ以下の主要なディレクトリは以下のような構成です。（Windows 10）

```
c
├── $Recycle.Bin
├── Apps
├── Downloads
├── Drivers
│   ├── input
│   ├── network
│   ├── storage
│   └── video
├── Intel
├── OneDriveTemp
├── PerfLogs [error opening dir]
├── Program Files
├── Program Files (x86)
│   ├── ...
│   ├── Windows Defender
│   ├── Windows Mail
│   ├── Windows Media Player
│   ├── Windows Multimedia Platform
│   ├── Windows NT
│   ├── Windows Photo Viewer
│   ├── Windows Portable Devices
│   ├── Windows Sidebar
│   └── WindowsPowerShell
├── ProgramData
│   ├── Dell
│   ├── Intel
│   ├── Microsoft
│   ├── Microsoft OneDrive
│   ├── ...
│   ├── WindowsHolographicDevices
│   └── ssh
├── Recovery [error opening dir]
├── System Volume Information [error opening dir]
├── Users
│   ├── Default
│   ├── Public
│   └── <YOUR USER NAME>
│       ├── 3D Objects
│       ├── AppData
│       ├── Contacts
│       ├── Desktop
│       ├── Documents
│       ├── Downloads
│       ├── Favorites
│       ├── Links
├── Music
├── OneDrive
├── Pictures
├── Saved Games
├── Searches
└── Videos
├── Windows
└── langpacks
    └── ja-JP
```