いいえ、そうではありません。2つの理由からです。
速度
コミットは高速でなければなりません。たとえば、500ミリ秒かかるコミットは遅すぎるため、開発者はより慎重にコミットする必要があります。Hello Worldよりも大きなプロジェクトでは、数十または数百のテストがあるため、事前コミット中に実行するには時間がかかりすぎます。
もちろん、分散アーキテクチャで数分間、または単一のマシンで数週間または数か月実行される数千のテストがある大規模プロジェクトでは、事態はさらに悪化します。
最悪の部分は、より速くするためにできることはあまりないということです。たとえば、100のユニットテストがある小規模なPythonプロジェクトは、平均的なサーバーで実行するのに少なくとも1秒かかりますが、多くの場合それよりはるかに長くなります。C#アプリケーションの場合、コンパイル時間のため、平均で4〜5秒かかります。
その時点から、より良いサーバーに余分な1万ドルを支払うことで時間を短縮できますが、それほど多くはしないか、複数のサーバーでテストを実行します。
数千のテスト(機能テスト、システムテスト、および統合テスト)がある場合は両方とも十分に効果があり、数週間ではなく数分でテストを実行できますが、これは小規模プロジェクトには役立ちません。
代わりに、できることは:
開発者がコミットする前に、ローカルで変更したコードに強く関連するテストを実行することを奨励します。おそらく数千の単体テストを実行することはできませんが、5〜10を実行できます。
関連するテストを見つけて実行することが実際に簡単(かつ高速)であることを確認してください。たとえば、Visual Studioは、最後の実行以降に行われた変更によって影響を受ける可能性のあるテストを検出できます。他のIDE /プラットフォーム/言語/フレームワークにも同様の機能があります。
コミットを可能な限り高速に保ちます。スタイルルールを適用することは問題ありません。多くの場合、スタイルルールを実行する唯一の場所であり、このようなチェックは驚くほど高速だからです。静的解析は、高速のままであればすぐに実行できますが、これはめったにありません。単体テストの実行は問題ありません。
Continuous Integrationサーバーで単体テストを実行します。
開発者がビルドを破ったとき(またはユニットテストが失敗したとき、開発者に自動的に通知されることを確認します。これは、コンパイラをコードに持ち込む可能性のある間違いの一部をチェックするツールと見なす場合、事実上同じです)。
たとえば、Webページにアクセスして最後のビルドを確認することは解決策ではありません。それらは自動的に通知される必要があります。ポップアップの表示またはSMSの送信は、ポップアップの通知方法の2つの例です。
開発者は、ビルドを壊す(または回帰テストに失敗する)ことは良くないこと、そしてそれが起きたらすぐに修正することが最優先事項であることを理解してください。上司が明日出荷するように求めた優先度の高い機能に取り組んでいるかどうかは関係ありません。ビルドに失敗したので、修正する必要があります。
セキュリティ
リポジトリをホストするサーバーは、特にセキュリティ上の理由から、単体テストなどのカスタムコードを実行しないでください。これらの理由は、GitLabの同じサーバー上のCIランナーで既に説明されていますか?
一方、ビルドサーバーでpre-commitフックからプロセスを起動することを考えている場合は、コミットがさらに遅くなります。