[Roslyn]とりあえず使ってみる | 妄想プログラマのらくがき帳

2014年6月22日日曜日

[Roslyn]とりあえず使ってみる

最初の発表からずいぶん目立った動きの無かったRoslynですが、最近になって動きが活発になってきました。なので、そんな流れに合わせて少しの間Roslynネタで記事を書こうと思います。

Roslynとは?

コンパイルの過程やコンパイラが持っている情報をAPIとして提供するコンパイラプラットフォームです。Roslynを使えば、C#のソースコードをパースしたり、メソッドや変数やの情報を取得できたりします。

つい最近公開されたVisualStudio14 CTPでRoslynが使用されていることからも、今後Roslynが.NETの中核になっていくのではないかと思います。要注目ですね!

※ちなみにRoslynはオープンソースとしてCodePlexで公開されています。

最近のMicrosoftはオープンで良いですねd(*´∀`*)

使ってみよう

早速Roslynを使ってみましょう。まずはNuGetでRoslynのパッケージをインストールします。VisualStudioのメニューから[プロジェクト]‐[NuGet パッケージの管理]を選択すると下記のダイアログが開きます。


左側の項目で「オンライン」を選択し、
1. 上部のコンボボックスで「リリース前のパッケージを含める」を選択
2. 右上にある検索ボックスに「Microsoft.CodeAnalysis」を入力
とすると、一番上に「Microsoft.CodeAnalysis」が出てくるので、これをインストールします。

インストールが終わった後にプロジェクトの参照設定を見ると、Microsoft.CodeAnalysis関係の項目が追加されています。

これでRoslynを使う準備は完了です。

C#のソースコードをパースしてみる

準備が出来たら実際にソースコードをパースしてみましょう。以下のコードがソースコードをパースするコードです(...と言ってもパースしてるのはMainの中の1行だけですけど(^_^;))。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// usingは以下の2つを追加
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;

namespace RoslynSample
{
    class Program
    {
        // パース対象のコード
        private static string m_sourceCode =
@"using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RoslynSample
{
    class Program
    {
        /// 
        /// エントリポイントです。
        /// 
        /// コマンドライン引数        static void Main(string[] args)
        {
            System.Console.WriteLine(""Hello Roslyn!"");
        }
    }
}";
        static void Main(string[] args)
        {
            // ParseText()にパース対象のコードを渡せば、コードの構文木を作成できる。
            // コードをファイルで指定する場合はParseFile()を使用する。
            SyntaxTree tree = CSharpSyntaxTree.ParseText(m_sourceCode);
        }
    }
}

パースしたいソースコードをCSharpSyntaxTree.ParseText()に渡すだけです。
ParseText()の戻り値のSyntaxTreeは、ソースコードの構文を表した木構造になっていて、SyntaxTreeのノードであるSyntaxNodeにメソッドや変数の情報が格納されています。

次回はこのSyntaxTreeの中身を探ってみます。

0 件のコメント:

コメントを投稿