Pythonの生産性が高いと言われる6つの理由と生産性を下げる1つの要因

Python Python

「Pythonは生産性が高い」、そう言われるのを聞いたことはないですか?
実際、Pythonの生産性は高いと思います。
でも今時の言語なら、IDEやフレームワークの発達もあり、どれも大して違わないのでは…と思うかもしれません。
がしかし、Pythonには生産性を高める「こだわり」が随所にあるのです。
この記事では、現役Pythonエンジニアの筆者が、Pythonの生産性の高さ、Pythonの「こだわり」について解説します。

コード補完

これはPythonに限ったことではないですが、エディタを使ってコーディングしていると、変数名や関数名の頭文字を入れただけで、もしくは.を入れただけでコードの候補が表示されます。

筆者はVisual Studio CodeにPython拡張機能をインストールしており、Pythonのコードはそれを使って書きます。
importするときにimportできるモジュールを表示してくれたり、前述のとおり関数名や変数名を表示してくれるので、単語を丸々タイピングすることはほぼありません。定義のときくらいです。
もっとも、タイピングはしない方がいいのです。スペルミスのもとです。候補の中からタブキーで選んだ方が、ミスしなくて済みます。
筆者はVS Codeを使うようになってから、テスト時にスペルミスで実行が止まることが激減しました。

テストのやりやすさ(結合度の低さ)

どんなに大きなシステムであっても、Pythonのプログラムは1ファイル内で完結します。
そのファイルをどのようなレベルに取り出しても、呼び出す側と呼び出される側をモックで書くだけで、そのファイルのテストはできます。
また、必ずそのディレクトリ内に納めなければならない、というものでもありません。例えばDjangoのコードにしても、Djangoプロジェクト内から取り出してそのようにしてテストすることは可能です。
これはコードがファイルごとに独立していて、コード間の結合度が低いPythonならではのテスト方法です。
テストが極めてやりやすい言語だと言えるでしょう。もちろん、自動テストライブラリもあります。

可読性の高さ

Pythonは直感的な変数名や関数名を付けることが勧められています。
この勧めには従いましょう。自分しか読まないコードというのは原則的に存在しません。誰もが見て分かりやすく、それがコードを書く際の意識するべきポイントです。

また、インデントで処理のまとまりを識別することも可読性の高さにつながっています。どこからどこまでがifやforのスコープ内か、ということが一目瞭然です。インデントの強制があるのでPythonが嫌いだ、というエンジニアもいますが、強制されなくてもインデントはするべきなのですから、言語仕様としてインデントが組み込まれていることは理解に苦しむものでもありません。
ともかくも、このインデントのおかげでPythonのコードは読みやすくなっているのです。

モジュール化

Pythonのクラスの作り方(書き方)や関数の作り方(書き方)は無理がありません。まあ、クラスについては、メソッドの第一引数はselfと決まっていますが、それさえ了承すれば、特に何の手続きもなくクラスが作れます。継承も簡単です。
Pythonはモジュール化が容易な言語と言えるでしょう。
オブジェクト指向を自然な形で実現できます。オブジェクト指向で作った方が何かといいのは今更言うことでもありません。
関数から複数の値を返す場合でも、ただ変数を並べるだけです。分かりやすいと言えるのではないでしょうか。

ライブラリの豊富さ

Pythonには豊富なライブラリがあります。
AI開発、科学技術計算、Webシステム開発、スクレイピング、デスクトップアプリ、…ないライブラリがないといっても過言ではありません。
そのときの開発用途に合ったライブラリが必ずあります。
筆者はWebシステム開発にクレジットカード決済を組み込んだことがありますが、Stripeというライブラリを使ったら実装はごくわずかでした。面倒なことは全てStripeが肩代わりしてくれました。
煩雑なことに煩わされず、アプリロジックのみに集中できる環境がPythonには整備されています。

特にデータ分析で力を発揮する

Pythonは汎用言語ですが、特に生産性が高くなるのはデータ分析です。
言語仕様上、Pythonは大量のデータの扱いが得意です。簡単な記述でデータを処理することができます。
スクレイピングの結果をまとめて、分析してログに残す際などに威力を発揮します。
そもそもスクレイピング自体簡単にできるのですが、ログへの出力が更に簡単です。
計算処理も、Scipyなどがあるので直感的な書き方で高度な計算ができます。
Pythonの威力を極限まで確かめたいなら、データ分析をやってみると分かりますよ。

生産性を下げる要因:構成力がない場合

反対に、Pythonを使っていても生産性が上がらない場合があります。
それは、エンジニアに全体の構成力がない場合です。

なんとなく書いて動く、そんな構造をPythonはしていません。
モジュール化しようにも、そもそもモジュール化の方法を知らなければ、コピペで同じコードがあちこちにあるシステムの出来上がりです。
これを後からモジュール化しようと思うと大変です。インデントもめちゃくちゃ、どこからどこまでがまとまった処理なのか見通せないでは、書くことより手直しの方に莫大な時間を取られます。そう、インデントは統一しなければならないので、ブロックの中全てまとめてインデントを追加したり削除したり、結構大変なのです。

Pythonのコードを書く際には、書く前に全体の構成をある程度がっちり固めましょう。
そうしないと、余計な時間がかかってしまいます。

まとめ

この記事では、筆者が感じているPythonの「こだわり」を解説してきました。

20年前と比べると、コーディングやテストの環境は整いました。あの頃3日をかけて開発していたシステムが、フレームワークのおかげもあり3時間でできる、ということもざらです。
では、その分エンジニアの労働はきつくなっているのでしょうか?
筆者の実感では、エンジニアの労働は楽になった、と思います。
気を付けていなければならないポイントをツールやフレームワークが代替してくれることが大変多くなったからです。特にPythonではその傾向が顕著です。
筆者の労働時間はcで書いていたころに比べると大幅に減っています。筆者も年齢を重ね、若いころほど生産性はなくなっているはずですが、しかしより以上のものをより以下の時間で作れているのです。
これからのエンジニアのみなさんは、与えられたものを上手に活用していきましょう。