✔️

Google Colaboratoryで静的解析とスペルチェックをしたい

2023/12/16に公開

背景

通常のpythonの開発では開発時にflake8を使用して静的解析を行ったり、cSpellを使用してスペルチェックを実施している。

同様にGoogle Colaboratoryでの開発時でも静的解析もスペルチェックうようにして、Colab上のコードを実際に製品コードに移行する負担を減らすようにする。

NotebookStaticAnalyzer
https://github.com/mima3/NotebookStaticAnalyzer

サンプルのノートブック
https://github.com/mima3/NotebookStaticAnalyzer/blob/main/colab/NotebookStaticAnalyzerTest.ipynb

スペルチェックとflake8の警告が出力したイメージ

実装の説明

flake8の説明

Google Colaboratory上でflake8やpycodestyleをチェックするツールは存在する。

pycodestyle_magic
https://github.com/mattijn/pycodestyle_magic

このツールはIPythonのセルマジックとラインマジックをカスタマイズしてflake8やpycodestyleによる静的解析を実現している。

しかしながら最新のGoogle Colaboratory上では正常にはflake8が動作しなかった。
この原因としてはpycodestyle_magicではflake8.apiを使用してflake8を使用しているが、この挙動が2023/12時点のColabでは安定して動作しない。

事実、ドキュメントにも安定したAPIではないような記載が存在する。

Flake8 3.0.0 presently does not have a public, stable Python API.

When it does it will be located in flake8.api and that will be documented here.
https://flake8.pycqa.org/en/latest/user/python-api.html

そのため、今回はAPIを使用せずに、別プロセスとしてflake8を起動して、その結果をjson形式で取得するように変更した

スペルチェックの説明

スペルチェックについてはpyspellchecker を使用した。
Colab上で使う都合、pythonで動作して、かつミススペルとして検出された内容を無視できる機能があるため、当該ライブラリを採用した。

以下の機能を追加するため、pyspellchekcerをラップして使用している

  • 無視する単語の一覧をファイルから指定できるようにする
  • 配列ではなくテキストを指定して単語チェックを行う
  • 特定のファイルを指定して単語のチェックを行えるようにする

まとめ

今回はIPythonのセルマジックとラインマジックをカスタマイズを使用してColab上での静的解析やスペルチェックを可能として品質の改善を試みた。
ColabだけでなくIPythonを使用している Jupyter Notebookでも利用できると考えられる。

参考

pycodestyle_magic
https://github.com/mattijn/pycodestyle_magic

pyspellchecker
https://pypi.org/project/pyspellchecker/

Defining custom magics¶
https://ipython.readthedocs.io/en/stable/config/custommagics.html

Creating Magic Functions in IPython - Part 1 〜 3
https://switowski.com/blog/creating-magic-functions-part1/
https://switowski.com/blog/creating-magic-functions-part2/
https://switowski.com/blog/creating-magic-functions-part3/

Discussion