12
Microsoft Source Analysis for C# ご紹介 ご講演者名:尾崎 義尚 VSUG Leaders Summit 2008

Microsoft Source Analysisのご紹介

Embed Size (px)

DESCRIPTION

VSUG Leaders Summit 2008 で使用したスライドです。 Microsoft Source Analysis for C# でカスタムルールを作る方法について解説しています。

Citation preview

Page 1: Microsoft Source Analysisのご紹介

Microsoft Source

Analysis for C#

ご紹介

ご講演者名:尾崎 義尚

VSUG Leaders Summit 2008

Page 2: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

Source Analysis for C# とは

• 乱立する C# の記述方法を解決するために開発– C++スタイルやハンガリアンを撃墜

• MS 社内のベストプラクティスをもとに200のルールを提供

• コメント、ドキュメントなどわかりやすさを重視

• 社内標準ツールではないが、広く使われている– あえてスルーするーチームもある

– すでにバージョン 4.2• つまり、社内で長く使われてきた

• 静的コード分析 (FxCop) が IL を解析するのに対して、ソース コードを解析

Page 3: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

チェック内容

• エレメント、ステートメント、式、クエリ構文のレイアウト

• {}、()、[] などの配置

• キーワード、演算子のスペース

• 行のスペース

• メソッド パラメータの定義、メソッドの呼び出し位置

• クラス エレメントの標準オーダー

• エレメントヘッダとファイルヘッダのドキュメント書式

• エレメント、フィールド、変数の名前

• 組み込み方を使用しているか

などなど

Page 4: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

カスタム ルールを作るには (1/3)

1. クラス ライブラリ プロジェクトを作成

2. ライブラリの参照を追加– Microsoft.SourceAnalysis

– Microsoft.SourceAnalysis.Csharp

3. ルールをチェックするクラスを作成する– SourceAnalyzer クラスを継承

– [SourceAnalyzer(typeof(CsParser))] 属性を設定

4. ルールを説明する XML を作成する– 「埋め込まれたリソース」として設定

Page 5: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

[SourceAnalyzer(typeof(CsParser))]

public class OmCustomRule1 : SourceAnalyzer

{

public override void AnalyzeDocument(CodeDocument document)

{

Param.RequireNotNull(document, "document");

CsDocument csDocument = (CsDocument)document;

foreach(CsElement element in csDocument.RootElement)

{

// エラーの場合、

AddViolation(element, "OmCustomRule1", new object[0]);

}

}

}

カスタムルールを作るには (2/3)

Page 6: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

カスタムルールを作るには (3/3)

<?xml version="1.0" encoding="utf-8" ?>

<SourceAnalyzer Name="Custom Rules">

<Description>カスタムルールです。</Description>

<Rules>

<RuleGroup Name="Custom Rules Group">

<Rule Name="OmCustomRule1" CheckId="OM0001">

<Context>カスタムルールです。</Context>

<Description>カスタムルールの解説です。</Description>

</Rule>

</RuleGroup>

</Rules>

</SourceAnalyzer>

Page 7: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

オブジェクト モデル

Document

(CsDocument)

Element

(CsElement)

Element

(CsElement)

Element

(CsElement)

namespace Aaa.Bbbb

public class Cccc

using System;

using System.Data

・・・

Page 8: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

ElementType

• Accessor

• Class

• Constructor

• ConstructorInitializer

• Delegate

• Destructor

• EmptyElement

• Enum

• EnumItem

• Event

• ExternAliasDirective

• Field

• File

• Indexer

• Interface

• Method

• Namespace

• Property

• Root

• Struct

• UsingDirective

Page 9: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

ルールをデバッグするには (1/2)

ビルド後にアセンブリをコピーするように設定

xcopy "$(TargetDir)Souce*.*" "C:¥Program

Files¥Microsoft Source Analysis Tool for C#" /y

Page 10: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

ルールをデバッグするには (2/2)

デバッグで Visual Studio とソリューションを開くように構成

C:¥Program Files¥Microsoft Visual Studio 8¥

Common7¥IDE¥devenv.exe

"C:¥Users¥yoshihisa.ozaki¥Documents¥Visual Studio

2005¥Projects¥ClassLibrary4¥ClassLibrary4.sln"

Page 11: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

結局使える?

• カスタマイズとルールを選択することで使える部分もある

– ドキュメントがないので、作るのが大変

• 使えない部分

– コメント、ドキュメント系が英語を前提に作られている

–プロジェクトごとに設定できない

– TableAdapter などのデザイナのコードもチェックしてしまう

Page 12: Microsoft Source Analysisのご紹介

VSUG Leaders Summit 2008

Resources

• ダウンロード

https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis

• Blog

http://blogs.msdn.com/sourceanalysis/