pre-commitその他はじめにlinter&formatterの導入を解説した記事はかなりたくさんネット上にあって非常に助かるのだが、いずれもシンプルか自分のニーズにずれている部分があるため自分で書くこととした。この手の話は、IDEを使えばいいじゃん、で片付きそうであるがチームで共通化させようとするとエディタの好みは様々であるし、そもそもエディタの設定を共通化すること自体が結構難しいと思う。いうわけで、現在も一定のニーズはあると思っているので、今後誰かの役に立てれば幸いである。複数言語をすべてgit-hookで連携するのはしんどい業務で使用しているプロジェクトは多くの場合、UIとバックエンドが混在したリポジトリだったりで、単一言語で構成されるものは少ないのではないかと思う。その場合ひとつのツールでgit-hookを連携したくなるもので、今回はPython製のpre-commitを使用することでそれが解決できたのその備忘録として残しておく。git-hook連携ツール:pre-commitを使用するpre-commitはしっかりしたドキュメントが以下にある。pre-commit.comこのツールの良いところは、複数言語対応しているところで、公式ページには以下の言語が紹介されていた。condadockerdocker_imagefailgolangnodepythonpython_venvrubyrustswiftpcrepygrepscriptsystem実は上記以外にも連携させる裏技があるようで、例えばScalaなんかもできそうだったのだが、今回はうまく行かなかったので、後日チャレンジとしたい。pre-commit設定ファイルルートディレクトリに.pre-commit-config.yamlを作成する。例としてpre-commit自身が使用している設定を見ると次のようになっている。check-useless-excludes見るとなんとなくわかると思うが、repoでgithubのレポジトリURLを指定している。これでpre-commitがrevで指定したバージョンを初めて実行するときにinstallしてくれる。ちなみに、すべてのhookは以下にまとまっているので探すのは簡単である。install単純な実行pre-commitはgit-hookとして以外にも、各ツールのラッパーCLIを持っているので、簡単に実行が可能。--all-files汎用的なチェック冒頭の例でも記載したが、pre-commit-hooksリポジトリには汎用的なcheker(formatter)が用意されており、かなり便利だったので今回使用したものを記載しておく。秘密鍵が紛れ込んでいないかチェック個人的に機密情報のチェッカーはかなりありがたかった。どこまで検知してくれるのかはまだわかっていない(AWSはセットしているプロファイルからだけ?)ので過信は禁物だが、ちゃんと検知してくれるならかなりありがたいチェックだ。各言語の方針Python調べたところ、Pythonの静的解析ツールは非常に沢山あってよくわからん。今回は以下を参考にさせていただき、次のツールを使うこととした。blog.hirokiky.orgformatterblackisortlinterflake8ちなみにisortに関しては、pythonファイル内で、sys.path.append(..)みたいにスクリプト内でPYTHONPATHを調整していると順序を書き換えられてうまく動かなる。そもそもスクリプト内での調整自体が推奨されていないとのことなので、この際に別の手を考えたい。各ツールの設定ファイルを作成pre-commitへのhook設置hook設置は冒頭で説明したとおり、基本の構成でよい。一点注意があるとすれば、今回はblackとisortの設定ファイルをpyproject.tomlで管理するのだが、isortに関しては引数(additional_dependencies...intall時の引数となるもの)にtomlを指定してやる必要がある。trueここでの注意は3点ある。tool.*は意味のある書き方.flake8のmax-line-lengthはpyproject.tomlのline-lengthと合わせる。flake8とblackはいくつか競合する項目がある。ignoreのとおり無視する必要がある。詳細はblackのgithubを見ると記載があるので参考にされたい。prettierで対応した。各ツールの設定ファイルを作成で進めていく。先程も説明したとおり、additional_dependenciesがinstallする際のオプションのような役割となる。eslintのプラグインも同様に当該ディレクティブへリストで記載する。--fixを実行したのと同じ結果が得られる。あと、eslintに関してはverboseをtureにしたほうが良い。これによりwarnが表示されるようになる。個人的にはいくつかerrorとしたくないルールもあるので、その時々でwarnを見ながら意図したもの確認するようにした。設定自体は色々なたたき台がネット上に用意されているが、今回はNode.jsとして使用する初めての経験だったので記載しておく。}}終わりに今回はこれらをイチから作成したが、正直かなりめんどくさかった。今後はcookiecutterのテンプレートを自作して、それに取り込むとか考えたい。後はScalafmtとの連携についても後日調査したいと思う。ヶ月)2019年1月から都内でプログラマとして働いています。新しい技術が大好きで、興味の赴くままに色々試しています。業務はPythonメインにバックエンド開発を行っています。自然言語処理の仕事も始める予定です。Ansible、(AWS)サーバレス、統計解析(ML,DL),ARを触ったりしています。(2)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。