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

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

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第43回 Pythonのエラーを減らしたい...リンター(とついでにフォーマッター)を使ってみよう (菱沼佑香) 2023年8月

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

さて引き続き、1章エラーメッセージの読み方を学習していきます。
Pythonでエラーが発生したときに出るトレースバックの基本的な読み方を学んだ後、わからない時の解決策としてネットの検索方法やコミュニティで質問する場合の注意点について学びました。
今回はエラーを予防するリンター(linter)と、文法を整形してくれるフォーマッター(formatter)について学んでみたいと思います。

実行時のエラーを予防するにはlinter使いがおすすめ

さて、エラーを予防するとはいったいどんな状態なのか。まずはテキストから引用します。

--------
P.8 ミスを防ぐ一番の方法は、そもそもミスをしないことです。ソースコードを解析して潜在的なエラーを警告するアプリケーションをリントソフト(Lint software)とかリンター(linters)と言ったりします。リントという言葉は、衣類乾燥機の糸くずフィルターで集めた小さな繊維やごみに由来しています。リントツールはどんなエラーでも検出してくれるわけではありませんが、静的解析(ソースコードを実行しない分析)によって、タイプミスによる一般的なエラーを特定することができます。多くのテキストエディターや統合開発環境(IDE)には、バックグラウンドで動作するリンターが組み込まれていてリアルタイムで問題点を指摘してくれます。

P.9 リンターがなければ、プログラムを実行し、クラッシュするのを見て、トレースバックを読んで、ソースコードの中からタイプミスのある行を見つけなければなりません。また、タイプミスが複数あった場合、このような実行・修正のサイクルでは一度に1つずつしか見つけることができません。リンターを使っていれば、一度に複数のエラーがエディター上で通知されるので、エラーのおこる行を簡単に確認することができます。
--------

ここでMu、PyCharm、Sublime Textという3つのエディターでリンターが作用している画面が紹介されていますが、私はVS Codeを利用中の身なので、VS CodeにFlake8という拡張機能を追加して確認してみます。
(ちなみに私はこれまでずっと、そしていまだにIDLEを愛用してきたのですが、残念ながらIDLEにはリンターがなく、インストールすることもできないそうです。)

VS Code×Flake8ではこんな感じで出ます。

fig01

通常なら実行して、次のようなエラーメッセージが出ます。

fig02

このエラーメッセージを見て初めてnameが定義されていないことに気づくところですが、リンターを利用していると実行する前にnameがプログラムの中に定義されていないことを先ほど挙げた画像のように教えてくれます。

リンターをお使いのエディターで使えるようにする方法は、エディターによって異なりますが、拡張機能(プラグイン)が提供されているのであれば追加をし、拡張機能がない場合にはpipでインストールすることになります。
リンターにはいくつかの種類があるそうなので、検索してみてくださいね。
また、追加した後、設定が必要なケースがあります。お使いの拡張機能名で検索して、設定が必要なようであればどうぞお忘れなく!

ちなみにVS CodeでPythonを利用できるようにするとPylintという拡張機能がデフォルトで追加されるようです。確かに入っていましたが、Flake8をインストールしたので、オフにしました。切り替えはいつでもできるので、二重チェックで切り替えて使っている方もいるようなことを書いているサイトがありました。

Pythonのコーディング規約PEP8に合わせて整形してくれるformatter

ところで、PythonにはPEP8という標準のコーディング規約があります。(PEP8原文
開発現場では複数の方と一緒に開発したり、誰かが作ったものをまた別の人が読み込んだりということがあります。そのため、コーディング規約に沿って書いていけば一貫性を持ったコードになり、可読性や保守性が向上する(=誰が読んでもわかりやすいコードになる)ということで、ルールに沿ったコーディングをすることが進められているんだそうです。書かれている内容は具体的にはスペースやインデントの仕方、括弧の付け方、変数・関数名の付け方などの基本的なものなんだそう。

とはいえ、初心者にとって最初は本やWebにあるものを書いて実行して、自分なりに変更して試すという繰り返しで、覚えることに必死な状態で、コーディング規約の存在は正直後回しです。そして、書籍によってはPEP8が置いてきぼりにされた記述がされていることもあるんだそうで、初心者が気づけるか...というと、実体験からしても正直気づけないと思います。きっといまだに気づいていません。笑

というわけで、プログラムをPEP8に沿った形で整形してくれるツールとしてフォーマッターと呼ばれるものがあり、中でもBlack様が利用されている方が多いそうです。Black様の存在を教えてくださった方はBlack様のことを、「修正に議論の余地がない俺様ツール」だと表現されていました。強制的に修正されて、違う書き方を一切させてくれないそうです。

ということで、リンターも入れたちょうどいい機会なので、Black様をこの機にインストールしました。無事動くものを学習するのに手いっぱいな初心者にとって助かるツールですね。
書籍でももうちょっと先に進んだところで「Blackを使ってコードフォーマットを整える」という章があるので、細かいことはそこで学習したいと思います。

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

参考:
【VS Code】拡張機能でpythonのフォーマッターであるBlack Formatterを使用してフォーマットする
VS CodeでPythonのエラーチェックをするには?
PythonZen & PEP 8 検定試験|Pythonエンジニア育成推進協会

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes