IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第70回 Pythonを使う上での大事な作法 PythonicとThe Zen of Python (菱沼佑香) 2025年12月

こんにちは、吉政創成 菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。

今回から6章「パイソニックなコードを書こう」に入ります。

Pythonらしいシンプルで読みやすいコードを書くために

Pythonを学ぶようになると、Pythonic(パイソニック)やThe Zen of Pythonという言葉を見かける機会が出てきます。

The Zen of Pythonとは

まず、The Zen of PythonはPythonを使う際の哲学といえるもので、Pythonを美しく、シンプルに書くための心得がまとめられたものです。文書としてはPEP20がこれに該当します。このThe Zen of pythonはPythonの生みの親であるGuido氏と共に1990年代からPythonのコア開発者として長年活動してきたTim Peters氏が書いたポエムです。ちなみに「Zen」は日本の「禅」に由来しているそうです。
ここにはPythonの設計における基本的な考え方や、Pythonプログラマが持っておいて欲しい心構えがまとめられています。ところどころジョーク交じりらしいですが。
項目としては20個あるとされていますが、実際には19個で、20個目をGuido氏に書いてもらうつもりで空けておいたのに、結局空けたまま未完で終わってしまっている、というジョークでも知られているんだとか。(ジョークとかユーモアって難しいなぁ...。)

Pythonicとは

一方でPythonicは、このThe Zen of Pythonの哲学に沿って、「Pythonらしい」シンプルで読みやすいコードを書こうとする考え方を指します。特定の人が定義したものではなく、Guido氏やTim氏の思想をもとに、コミュニティの中で自然と広まった言葉であるため、文書としてまとまった定義があるわけではないようです。つまり、Pythonicなコードを書くには、「言葉で学ぶのではない、良いコードを見て感じとれ」と...いうのが基本なようです。
ちなみに、PythonのWikipedidaにはPythonicについて次のような言葉が書かれています。
"他の言語で一般的な考え方で書かれたコードではなく、Python の特に一般的なイディオムに従った考え方やコード片。"
https://ja.wikipedia.org/wiki/Zen_of_Python
ここでPythonicなコードとそうでないコード(unpythonic)が比較できるよう掲載されています。

PEP8の役割

ところで、初学者からすると、PythonicやThe Zen of Pythonという言葉より先に知るのではないかと思うのがPEP8です。このコラムでも何度か出てきていると思います。PEP8はPythonicな考え方を、具体的なルールとして示した公式のコーディング規約で、インデントや命名規則などを通じてPythonコードの可読性を保つ手助けをするものになっています。

The Zen of Pythonの原文を読んでみよう。

The Zen of Pythonは[import this]を実行すると全文が表示されます。

---------------------------------------------------------------
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!

---------------------------------------------------------------

The Zen of Pythonの各項目について確認していきます。

The Zen of Pythonを読んでみよう

書籍では上記の原文はなく、翻訳されたもののみが紹介されています。ここでは「原文(書籍の翻訳文)」という形で引用して書いておきます。(引用P.92~95)
なお、書籍にはそれぞれに解説文が入っていますが引用せず、補足程度の短い文を書いてみます。

  1. Beautiful is better than ugly. (醜いコードよりも美しいコードを。)
    ただ動けばいいというのではなく、読みやすく、整然とした構造・名前・スタイルを目指そう。
  2. Explicit is better than implicit. (暗示よりも明示を。)
    何をしているかよくわからないコードより、何をしているかわかるコードの方が良い。
  3. Simple is better than complex. (単純は複雑より良し。)
    できるだけシンプルに書いてね。
  4. Complex is better than complicated.  (複雑は難解より良し。)
    解決するのに難しい技術が必要なら仕方ないけど、わざとややこしくするのはやめてね。
  5. Flat is better than nested. (ネストは浅く。)
    ifやforの多重ネスト(入れ子)を避けて階層を浅くすることで、見通しを良くしよう。
  6. Sparse is better than dense. (適度な隙間を。)
    コードにスペース(空行・インデント・改行)を使って、ぎゅうぎゅう詰めにせず読みやすくしよう。
  7. Readability counts. (読みやすさは善。)
    書いた後にコードが読まれることを想定して、他人でも理解できるように書こう。
  8. Special cases aren’t special enough to break the rules. (特殊な状況は特例の理由にならない。)
    例外処理は最小限にしてルールを守って書いた方が保守性は高くなる
  9. Although practicality beats purity. (しかし実用性は純粋さに勝る。)
    とはいえ、完璧(可読性の高さ)を優先して使いにくくなるくらいなら臨機応変に。
  10. Errors should never pass silently. (エラーは決して見過ごしてはならない。)
    エラー(例外)があったらもみ消すのではなく、検知できるようにしよう。
  11. Unless explicitly silenced. (意図的に隠されていない限りは。)
    とはいえ、エラー(例外)を無視する明確な理由があるなら構わない。
  12. In the face of ambiguity, refuse the temptation to guess. (曖昧な部分に出くわしても、推測で片づけてはならない。)
    曖昧な入力や状況があったら適当に判断すると危ないので、はっきりさせよう。
  13. There should be one-- and preferably only one --obvious way to do it. (誰が見てもわかる書き方は必ずあるはず。それが唯一なら尚良し。)
    誰が見ても明快で統一されたやり方が良いと思う。
  14. Although that way may not be obvious at first unless you’re Dutch. (オランダ人でないとわからないかもしれないけどね。)
    でも一部の人にとっては明快かもしれないけど、他の人にとってはそうではないかも。
    (Guido氏がオランダ人であることを元にしたジョーク。)
  15. Now is better than never. (何もないより、何かある方がマシだ。)
    ちょうどいいタイミングを待てるより、先にやってしまえ。
  16. Although never is often better than *right* now. (しかし、慌てて何かをするより何もしない方がマシな場合は多い。)
    でも実のところ焦って今やらない方が良いものも中にはある。
  17. If the implementation is hard to explain, it’s a bad idea. (実装の説明が難しいのは悪いアイデア。)
    人に説明できないものは、自分でも理解できてないので見直してみよう。
  18. If the implementation is easy to explain, it may be a good idea. (実装の説明が簡単なら良いアイデアかもしれない。)
    説明できるなら良い設計だと思う。
  19. Namespaces are one honking great idea -- let’s do more of those! (名前空間は素晴らしい。積極的に使うべし。)
    名前空間:変数や関数、クラスなどにつけられた名前が衝突しないように整理するための仕組み。

コードを使った具体例などが知りたい方は、以下のページで丁寧に説明されていました。詳しく知りたい方は以下のページをどうぞ。
プログラマが持つべき心構え (The Zen of Python)

それでは今回はこちらで終了です。
今回もお付き合いいただきありがとうございました。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes