人生裏ローテ

通年裏ローテを守って地味に重宝がられる人生を送りたいITエンジニアのブログ

【初学者向け】Windows10 で Python の環境構築をする

はじめに

色々あって無職からSESで定職を得た友人がいるのだが、彼の勉強に付き合う過程で初学者向けの資料を揃える必要が出てきたため、ブログに書き出す。

初学者向けの資料ということでディテールを省き、時には正確性を損なう表現があるが、「あまりに違うのではないか」という点があればご指摘いただければ幸いである。*1

対象読者としては「経験○年と偽られて現場に投入されたが何もわからない人」としている。コンピュータサイエンスの学位を持っているような人間からすると説明を必要としないような内容まで記載することを心がけているが、不足点などあればこちらも指摘頂きたい。

構成

開発環境は以下のように構築する。

  • OS: Windows10 (Homeでも可)
  • 基本的には WSL2 / Ubuntu で完結させる
  • pyenv は利用しない
    • 理由としては 渋川さんの記事 と同様
    • ある程度「分かっている人」が使わないと却って混乱のもとになる
  • ターミナルには Windows Terminal を利用する
  • エディタには Visual Studio Code (以下、VSCodeと表記) を利用する
  • 便利さよりも構成のシンプルさを優先する

手順

初学者向けの資料のため、「なぜこの機能を利用するのか」「どのように動作させるのか」を 最低限 解説する。

環境構築というのは環境次第で詰まることも多い上に、基礎知識も要求されるため、「最初にすべきこと」である一方で非常に難易度が高い。今回は手順通りにやれば基本的に詰まらないように心がけているが、構築した環境に自分で手を加えたり、他の環境で似た開発環境を構築する際に途方に暮れるようであっては本末転倒である。

そういう考えから、本稿ではある程度の解説を記載する。

WSL2 を導入する

そもそも WSL2 とは

WSL(Windows Subsystem for Linux) とは、ざっくり言うとWindows上でLinuxを動かすためのシステムである。(初学者向けにディテールを削っている。以下、このように厳密性を欠いた表現を多々行う)

Windows, Linux ともに異なる OS(Operating System) である。一番身近な OS の差は iPhone(iOS) と Android だろうか。雑なイメージとしては、今は iPhone を使っているけど Android の使い方を覚えよう。ただし、 iPhone の上で Android っぽいものが動くよ。という感じだ。

初学者の疑問としては、なぜ Windows のままだと取り回しにくいのか、なぜ Linux を使うのかというのがあるだろう。

一言で済む答えとしては、 Linux のほうがノウハウが溜まっている というのがある。

世の中のサーバのほとんどは Linux で動いている。*2 また、コンピュータサイエンスを学ぶ人間は Linux/UNIX から様々なことを学ぶため、一番理解しているOSとして Linux をよく利用する。もちろん、開発者フレンドリーなOSであるという事情もある。

もう一つの理由として、単純に Windows 上だけでは開発環境の構築は完結させにくいことが多い。言語によってやりやすい、やりにくいの差はあるが、 Linux より構築しやすいことは多くないため、やりやすさを考えて Linux を用いる。

また、 WSL で構築した環境は作り直しが容易である。環境を壊しても復旧しやすいというのは大きな利点だ。

導入手順

  1. Snow System の記事を参考に、仮想マシンプラットフォームを有効にする まで実行する
  2. ストア から Ubuntu をインストールする
  3. インストールしたら起動する

起動したらユーザ名とパスワードを設定するよう促されるので、好きなユーザ名とパスワードを設定する。公開するサーバであれば様々な注意が必要だが、公開しないマシンのため適当で良い。

ユーザ名とパスワードを設定したら黒い画面にいくので、試しに uname -a と入力してみよう。 uname はシステム情報を表示するコマンドだが、 Microsoft の文字が見えることを確認しよう。

f:id:tkmk_k:20210113205905p:plain
モザイク部分は筆者のホスト名である。隠す必要もないが一応隠した。

Windows Terminal を導入する

Windows Terminal は Microsoft 謹製の端末エミュレータである。

端末エミュレータとは

これまで開発をやったことのない人間には端末エミュレータという単語は聞き馴染みがないだろう。イメージとしては Windowsコマンドプロンプトを思い浮かべてほしい。なぜ「エミュレータ」かというと、これは歴史が絡んでくる。かつてのコンピュータは高価かつ巨大で、現代のように一人一つ用意できるような代物ではなかった。そのため、操作することだけに特化した端末(Terminal) 越しにコンピュータを利用していた。現代ではコンピュータは一人一つ利用でき、GUIを通して利用できるため、当時の文字のみの操作機器(端末)をエミュレーションするソフトウェアということで「エミュレータ」となっている。

Windows Terminal の役目をごくシンプルに言えば、WSLを操作するコマンドプロンプトである。先ほどの WSL 導入で表示されたオレンジのアイコンの画面も Terminal ではある。しかし端末エミュレータ自体のカスタマイズ性や便利さから、 Windows Terminal を利用する。ちなみに、文字だけで操作する操作体系を CLI(Command Line Interface) という。対して、我々が普段触っている操作体系は GUI(Graphical User Interface) である。

