PythonZen & PEP 8 検定試験で学ぶ　Pythonのするべきことではないこと

# はじめに
本記事は**PythonZen & PEP 8 検定試験**の勘所について記載しています。

Pythonに関する検定及び資格試験は、一般社団法人Pythonエンジニア育成推進協会によって運営されています。

本記事執筆時点では以下に示す4種類があります。

- [PythonZen & PEP 8 検定試験](https://pythonzen-pep8-exam.jp/)
- [Python 3 エンジニア認定基礎試験](https://www.pythonic-exam.com/exam/basic)
- [Python 3 エンジニア認定実践試験](https://www.pythonic-exam.com/exam/jissen)
- [データ分析試験](https://www.pythonic-exam.com/exam/analyist)

PythonZen & PEP 8 検定試験は、2022年3月1日より**無償**で提供されています。
本試験を受けることで、Pythonのするべきことではないことについて、学ぶことができます。

## Pythonの飛躍
国内におけるPythonの動向は、この数年の間に大きく変化しています。

2019年には、[**基本情報技術者試験**](https://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93)の午後試験で出題するプログラム言語に関して、教育機関・産業分野における利用状況等を踏まえてCOBOLが廃止され、Pythonの追加が発表されました。

また経済産業省が定めている個人のIT関連能力を職種や専門分野ごとに明確化・体系化している[**ITスキル標準**](https://ja.wikipedia.org/wiki/IT%E3%82%B9%E3%82%AD%E3%83%AB%E6%A8%99%E6%BA%96)では、基礎試験、データ分析試験ともに、ソフトウェアディベロップメントの職種で、応用ソフトのレベル1に掲載されています。

- [ITSSのキャリアフレームワークと認定試験・資格とのマップ Ｖｅｒ11r4](https://lpi.or.jp/doc/ISVMapVer11r4.pdf)

このようなPythonの飛躍の背景とは相反的に、前述したPythonZen & PEP 8 検定試験の記事より、以下のような課題が浮き彫りになっていることが分かります。

>Python需要の増加に伴い、Pythonの関連書籍やプログラミングスクールが増える一方、Pythonを知らない人が書いている書籍やPythonZenやPEP 8を知らない講師が、不適切なPython文法を教えてしまうケースが散見されています。

従って正しくPythonを使いこなすためには、基本を疎かにしないことが重要です。

## PythonZen & PEP 8 検定試験
PythonZen & PEP 8 検定試験は、PythonZenとPEP 8から２０問出題され、合格ラインは正答率70％です。

検定試験はオンラインで行うことができます。
冒頭にも記載していますが、本試験は無料で受けることができ、合格すると、合格者番号が記載された証書を受け取ることができます。

検定試験の**目的**は、適切なPython文法を理解することです。
まずは、検定試験の範囲であるPythonZenと、PEP 8について知りましょう。

### PythonZen
**PythonZen**は、Pythonの設計に関する[Benevolent Dictator for Life （以下、BDFL）](https://en.wikipedia.org/wiki/Benevolent_dictator_for_life)の指針となる原則です。

- [PEP 20 – The Zen of Python](https://peps.python.org/pep-0020/)

BDFLの起源については、Python の生みの親である[グイド・ヴァンロッサム](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%82%A4%E3%83%89%E3%83%BB%E3%83%B4%E3%82%A1%E3%83%B3%E3%83%AD%E3%83%83%E3%82%B5%E3%83%A0)氏によって、以下のブログにまとめられています。

- [All Things Pythonic Origin of BDFL by Guido van van Rossum](https://www.artima.com/weblogs/viewpost.jsp?thread=235725)

PythonZenは[Easter egg](https://en.wikipedia.org/wiki/Easter_egg_(media))として含まれています。
Pythonのインタプリタから、`import this`を実行することで、その内容が確認できます。

`$  python3`

- 出力例

```console
Python 3.9.4 (v3.9.4:1f2e3088f3, Apr  4 2021, 12:32:44) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
```

:::note
Zenについては、文字通り仏教用語の[**禅**](https://ja.wikipedia.org/wiki/%E7%A6%85)を指しています。
:::

### PEP 8
**PEP 8**は、Pythonディストリビューションの標準ライブラリを構成するコーディング規約です。

以下原文です。

- [PEP 8 – Style Guide for Python Code](https://peps.python.org/pep-0008/)

:::note
PEPはPython Enhancement Proposalsの略で、番号はインデックスです。
[PEP 0 – Index of Python Enhancement Proposals (PEPs)](https://peps.python.org/pep-0000/#)から、色々なPEPについて確認することができます。
:::

## tool
コードのスタイルチェックで役に立つツールを以下に記載します。

### Python Style Checker

[PythonChecker](https://www.pythonchecker.com/)は、Pythonのスタイルを評価するオンラインのツールです。

文法に関するヒントを提供し、スコアを計算して出力します。

### pycodestyle
[**pycodestyle**](https://pypi.org/project/pycodestyle/)は、コードがPEP8の規則どおりかをチェックするツールです。

以前はpep8と呼ばれていました。
名前が変わった背景は、GitHubのissuesから確認できます。

- [Please rename this tool #466](https://github.com/PyCQA/pycodestyle/issues/466)

pipからインストールするためには、以下のコマンドを実行します。

`$ pip3 install pycodestyle`

```console
Collecting pycodestyle
  Downloading pycodestyle-2.10.0-py2.py3-none-any.whl (41 kB)
     |████████████████████████████████| 41 kB 571 kB/s 
Installing collected packages: pycodestyle
Successfully installed pycodestyle-2.10.0
WARNING: You are using pip version 20.2.3; however, version 22.3.1 is available.
You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9 -m pip install --upgrade pip' command.
```

pycodestyleの使用方法は簡単です。
pycodestyleの引数に、チェックするコードを渡して実行します。

`$ pycodestyle code.py`

:::note
pep8に違反している場合は、該当する行を表示します。
:::

## 禅について
禅の考え方について少し以下に記載します。

禅では[**二元論**](https://ja.wikipedia.org/wiki/%E4%BA%8C%E5%85%83%E8%AB%96)的な考えを踏まえて「これはよい」、「これは悪い」という考え方は、推奨されていません。
悪いという代わりに、「**するべきことではない**」と言うそうです。

従ってよい悪いは問題ではなく、自分自信を平安にできているかどうかが重要です。

禅に興味がある場合は、以下の本がお勧めです。

- [［新訳］禅マインド　ビギナーズ・マインド](https://www.php.co.jp/books/detail.php?isbn=978-4-569-85293-5)

# おわりに
禅は56歳の若さでこの世を去ったアップルの創業者スティーブ・ジョブズにも影響を与えていたと言われています。

Pythonのようなプログラミング言語にも影響を与えていることを考えると、感慨深いものを感じます。

まとめると「するべきことではない」考え方を身に付けることで、コードの保守性を高めることができます。

2023年のスタートは、PythonZen & PEP 8 検定試験から始めてはどうでしょうか。