CA1014: Mark assemblies with CLSCompliantAttributeはどんな意味があるか?
(2016/02/13訂正)
(2016/02/25追記)
(2016/03/12追記)
CA1014: Mark assemblies with CLSCompliantAttribute
VS2013などで、Code Analysisを有効にして、Microsoft All Rulesでチェックすると大体必ず出る警告がこれ・・・
「CLS Compliantって何?」
て人も多いと思います。
ざっくり言うと
「.NETはC#だけじゃないから、他の言語でも使用できるかの情報を提供してね」
「共通言語仕様 (Common Language Specification)というのがあるので、出来るだけ準拠すると良いよ」
ってこと。
どうするかというと、
「基本は準拠とマークして、互換性のないものは準拠していないとマークする」
実際には、Microsoft All Rulesの指摘事項の警告に従って、準拠していない部分をどうするかを決めればよい。
「Microsoft All Rulesの指摘事項の警告に従って、アセンブリ/型に準拠のマークを付ける」
「非準拠の型やメンバーは警告が出るので個別にチェックし非準拠のマークを付ける」
「public/protectedメンバーの殆どが非準拠の場合は型全体に非準拠のマークを付ける」
「型の殆どが非準拠の場合はアセンブリに非準拠のマークを付ける」
(2016/02/13修正)
「必要なら非準拠のメンバーの代わりの準拠メンバーを追加する」
(2016/02/25追記)
内容的には、public/protectedのメンバーについてのガイドラインに従っていれば、ほぼ問題ない。
Framework Design Guidelines (英語新版)
Framework デザイン ガイドライン (日本語旧版)
新版/旧版と.NET Coreで内容が違ってる部分があって、ちょっと混乱はしますが・・・
2016/02/13追記:
ガイドラインでは、新版/旧版で変更があって、.NET Frameworkの実装でも命名規則などでぶれていることがあるが、
「public/protectedのスコープでは、.NETのプログラミング作法として守ってください」
ということが書かれている。
Code AnalysisのMicrosoft All Rulesのチェックでほぼ網羅できるので、ガイドラインに関する指摘は直す努力をしたほうがよい。
これは、ローカルルールより、上位にある概念で、.NETで言語間の相互運用の品質を確保するための概念だから、
「Javaと.NETのどちらの作法が優れているか」
という議論は成立するが、
という議論は成立しないと思う。
勿論、
「privateの規定やメソッド内部のコーディングスタイルは別の話」
なので、その辺の自由度はある。
(当然だが、ライブラリやチームの統一作法のレベルでの自由度で個人レベルじゃないので注意)
例外は、相互運用ラッパーなどの命名規則で、
「基本は、public/protectedの部分は元の命名規則をそのまま持ち込む」
- ウィンドウメッセージのWM_PAINT
- Regex
- IntPtr
- Char
(2016/03/12追記&修正)
いずれにしても、組織や、コミュニティで、独自のコーディング規約を持つところも多いと思うが、VSもPro以上でタダでCode Analysisが使えるようになってきたので、これからは差分だけ規約にして運用する方向に変わってくるはず・・・
指摘を消す努力をしてみると、勉強になることも多いから、一度チャレンジすることをお勧めします。