Python と仲良くなろう #0（環境構築編）

# はじめに

この記事は社内のインフラエンジニアの方々に Python を通してプログラミングと仲良くなってもらうことを目的として Qiita:Team へ投稿したものの再編集版となります。
目標としては[オライリーの「退屈なことは Python にやらせよう」](https://www.oreilly.co.jp/books/9784873117782/)を読んで内容を理解できるようになるくらいを考えています。
~~が、著者はまだこの本を読んでいません。~~
また、著者はマウス操作が嫌いなため随所に偏った思想の発言が見受けられますが予めご了承ください。

# 前提

弊社の都合上、全員 Mac を使っていることを想定しています。
Windows はごめんなさい。Ubuntu on Windows とか使えば似たようなことができます。たぶん。

# 環境準備

まずは Python をコーディング・実行するための環境を準備しましょう。

## コンソール

なんだかんだプログラミングにはコンソールが大切です。
個人の哲学がある人はこのセクションは飛ばしましょう。
zsh とか fish とかまで行ったら著者の領域外です。
~~だってそもそも ssh 先で同じシェルが使えない時点で詰みでしょ、そんなん。~~

Mac 標準の terminal でもいいですが、[なんだかんだ便利なので iTerm2 を使いましょう。](https://www.iterm2.com/)
[ダウンロードページからダウンロードしてインストールしましょう。](https://www.iterm2.com/downloads.html)
.zip をダウンロードして解凍したらアプリケーションフォルダに入れましょう。

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/7e57f6f9-6c30-11c3-7823-46adfdcc9c6b.png)


（今後、 `コンソール（Console）` `ターミナル（Terminal）` `iTerm` はすべてこの `iTerm2` を前提に話をします。）

アプリケーションフォルダに入れたら起動しましょう。
ここからは基本的にマウス操作よりもキーボード操作を優先します。
[ショートカット（⌘+スペース or Ctrl+スペース）で spotlight を起動します。](https://support.apple.com/ja-jp/guide/mac-help/mh26783/mac)
起動したら `iterm` を入力して iTerm2 を起動します。
[Alfread 使ってる人はいい感じに起動してください。](https://www.alfredapp.com/)私は使ってないので知りません。
あと、最初だけはインデックスが間に合わずに起動できないかも知れません。その場合は諦めてダブルクリックしましょう。

[最初にやっておくと便利なので単語移動の設定をしましょう。](https://qiita.com/hokutoasari/items/e2442b87c7b381f9ff7c)
ここでもショートカットです。
iTerm をフォーカスして `⌘+,` を押して Preference を開きます。

Profile > Keys > + クリック

<img width="1028" alt="c880b80d-cc8d-1a0f-723b-ca4aaaabd7c9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/563edb31-fd8c-fac4-364c-b612a0675200.png">


Click to Set をクリックしてフォーカスしたら `alt(option) + →` を押して下のセレクトボックスから `Action` から `Send Escape Sequence` を選択、 `Esc` の欄に `f` を入れて設定します。
同じように `alt + ←` には `Send Escape Sequence` に `b` を設定します。

<img width="452" alt="067edab3-f129-667a-d251-c2e4378e98b8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/ad889357-3618-083e-f36e-1133de025fd1.png">
<img width="443" alt="fcbe49e6-f8d8-a90c-da97-369dd1d064fa.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/c026a582-eb99-7397-9214-98f353073df7.png">


これで CLI 上で word 単位の移動ができます。この便利さにはいつか気づくことでしょう。

なお、k-nishigaki はこれの他に[ログ保存くらいしか設定していません。](https://qiita.com/okome-chan/items/2eec8552b6dafd35916a)
デフォルトで便利ですね、iTerm2。
これ以上の設定をしたい人は自分で調べて設定していきましょう。欲が生まれたあなたならできます。


## Editor (VS Code) セットアップ

エディタ（Editor）は大切です。**他に哲学のある人は読み飛ばしてください。**
iTerm2 を入れたあなたなら（たぶん） [Vim](https://www.vim.org/) が使えます。入れてなくても普通に Terminal で使えますが。
しかしここで Vim の話はしません。奥が深すぎて解説できないので、他の猛者に任せます。いくらでもでてくることでしょう。

Emacs 宗派の方はそのまま Emacs で突き進んでください。
余談ですが、著者も元は Emacs でしたのでちょっとした入力時には Emacs like な操作を行っています。
~~Ctrl + f, b, a, k, n あたりは鉄板ですよね。~~

閑話休題。

著者が Vim をより習得するために参考にしたのは↓のあたりです。

https://qiita.com/hachi8833/items/7beeee825c11f7437f54
https://qiita.com/nyantera/items/4bf29ca6f11bc797a9cb

Vim の話ここまで。

ここから先は [Visual Studio Code を使います。](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
今すぐ無料でダウンロードしましょう。
zip なのでインストール方法は iTerm2 と同じです。わかりやすいですね。
インストールしたら同様に spotlight で起動しましょう。
**マウス操作はあなたの大切な時間を毎回、数秒単位で奪っていきます。**
**数秒と言えど毎日繰り返す行為は積み重なれば多くの損失です。**
数回繰り返し行えば `vs` と入力するだけで vs code が起動することでしょう。

ついでに ~~この先の説明で面倒を回避するために必要なので~~ [コンソールから VS Code を起動できるように設定しましょう。](https://qiita.com/ayatokura/items/69c96306e3dee501e19b)
VS Code を開いたら `F1` を押し、コマンドパレットを開いたらそのまま `Shell` と入力します。
するといい感じに `Shell Command: Install 'code' command in PATH` というコマンドが選択されているかと思います。まよわずそのままクリックしましょう。

<img width="607" alt="1da0d25f-2f00-e8ec-9391-b04140b14375.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/764e4d57-50bf-18ef-3c92-119db9c03739.png">

するとなんかいい感じに成功した雰囲気の通知が出ると思います。出ろ。

<img width="456" alt="2f381793-8c43-b5a1-a6f3-c5f72725ef5a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/8a39ccff-6a97-c7c7-9a96-2e022ad296b3.png">

ここではコンソールが起動したままと思われるので、その場合はコンソールにウィンドウをフォーカスし、一度 `⌘+q` を押して終了しておきましょう。
何かに付けて困ったり困る前に再起動の精神です。

さて、VS Code に戻ります。うっかり終了していたらまた VS Code を起動してください。もちろん spotlight でキーボードから起動しましょうね。

起動したら左の四角いやつをクリックし、Search 欄に `python` を入力しましょう。
そして一番上の `Python` を Install しましょう。これで十分です。

<img width="313" alt="a79a43d5-e30e-e593-ad33-d4d1d0d31c7f.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/726acee9-c86e-2fde-4403-d373645d81ab.png">


なお、個人的に良いエディタの条件は

- 起動が早い
- 動作が早い
- Plugin が充実している
    - かつ、Plugin install が手軽

です。いくつか Editor を渡り歩けば、あなただけの究極の Editor に出会えることでしょう。
なお、著者はプログラマではないので**ぶっちゃけ全然こだわりがありません。**

## pyenv + virtual env のセットアップ

色々と宗派の対立はあります（↓）が、ここでは pyenv + virtualenv で進めます。
https://qiita.com/ganariya/items/1bf870275bad7b5ab506

**なお、ここから先はすべて私見ですが、個人的にとても重要です。**
プログラミング初学者が一番心の折れるポイント、それはプログラミング言語実行環境のセットアップです。
もう少し詳しく言うと **セットアップしてみたけどその手順がアレで再現性を失ってしまう** ことです。
プログラムの最も素敵なところは **同じ環境で実行すれば同じ結果が得られるという再現性** です。（※極論です）
究極的には **どこで、どんな環境でプログラミングしても同じ結果を得られる** という多幸感は重要です。（※持論です）
そのために **とても簡単にセットアップ** でき、かつ **自分の端末以外でも再現が容易** な環境を用意しましょう。

まぁ全てはここに書いてあるので転載です。
https://qiita.com/niwak2/items/5490607be32202ce1314

### pyenv install

Mac には Homebrew という ~~ちょっと前まで sudo 必要で割と面倒事が多かった~~ 便利なツールがあります。
便利なものはひたすら便利に使っていくべきです。

コンソールを開いて↓の入力をしましょう。
なお、行頭につけている `$` マークは「一般ユーザ（非 root ユーザ）である」ということを意味していますが、特に気にせず、その先の word を入力して Enter を押してください。
ズラズラ勝手に文字列が流れますが怖がることはありません。
それらはすべてあなたに「私は今こんな処理をしています」というメッセージです。
**機械との対話はすでに始まっています。**

```
$ brew install pyenv
```

たぶん、↓とは違うメッセージが出るでしょう。

```
$ brew install pyenv
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 4 taps (mackerelio/mackerel-agent, homebrew/cask-versions, homebrew/core and homebrew/cask).
==> New Formulae
（以下略）
```

<img width="701" alt="72babdb2-036e-bb77-6abb-13ecab0ade35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/e175e631-b274-ae17-dd57-dcb2540e3fbb.png">

（略）

重要なのは最後のほうに出力されたメッセージです。
そこに「Sucess!」とかそんな感じのメッセージが表示されていれば完璧です。
それは機械が教えてくれたおめでたいメッセージです。素直に受け取りましょう。

### virtualenv install

pyenv と同様に virutalenv をインストールしていきましょう。
インストールするパッケージの名前は `pyenv-virutalenv` です。
お間違いの無いよう。

```
$ brew install pyenv-virtualenv
```

ここでもズラズラ出ますが、それは機械からのコミュニケーションです。
すべてを受け止めましょう。

### おまじない

ここで、プログラミング、及び環境構築によくある**おまじない**を唱えます。
これは実はおまじないでもなんでもなく、機械との対話に必要な行為なのですが、**詳しく説明するとこの記事の３倍くらい必要になる**ので諦めます。ごめんなさい。

Vim は面倒なので、VS Code でやりましょう。
コンソールを開いて↓を入力して Enter してください。
たぶん VS Code が起動するはずです。
起動しなかったらごめんなさい。頑張って `~/.bash_profile` を開いてください。

なお、これは shell 操作で重要な TIPS ですが、入力途中に Tab を押すことでその先の word を（可能な場合に）補完することができます。
試しに `code ~/.bash_` まで入力したところで Tab を押してみてください。
おそらく `code ~/.bash_profile` が一気に入力されるはずです。
[これを「タブ補完」と呼びます。](https://linuxfan.info/bash-completion)
また、補完の候補が複数ある場合に Tab を２回連続で押すと、候補をすべて出力してくれたりします。
**覚えるべきはコマンドの全文ではなく、使い方です。**詳細なコマンドを忘れてしまってもタブ補完で思い出すことが可能です。
Google 日本語入力でもタブは役立ちますのでぜひ覚えてください。
ぜひ連打していきましょう。

閑話休題。↓をコンソールで入力します。

```
$ code ~/.bash_profile
```

すると VS Code が起動すると思います。起動しろ。
もしかすると色々記述されたファイルが開くかも知れませんが、無視してそのファイルの一番下の空いてるところに↓をコピー＆ペーストします。~~ここは面倒なのでコピペでいいです。~~

```
## Set path for pyenv
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi
```

<img width="351" alt="21161150-7f51-38f2-4dc0-d462337647ab.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/8ab27ff3-3431-4272-b3e6-fc298bbb8450.png">


記述したら `⌘+s` で保存しましょう。
保存という行為もキーボードショートカットです。
**マウス操作はあなたの時間を奪っています。**


# Hello, world!!

プログラミングの第一歩といえば Hello, world!

## 初めての「コーディング」

さて、ここまで来ればもう Python でのプログラミングを行う準備は十分です。
最後の事前準備として、デスクトップに `python_trial` という名前でフォルダを作っておいてください。
なお、これもコンソールで実行可能です。コンソールを開いて↓を入力しましょう。

```
$ mkdir ~/Desktop/python_trial
```

これでデスクトップ上に `python_trial` という名前のフォルダが作成されます。
（ [`~` というのは `ホームフォルダ` を表しています。](https://pc-karuma.net/mac-finder-library-folder/)理解しなくても問題ありませんが興味あればリンク先とか調べてみてください。）

終わったら VS Code を開き、`⌘+n` を押しましょう。**可能な限りキーボードで操作しましょう。**
**マウス操作はあなたの大切な時間を損ないます。**

新しいタブで `Untitled-1` が開かれますね。
ここからあなたの素敵なプログラミングライフの始まりです。 :tada:

<img width="625" alt="4cd258b2-2f8a-5017-a5bc-5a08017897ca.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/7770de92-3447-59d9-36b4-44337bbf0567.png">


最初に、今から記述するファイルが Python のコードであるということを明示すると便利なことが多いので、何を記述するまでもなくいきなり保存してみましょう。
保存は `⌘+s` です。**マウス操作は時間を無駄にする行為と認識しましょう。**
保存する名前はなんでも構いませんが、ここでは慣例に従って `hello_world.py` としておきましょう。
なお、**重要なのはファイル名ではなく拡張子です。**
Editor は基本的に拡張子でファイルを判断します。
これが Python のコードを記述しているファイルだということを示すために `.py` という拡張子だけは崩さず保存しましょう。
保存場所は先程作成したデスクトップの `python_trial` にしましょう。してください。

<img width="847" alt="58e50134-e11e-6ccb-1e24-8278c76aa755.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/5cc8befb-5a27-2edb-5ada-cb47698d2297.png">


保存したらそのまま VS Code で↓のコードを **コピー＆ペースとは決してせず**  すべて手打ちしましょう。
これは著者の個人的な意見ですが、**手で打つことはコピペより遥かに学習効率を上げます。**

なお、打っている途中に `(` とか打った途端、自動で `()` が入力され、その上で `()` の間にカーソルを移動されるかも知れません。
これは Editor の素敵な「補完機能」です。
エンジニアは面倒事が嫌いです。`()` と連続で打つことすら嫌いです。それを自動で入力してくれる機能なのです。
ぜひ気持ち悪がらず、積極的に活用していきましょう。機械と仲良くなりましょう。

```
print("hello world!")
```

<img width="391" alt="05552565-c2fd-8d4a-f242-30ec698ea873.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/deb63450-3713-74c3-da08-2c419da89190.png">


打ち終わったら `⌘+s` で保存します。
**繰り返しますが、マウス操作は時間を無駄にする行為です。**

## 最初の「コード実行」

保存したら今度はコンソールを開きます。
spotlight を開いて `iterm` と入力してもいいですが、iTerm2 を起動済みなら `⌘+Tab` を駆使して iTerm2 をフォーカスするのもいいでしょう。
**マウスで選択する？あなたは GUI に毒されている！今すぐそのマウスを手放しなさい！！**

コンソールで↓を入力します。
Tab をたくさん押していきましょう。補完が効いていくはずです。

```
$ cd ~/Desktop/python_trial/
```

これは `~/Desktop/python_trial/` というフォルダに `current directory` を変更するという意味のコマンドです。
コマンドはプログラミングと切っても切れない関係にある技です。恐れず使っていきましょう。

### pyenv の設定

**さぁ、ここで最初に準備した pyenv の出番です！**

以下のコマンドをコンソールで実行しましょう。

```
$ pyenv install 3.6.9
（おそらく↓のような表示がされます）
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.9.tar.xz...
-> https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tar.xz
Installing Python-3.6.9...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.6.9 to /Users/k-nishigaki/.pyenv/versions/3.6.9
```

これは `pyenv` という Python 全体の環境管理アプリケーションに python v.3.6.9 を install するコマンドです。（※ `3.6.9` の理由はこの時点で最新っぽかったからです）
時間は結構かかります。
終わったら、次に以下のコマンドを実行しましょう。

```
$ pyenv virtualenv 3.6.9 python_trial
```

するといい感じに `pyenv` に `python v.3.6.9` が `python_trial`  という名前でセットされます。
確認してみましょう。

```
$ pyenv versions | grep python_trial
  3.6.9/envs/python_trial
  python_trial
```

バッチリ設定されてそうですね。
ですが、これではまだ不十分です。次に↓のコマンドを打ちましょう。

```
$ pyenv local python_trial
(python_trial) hogehoge$
```

実行するとコンソールの頭に `(python_trial)` という文字がついたかと思います。ついてないかも。ついてなかったらついてる気分でそのまま行きましょう。

これこそが pyenv + virtualenv の真骨頂です。
これは「今いるフォルダが `python v.3.6.9/python_tiral` という環境の支配下にある」ということを意味しています。
この有用性はきっと後々ご理解いただけるかと思いますが、この時点では「今いるフォルダでは python v.3.6.9 が使える」という認識でいると :+1: です。
では python v.3.6.9 が動いていることを確認しましょう。
↓のコマンドを実行します。

```
$ python --version
Python 3.6.9
```

<img width="472" alt="a7c30d92-9698-7bd7-f0e2-0e4067cad393.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/1f4c9243-221f-fbea-35d5-15852c904f39.png">


きっちり Python 3.6.9 であるということがわかりましたね。
ではこのまま、先程コーディングした python スクリプトを実行してみましょう。
↓をコンソールで実行します。

```
$ python hello_world.py
hello, world!
```

きっとこのように表示されたはずです。

<img width="508" alt="a5241917-bc94-8a91-371d-04ffe9098bd8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88428/06a452b2-b3c3-50ae-796d-31ce5607e7f2.png">

「ここまで準備してたったこれだけ？」と思うかも知れません。
しかし、これであなたは「Python 3.6.9 が実行可能な環境であれば、どんなところでも `hello, world!` という文字列をコンソールに出力させる技術」を手に入れました。
これは実に多くのプログラミングに通じる基礎技術です。
あなたはまさに今、プログラミングとプログラムの実行という大きな技術を手に入れました。
ここまで来られたあなたならこの先多くのプログラミング技術を習得できるはずです。

# 次回予告

次回は変数と関数を扱う予定です。