Google Colaboratoryで静的解析とスペルチェックをしたい
背景
通常のpythonの開発では開発時にflake8を使用して静的解析を行ったり、cSpellを使用してスペルチェックを実施している。
同様にGoogle Colaboratoryでの開発時でも静的解析もスペルチェックうようにして、Colab上のコードを実際に製品コードに移行する負担を減らすようにする。
NotebookStaticAnalyzer
サンプルのノートブック
スペルチェックとflake8の警告が出力したイメージ
実装の説明
flake8の説明
Google Colaboratory上でflake8やpycodestyleをチェックするツールは存在する。
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
pyspellchecker
Defining custom magics¶
Creating Magic Functions in IPython - Part 1 〜 3
Discussion