GUI ではダメなのかというと、別にダメではない。極論を言えば、アプリエンジニアには不要なスキルである。実際私の勤務先でも、若い世代を中心に CLI に恐怖心を持つエンジニアは多い。とはいえ、得意不得意は別にして中学英語くらいは覚えておこうぜ、位のノリと解釈してもらいたい。

導入手順

  1. ストア からインストールし、起動する
  2. V みたいなマークのところから、 Ubuntu を選択

f:id:tkmk_k:20210113211111p:plain

選択できたら、先ほどのように uname -a なり whoami なりを実行して動作を確認しよう。

Visual Studio Code を導入する

エディタとは

Visual Studio Code (以下、VSCodeと表記) は、マイクロソフト謹製のテキストエディタである。インストールについては公式サイトからすぐなので、導入手順については書かない。

なぜエディタが必要なのかといえば、プログラミングにおいては必須だからである。

これまでソフトウェア開発に縁のなかった人間は文書がどのように保存されるのか気にかけたことがないかもしれないが、テキストエディタではプレーンテキスト(書かれている文字情報以外にメタデータを持たない) を編集する。たとえば Word で作成したファイル(.docx) は Word で読み込めるようにフォントサイズや余白のデータなどを文章本体とは別にメタデータとして保存しているが、プログラミングにおいてはこのようなデータは基本的に不要である。*3

Windows にはデフォルトでメモ帳(notepad.exe) というテキストエディタがあるが、アレでプログラミングを行うのは非常に難しい。詳細を書こうとすると非常に長くなるが、 VSCode を利用する理由は主に 3 点だ。

  • 豊富な拡張機能があり、どのような習熟度になっても使える
  • Live Share 機能を使うことで、遠隔での授業がしやすい
  • code コマンドで WSL から起動できる

Linux の設定

これからやること

いよいよここから Linux を設定していく。

少々迂遠ではあるが、パッケージ管理について解説する。 Linux を使う理由として「開発者フレンドリー」を挙げたが、実はここにかかってくる。(他にも開発者フレンドリーな理由はあるが)

最も身近なパッケージ管理「みたいなもの」は App Store なり GooglePlay Store だろう。パッケージのアップデートを管理し、一つの場所からインストールや削除を管理するというのが基本的なアイデアである。*4

Ubuntu では apt というパッケージ管理システムを用いている。apt を利用することで様々なソフトウェアをコマンド一つでインストール、アップデート、アンインストールすることができる。まずは apt の設定を行い、 apt を利用してソフトウェアをインストールする。

手順

以下の3~4つのコマンドを実行する。

慣例として、文頭に $ をつけているが、これは「一般ユーザとして動作させる」ことを暗黙的に示している。

$ sudo sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://ftp.jaist.ac.jp/pub/Linux/ubuntu/%g" /etc/apt/sources.list
$ sudo apt-get update
# やりたければ sudo apt-get -y upgrade で実際にソフトウェアアップデートをかける
$ sudo apt-get install -y python3 python3-pip python3-venv

上記の表記であれば、 sudo から入力する。

まず、確実に日本国内のサーバからダウンロードされるようにダウンロード元の設定を行う。

次に、インストール可能なパッケージの一覧を更新する。アップグレードまでやりたければ実行しても良い。*5

最後に、 python をインストールする。 python3-pippython3-venv については環境構築が終わり、実際に活用する際に解説したい。

動作確認

一応、Python の動作確認をしたい。

$ python3 --version
$ python3 -c 'print("Hello")'

python3 --version では Python のバージョンが、 python3 -c 'print("Hello")' では次の行に Hello が表示されれば良い。

最後に

WSL2, Windows Terminal, VSCodePython の開発環境を構築した。今回、自宅のゲーミングPCで構築してみたが、数年前よりもはるかに構築が簡単になっており隔世の感である。

最近の MacApple 様の機嫌次第というところもあり、WSL2 の登場もあって開発者の潮目も変わりつつあることを感じる。分かっている人向けには「今の Windows 開発環境、めっちゃ構築は楽だよ」と主張したい。

余裕のある人は

Windows Terminal はデフォルトで PowerShell を起動するようになっているので、設定から defaultProfile を変更すると良い。

json ファイルを開くエディタが見つからないダイアログが出た際は、 VSCode を指定しよう。

*1:混乱するよりは細部が不正確であっても大まかなイメージを持っておくべきだと思っている。このスタンスに異論を持たれるのは承知しているが、小学一年生の算数で負の数や小数を存在しないものとして教えるようなものである。踏み込んだ知識は質問された際に返せば良い

*2:https://kusanagi.dht-jpn.co.jp/2018/02/linux_share/ 軽く探した限りでは信頼できるシェアの数字は出てこなかったので、話半分くらいの典拠しか出せなかった

*3:詳しい人にとってはモヤモヤする説明だろうが、コンパイラインタプリタの話は実際にソースを書く際に解説する

*4:パッケージ管理システムが行う最も大切な仕事として依存関係の管理があるが、対象読者の知識レベルでは理解が難しいので敢えて解説しない

*5:外部公開しているサーバや企業内で利用しているものだと慎重に判断する必要があるが、そうでないなら基本的に自由だと思っている