自動コードスタイルチェックをプロジェクトに導入して成功した経験を共有し、どのレーキが踏まれたか教えてください。 問題を解決するために作成されたオープンソースコミュニティツールを公開する
私たちのプロジェクトについて少し:PHPサイトは2Gbのgitリポジトリにあり、20kのphpファイルで構成されています。プロジェクトは10年目で、現在15人の開発者がいます。 コードのレビューには、 アトラシアンstashを使用します。 すべての開発は別々のブランチ内で実行され、コードレビューを通過した後、マスターに注ぎ込まれ、
そもそも、質問は次のとおりです。 なぜコードスタイルに煩わされるのですか?
答えは私にとって簡単です。コードは一度書かれ、その後何十人もの人々によって読み取られます。 したがって、コードを維持するコストは、書くコストの何倍にもなります。 もしそうなら、それは少し時間を費やして、いくつかの標準に従ってコードをフォーマットする価値があります
最初に出くわしたのは、どの標準を選択するかということです。 彼らはそうしました-独自の標準を作成し、symfonyから継承し、美の概念に従ってそこで変更を加えます。 古いクラスのプロジェクトでは、いくつかのルールを不可能なものとして単純に破棄しました(たとえば、クラスは名前空間内にある必要があります)。 幸いなことに、phpcsは優れたコードスタイルのカスタマイズオプションを提供します。
2番目:コードを確認する理由 これにはどのようなユーティリティがありますか? phpstormにはネイティブサポートがあるため、短い検索の後、phpcsに決めました。
3番目:何を確認しますか? 私たちのプロジェクト全体は巨大であり、10年は多くの世代の開発者によって書かれています。 そこにあるスタイルのエラーは単純に測定されていません。 したがって、開発者がこのタスクの一部として変更した行のみをチェックすることを決定しました
3番目:実際にコードを確認する方法は?
さまざまなオプションがありました
- ご存じのとおり、gitはサーバーフックをサポートしています。 サーバー側でスタイルを確認し、エラーが修正されるまでスタイルを実行しないようにすることができます。 しかし、コンソールでgitを押すのはあまり便利ではないため、このアプローチは好きではありませんでした:)さらに、スタイルのすべてのエラーを修正できない場合は回避策を講じることができません(たとえば、メソッドの名前を変更する必要がある場合) 100500ファイルで使用)
- 考えた後、彼らは理想的なオプションは、開発者が修正しなければならないスタイルで見つかったエラーに関するプルリクエストの登録を解除することであると判断しました。 同時に、最初の段階では、いくつかのエラーを修正しないようにしました。大幅なリファクタリングが必要な場合は、便利な検証ルールを作成しました。 それで、ツールは生まれました-phpcs-stash
ツールのアーキテクチャについて少し:
1)ブランチにプッシュするとき、webhookはphpcs-stashをプルし、プッシュが行われたブランチの名前を渡します
2)phpcs-stashは、このブランチですべてのレビューのためにstash APIを要求し(プル要求)、すべてのファイルを反復処理し(APIを介してstashからもそれらを引き出します)、スタイルをチェックし、エラーが見つかった場所を登録解除します エラーがない場合、レビューを評価します。 ロボットは、変更された行でのみ登録解除します
結果は次のようになります。
3)再プッシュするとき、ロボットはすべてのレビューを再チェックし、修正されたエラーに関するコメントを削除します
写真のファンの場合:

このアプローチでは、まだstashとjiraのネイティブ統合を構成する機会があります(たとえば、コードレビューがロボットによって承認されていない場合、タスクを閉じることを禁止します)。 検証ルールを変更するために、最も頻繁に発生するエラーを分析する絶好の機会があります
検証システムはアトラシアンスタッシュ以外の情報を何も知らないため、オープンソース向けにすることを決定しました。 当初は、PHPに対してのみ行われていましたが、近隣の部署の人たちが気に入っており、C ++コードのチェックをサポートしていました
高速フィードバックのために、phpcsと統合できるphpstormが使用されます。 次のようになります。

次は?
検証者をインタラクティブにするアイデアがあります。ロボットの「修正」コメントに応答できるようにするため、ロボット自体が修正できる場合はエラーを修正します(たとえば、スペースの不足)。 しかし、残念ながら、特定の行のスタイルを修正できるツールは見つかりませんでした。 コミュニティが私に言ったら、私はうれしいです
参照:
- phpcs-stash- https://github.com/WhoTrades/phpcs-stash
- REST API Atlasisan Stash- https: //developer.atlassian.com/stash/docs/latest/reference/rest-api.html