おいしい健康 開発者ブログ

株式会社おいしい健康で働くエンジニア・デザイナーが社内の様子をお伝えします。

Google Colaboratory上でPythonのフォーマットをチェックしよう

こんにちは、おいしい健康アルバイトの成澤です。

おいしい健康には2019年2月に入社して、主に食べリズム*1という調査研究アプリのデータ分析周りを担当しています。いま大学院で数学を勉強していて、研究内容がデータ分析や統計には関係していないのですが、アルバイトのでの実務を通してスキルを磨いています。社員の花井さん(BIgQueryで協調フィルタリングを書いた人)と一緒にデータ分析をやっています。

最近は Google Colaboratory 上で Python を書いていることが多いです。 Google Colaboratoryは分析結果の共有にも便利なので可読性の高いコードを書きたいですよね。

そこで今回はGoogle Colaboratory 上のコードが Python のスタイルガイド PEP8 *2 に準拠しているか、Flake8*3を利用して、フォーマットチェックする方法を書きます。 PEP8に準拠したコードで可読性を高め、分析結果の共有をスムーズにしましょう。

Jupyter Notebook には拡張機能で autopep8 などをすぐに追加し利用することができますが、Google Colaboratory で同じようなことをするのに苦労したのでまとめておきます。

f:id:oishi-kenko:20190705191755p:plain

Flake8を適用する

まず、セル上で以下を実行して、pycodestyle, flake8, pycodestyle_magicをインストールします。

!pip install pycodestyle flake8 pycodestyle_magic

次にpycodestyle_magicでmagic functionを使うために、セル上で次を実行します。

%load_ext pycodestyle_magic

これで準備は終わりです。セルに%%flake8を入れて実行するとフォーマットチェックがかかります。

試しにやってみる

下記のようなコードを実行するとフォーマットエラーが表示されます。

f:id:oishi-kenko:20190705181221p:plain

また、flake8でなくpycodestyleを使うこともできます。

f:id:oishi-kenko:20190705181234p:plain

表示されたフォーマットエラーを修正すればいいわけですが、ここで気をつけたいポイントがあります。

インデントに関するエラーを詳しく見てみることにします。

インデントのスペースと行番号の設定

さて、上のフォーマットチェックで、

3:3: E111 indentation is not a multiple of four

3行目のインデントがスペース4つではない と怒られました。PEP8ではインデントにスペース4つに使用することになっているので、それに違反しているようです。

実は、Google Colabratoryではインデントが初期設定ではスペース2つ になっています。これを変更します。また行番号が表示された方がエラーが読みやすいのでそれも追加しておきます。

ツールバーツール設定からエディタを開きます。そこでインデント幅(スペース)4 に変更します。また行番号を表示するにもチェックを入れます。

f:id:oishi-kenko:20190705161206p:plain

これで自動的でスペース4つで下げられるようになりました。他の部分も言われた通りに直せばフォーマットチェックが通ります。

f:id:oishi-kenko:20190705161900p:plain

参考

Google Colaboratory のフォーマットチェックに関する情報は少ないのですが、以下が参考になりました。

github.com

stackoverflow.com