環境構築 0_wsl上でのpython hello world まで

#初めに
初めて記事を投稿する。
Qiita記事作成に当たり、[このサイト](https://qiita.com/shizuma/items/8616bbe3ebe8ab0b6ca1)と[このサイト](https://qiita.com/yuta-38/items/a997bc228fa2850c9fce)を参考にした。

wslの環境構築について、別の大学にある同じ研究室の後輩に教えるために作成した。
ちょくちょく内容を追加していくと思う。
そのため、本筋からずれることが多々ある。

ワタシハリナックスチョットデキナイので、嘘をつくことも多々ある。
指摘してくださると助かる。

後輩へ。分からないことがあればググれ。
君の分からない問題は、世界の誰かがすでに突破している問題だ。ググれば出る。
それと、ここで質問するとき本名は言わないでくれ。

Nortonなどのセキュリティソフトを入れている人は、ファイアウォール関連の問題が発生する可能性があるため、追記から読んだほうがいいと思う。

#目次
0. wslについて
0. wslのインストール
0. pythonのhello world
0. 追記


#wslについて
wsl(Windows Subsystem for Linux)は、文字通り、windowsマシン上で、linuxを動かすためのシステム。
windowsマシンから見て、別のマシン(仮想マシン)扱いになっている。
ROSなども普通に動く。
かなり便利。

####不便な点
wsl2(2021/04/19現在wsl最新)では、GUI関連がサポートされていない。そのため、自分でxserverなどを介して、GUIを動かせるように設定しなければならない。
ipアドレスの扱いに癖があり、TCP/IPなどで、windowsとwsl_linuxで通信させたいとき、wsl_linux側からでは、"localhost"でwindows側にアクセスできない。
色々詰んだ時、__ファイアウォール関連が原因__だったことが結構多い。ファイアウォールの注意喚起が起きたときは、脳死でokを連打しないようによく読む癖をつけたほうが良い。

####linuxについて
linux(linux系OS)は、windowsOSやmacOSと同じOSの一種である。
様々な種類（ディストリビューション）があり、ubuntuなどが代表的である。
linuxは、その名から分かるように、Linus氏が作成したunix系OSである。（macOSもunix系。）
オープンソースなものが多く、開発ガチ勢が良く使用している（気がする）。
windows派 vs mac派 の宗教戦争をしている間に、「僕はlinux派～」と割り込むと、双方から嫌われる可能性があるので注意しよう。
ROS(Robot Operating System)は、基本的にlinux系OS上でしか動作しないので、ロボットの開発・制御をしたいなら、linux一択みたいな風潮はある（気がする）。

####macユーザーの後輩へ
macOSは、先に述べた通り、linux同様、unix系OSである。したがって、これから言うことは嘘であるが、macを使用しているのなら、とりあえず、以下に示すwslを用いたlinux環境の構築は、もうできているものとして考えてもよい。（pythonのhelloworldらへんから試してみてくれ。）
しかし、細かいところで仕様が違うところがあるので、問題が発生したら、その都度調べてくれ。僕はmacを使ってないからわからん。
ただ、macユーザーはかなりの数がいるので、もし問題にぶつかっても、同じ問題を解決している人がネット上にきっと存在する。安心していい。
もし、macだけどどうしてもlinuxで開発したいというのなら、"仮想マシン"や"デュアルブート"で検索してみたらよい。

#wslのインストール
基本的に、[windows公式](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)のここに従えばよい。
__上記サイトを読むことを強く推奨する__が、めんどくさい場合は、以下のコマンドを、powershell(管理者権限)で実行すればよい。
powershell(管理者権限)で実行するとは、スタートボタン左クリックで出てくる"Windows PowerShell(管理者)"をクリックすると出てくる青い画面上で、コマンドを実行する、という意味である。

``` :wslを有効にする
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
``` :仮想マシンの機能を有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

__上記コマンド実行後windowsマシン(パソコン本体)を再起動__

その後、Microsoft StoreでLinux ディストリビューション(ubuntuのことと理解してよい。)をインストールする。
　　自分は、"ubuntu"を使用する。
　　　　Microsoft Storeの、"Ubuntu 20.04 LTS"(2021/04/19現在最新版)にした。
そして、起動する。この時、ubuntuのアカウントを作成する。

追記；2021/05/09
自作PCなどで環境構築している場合は、BIOSから、"Intel Virtualization Technology"の部分を有効にしないと、正しく動作しない場合があるらしい。 

最後に、以下のコマンドを、同様にpowershell(管理者権限)で実行

``` :wsl2をwslの規定のバージョンとして設定する
wsl --set-default-version 2
```
wslのインストールはここで終わり。

以下確認

``` :確認用コマンド
wsl -l -v
```
で

``` :確認用出力
 NAME      STATE           VERSION
* Ubuntu    Running         2
```
のようになっていればよい。（stateは、別にRunningじゃなくてもよい。）

これで、windows上のターミナル(コマンドプロンプトでも、power shellでもどっちでもいい)で、"wsl"と入力すれば、ubuntuが動く。
__最初にwslを起動するときは、起動に少し時間がかかり、また、ubuntuアカウントを作成する必要がある(とても簡単)__。[このサイト](https://docs.microsoft.com/ja-jp/windows/wsl/user-support)を参考に行うとよい。

__以降の環境構築において、windows上の作業なのか、ubuntu上の作業なのかを、意識して作業するべき。__

####便利ツール
以下のツールのインストールを強く勧める。
######windows terminal
Microsoft Storeで、"windows terminal"と検索すれば出る。
超便利なターミナル。
######Visual Studio Code (vsc)
エディタ。エディタは、各宗教にお任せするが、wsl+vscは良い。
[公式サイト](https://code.visualstudio.com/)でインストールできる。
[このサイト](https://qiita.com/_masa_u/items/d3c1fa7898b0783bc3ed)で、vscを入れるときの詳しい手順（必要なvscの拡張機能など）が説明されている。
vscをubuntu上で使うときは、リモートでwslにつないでいる扱いになっており、windowsアプデの後などに、参照パスが切れて開けなくなることがある。その時は、一回、windows側でvscを開き、そこから、wsl上のファイルを開けば、参照パスが通り、以降、wsl上でも開くようになる。

#pythonのhello world
"hello world"とは、プログラミング界隈におけるの"チュートリアル"の意味。

python(python3)をwsl上にインストールして、実際にコードを書いてみるところまでする。
この作業は、すべて、wsl上(ubuntu上)で行う。windows上ではないことを意識して行うように。
他の作業は、wslとwindowsの両方で作業が必要になることが多い。

作業場所は、自分で"workspace"などの名前のディレクトリを作成して、その中で行うのがマナーがいい。
ディレクトリの作成方法などの、__linuxコマンド__は、自分で調べて、使えるようになっておくべき。

__以下のコマンドをwsl上で実行する。__（コマンドは1行ずつね。）
コマンド間の日本語は、読まんでもいい。

``` :おまじない
sudo apt update
sudo apt upgrade
```
"sudo"で始まるコマンドは、"管理者権限で実行"みたいな意味。
"ほんとに実行しますか？"と聞かれるので、"y"(yesの意味)と打てばよい。
プログラムの世界では、祈ることが非常に重要視される。このおまじないも、祈りの1つ。
この2つのコマンドは、定期的に行っていいと思う。

``` :python本体のインストール
sudo apt install -y python3
sudo apt install -y python3-pip
sudo apt install -y python3-dev
```
"-y"は、毎回、"y"って手打ちするのがだるいからつけただけ。

これから、色々なpythonパッケージをインストールすることになると思う。
その時、"pip"でインストールしたら、python内部の"site-package"内部に、
それ以外の方法でインストールしたら、"dist-package"内部に格納されるらしい。

``` :NumPyのインストール
sudo apt install -y python3-numpy
```
NumPyは、pythonを超すごい電卓にしてくれるライブラリ。
pythonが人気な理由の1つが、NumPyを使用できるから。
なくても動くが、np(NumPyのこと)がないpythonって、正直、意味わからんから、最初に入れておく。

``` :pylintのインストール
pip install pylint
```
pylintは、pythonの文法をチェックしてくれるやつ。
なくても動くけど、なかったら、vscに怒られるので、最初から入れておく。

以上で、pythonの環境構築終わり。

以下、"hello world"を出力するプログラムを作成し、動作確認。

適当な場所で、以下のコマンドを実行。

``` :helloworld.pyファイルの作成と編集
code helloworld.py
```
"code"コマンドは、vscで編集するときに使用する

以下vsc内部でhelloworld.pyを以下のように編集

```python:helloworld.py
print("hello world")
```

保存後、wsl上で、以下のコマンドを実行

```:helloworld.pyの実行
python3 helloworld.py
```
以下のような出力になれば、動作確認成功。

```
hello world
```

また、pythonには__対話モード__というものも存在している。
調べることをおすすめする。

以上で、pythonのことを__完全に理解した__と思う。

次の環境構築は[こちら](https://qiita.com/magonotegaeru/items/cbfaa7ab8e3728609d32)

#追記
wslからvscを開くときについて、セキュリティソフトによって生じる諸問題：
通常、vscをwslから開けるようにするには、まず、windows側にvscをインストールして、vsc内部から"リモートエクスプローラー"経由で、wsl内部のファイルを開けば、wslとvscにパスが通り、以降wslからvscを起動できるようになる。
この時、ファイアウォールの設定で、vscのアクセスを許可をする必要があるが、Nortonなどのセキュリティソフトを入れている場合、ファイアウォールの設定を、自分でいじれないという問題が報告された。
現在(2021/05/09)、この問題は解決していない。
考えられる解決策は、初めてvscを起動するときに、ファイアウォールのウィンドウがポップアップしてくると思うが、その時に、脳死でokしまくるのではなく、そこで、ファイアウォールのアクセスを許可するように気を付ける、ということくらいしか考えられない。
もしくは、セキュリティソフトをアンインストールすること。（個人的には、過去、あるセキュリティソフトについて、ライセンスが残っている状態で、うざくなったため、アンインストールした経験があるが、これといった問題は発生していない。そのため推奨できる手段ではあるが、責任は取らない。）