私は1年以内に2人の開発者から10人に成長したチームと協力しています。私は3番で、コーディング標準の問題を最初に提起しました。元の2人の開発者は数年間一緒に働いていましたが、彼らは私には馴染みのない共通の標準を採用していました。あなたが説明している問題とまったく同じ問題がありました。
私たちがしたことは:
研究コーディング標準
私たちは確立されたオープンソースプロジェクトをチェックアウトするのに数日費やしました。チームが急速に拡大することはわかっていたため、一般的なガイドラインではなく、実際のプロジェクトに基づいた実際のソリューションを探していました。また、最適なコーディング標準は気にしませんでしたが、すべてのコードベースのリファクタリングを必要とせず、理にかなっている一連のルールとガイドラインを気にしました。コーディング標準のハックを探していました。
私たち3人は、確立されたPHPプロジェクトに最適なコーディング標準はZend Frameworkが従うものであると判断しました。幸いなことに、Zend Frameworkの人々は非常に包括的なコーディング標準ドキュメントを提供しています。
独自のコーディング標準の作成
もちろん、私たちのプロジェクトに別のプロジェクトのコーディング標準をそのまま適用しても意味がありませんでした。Zend Frameworkドキュメントをテンプレートとして使用します。
- まず、プロジェクトに当てはまらないものをすべて削除しました
- それから、スタイルの問題として認識したすべてのものをスタイルに変更しました
- そして最後にすべてを書き留めました
だから私たちの手元にはかなり大きな文書があり、ファンシーウィキに保存されていました。それはすてきな読み物であり、私たち全員が同意しました。そして、それだけではまったく役に立ちません。
約束を守る
当時のコードベースは約1 * 10 ^ 6 slocでした。正式なコーディング標準を採用したため、コードのリファクタリングを開始する必要がありましたが、その時点で他の問題に追われていました。そのため、コアライブラリ、つまりわずか5 * 10 ^ 3 slocをリファクタリングすることにしました。
私たちのうちの1人をコーディング基準のマスター(マスターの代わりに冒とく的な表現を使用)に割り当て、標準を確認して実施する責任を負いました。数回のスプリントごとに役割をリサイクルします。私は最初であり、ほとんどすべてのコミットを監視する必要があったため、多くの作業でした。
私は在職中に元の文書にいくつかの新しい議論と小さな補遺があり、最終的にはある程度安定した文書ができました。時々変更しますが、これらの変更のほとんどは、PHP 5.3が名前以外のメジャーリリースであるため、言語の新機能に反映されます。
新しい男に対処する
次の新しい男が到着したとき、私たちのコーディング標準をテストする時が来ました。私たちのコードベースを少し紹介した後、私たちは彼にコーディング標準ドキュメントを評価するように頼みました。彼はほとんど泣いた。彼はすべてを違ったやり方でしたように見えた。
私は当時コーディング標準のマスターでしたので、彼の入力を評価し、それに応じてドキュメントを修正するのは私次第でした。彼の提案は:
- 個人的なスタイルの事項(すぐに却下)
- 彼のJavaの背景には意味があるが、PHPにはあまり意味のない標準(却下)
- PHPでの短い経験から持ち込んだ規則(一部は却下されましたが、多くの場合、最初の研究では考えも見つけもされなかった人気のある規則であることが判明しました)
次の数週間、彼は単純なタスクを割り当てられました。コードベースのいくつかの部分を標準に合わせて最新のものにします。いくつかのルールに基づいて、これらのパーツを慎重に選択する必要がありました。
- コードベース(およびPHP全般)に不慣れな人にとっては、コードは比較的簡単でなければなりません。
- コードは、彼がするために雇われたものの上にあるべきです
私は彼のプロセスを監視し、彼は素晴らしい仕事をしました。ドキュメントに適合させることが不可能なコードのいくつかの部分を特定し、それに応じて修正しました(コードおよび/または標準、どちらか適切な方)
そして、別の新しい男が到着しました。このプロセスを繰り返し(今回は別のマスター)、再び機能しました。そしてまた。
結論として
- コーディング標準ドキュメントを作成しますが、自分の標準があなただけのものではなく、プラットフォームのより広いコミュニティの一般的な標準を反映していることを確認してください。
- コーディング標準マスターに同様の役割を割り当てます。少なくとも新しいコード、特に新しいメンバーからの新しいコードを監視する人。非常に退屈なので、役割をリサイクルします。
- 常に新しいメンバーからの入力を評価してください。理にかなっている場合は、常に基準を改訂してください。コーディング標準文書は進化しているはずですが、ゆっくりと進化しています。反復ごとにコードベースをリファクタリングする必要はありません。
- 各新会員があなたの基準と慣習を学び、順応するのにしばらく時間を取ります。これらの状況で最高の仕事をして学んでください。
- Wikiは、そのようなドキュメントに対して驚くほど機能します。
- コードレビューはどんな状況でも驚くほど機能します!
プロセスのある時点で、標準のチェックを自動化するために事前コミットフックを使用することが提案されました。さまざまな理由でこれに反対しました。この問題に関するStackOverflowに関する興味深い議論がいくつかあります。
一部はPHP固有ですが、答えはすべてのプラットフォームに適用されます。