プログラミング C# - 翔ソフトウェア (Sho's)

C#/.NET/ソフトウェア開発など

Build 2014 でオープンソースになったと発表された Roslyn のソースコードを弄ってみた

BUILD

Build 2014 での Roslyn 関連の発表

先日、マイクロソフトの開発者会議 BUILD 2014 (4月2–4日、米国サンフランシスコ) で Roslyn がオープンソースとして公開されたことが発表された。

BUILD 2014 での Roslyn の発表に関連した記事/サイト

※ その他の BUILD 2014 に関する記事は、 「[Event] BUILD 2014 からの情報」を参照のこと。

Roslyn とは

Roslyn は、C#Visual Basicコンパイラーを再実装し、内部の コード分析などの API 等を公開したものだ。

Roslyn に関しては、以前、次にあげる記事で扱った。参考にしてほしい。

Roslyn Preview のインストール

今回は、公開された Roslyn を触ってみたい。

Taking a tour of Roslyn - C# Frequently Asked Questions - MSDN Blogs」にやり方が書いてある。

先ずは、Roslyn Preview のインストールからだ。

Roslyn の Preview Site に行き、Roslyn Preview をダウンロードする。マイクロソフト アカウントが必要だ (持っていない場合は新規登録すれば OK)。

ダウンロードした Roslyn SDK Preview.zip の中にある次のファイルをインストールする。

  • Roslyn End User Preview.vsix
  • Roslyn SDK Project Templates.vsix
  • Roslyn Syntax Visualizer.vsix

もし Visual Studio 2013 SDK がインストールされていない場合はこちらも必要だ。 ちなみに Visual Studio Express Edition にはインストールできない。 Professional Edition 以上が必要だ。

これらをインストールして Visual Studio を起動する。 すると、「ファイル」 - 「新規作成」 - 「プロジェクト」を開くと、「テンプレート」 - 「Visual C#」の下に「Roslyn」が増えていて、「Console Application」、「Code Refactoring」、「Diagnostic with Code Fix」が選択できるようになっている。 「Visual Basic」の下も同様だ。

Roslyn のプロジェクト テンプレート
Roslyn のプロジェクト テンプレート

Roslyn による診断機能やリファクタリング機能を作成することができるようになっている。

これらについては、後日別の記事で試そうと思う。 「The Future of C# | Build 2014 | Channel 9」でそれらの作成手順を確認することができる。

Roslyn のソースコードのダウンロード

次に Roslyn のソースコードをダウンロードしてみよう。

オープンソースとなった Roslyn のソースコードは、「.NET Compiler Platform ("Roslyn") - CodePlex」からダウンロードすることができる。

  1. このサイトの Source Code のページへ行く。
  2. "Clone" を選び URL をコピーする。

  3. Visual Studio の「チーム エクスプローラー」を開く。
  4. 「チーム プロジェクトへの接続」を選ぶ。
  5. 「ローカル Git リポジトリ」の「複製」を選ぶ。
  6. 上のテキスト ボックスに、上でコピーした URL を入力し、上のテキスト ボックスにローカル マシン上のソースコードの格納場所 (例えば C:\Source\Roslyn) を入力し、「複製」ボタンを押す。

これで、ローカル マシンの指定した場所に Roslyn のソースコードがダウンロードされる。

では、この中から Roslyn.sln を Visual Studio で開いてみよう。

ソリューション 'Roslyn' - ソリューション エクスプローラ

沢山のソースコードが確認できる。

Roslyn のソースコードのビルド

この儘 Visual Studio でビルドしてみよう。 ビルドが完了すると、Binaries というフォルダーの下に rcsc.exe (C# コンパイラー) や rvbc.exe (Visual Basic コンパイラー) などが作られる。

rcsc.exe (C# コンパイラー) を試してみよう。

今回は、"Hello world!" を表示する次のような C# のファイル hello.cs を (C:\Source\Roslyn\Test に) 作成した。

class Program
{
     static void Main()
     {
          System.Console.WriteLine("Hello world!");
     }
}

コマンドラインで、これをコンパイルしてみる。

C:\Source\Roslyn\Test>"C:\Source\Roslyn\Binaries\Debug\rcsc.exe" hello.cs
Microsoft (R) Visual C# Compiler version 0.7.0.0
Copyright (C) Microsoft Corporation. All rights reserved.

無事ビルドされ、hello.exe が作られる。

実行してみよう。

C:\Source\Roslyn\Test>hello
Hello world!

Hello world! と表示された。

Roslyn のソースコードを弄ってみる

折角ソースコードがあるので、「Taking a tour of Roslyn」を真似て、試しに Roslyn のソースコードを少し弄ってみることにする。

例えば、キーワード "class" の代わりに "クラス" を使うようにしてみよう。

変更するのは、C:\Source\Roslyn\Src\Compilers\CSharp\Source\Syntax\SyntaxKindFacts.cs だ。

このファイル中の "class" を "クラス" に文字列置換する。

    case "class":

    case "クラス":

に変更。

    return "class";

    return "クラス";

に変更。

次に、文字列リテラルで使われるダブル クォーテーションの代わりに鉤括弧 「」 も使えるようにしてみよう。

変更するのは、C:\Source\Roslyn\Src\Compilers\CSharp\Source\Parser\Lexer.cs だ。

            character = TextWindow.PeekChar();
            switch (character)
            {
                case '\"':
                case '\'':

            character = TextWindow.PeekChar();
            switch (character)
            {
                case '\"':
                case '\'':
                case '「':

に変更。

        private bool ScanStringLiteral(ref TokenInfo info, bool allowEscapes = true)
        {
            var quoteCharacter = TextWindow.PeekChar();
            if (quoteCharacter == '\'' || quoteCharacter == '"')
            {

        private bool ScanStringLiteral(ref TokenInfo info, bool allowEscapes = true)
        {
            var quoteCharacter = TextWindow.PeekChar();
            if (quoteCharacter == '\'' || quoteCharacter == '"' || quoteCharacter == '「')
            {

に変更。

                    else if (ch == quoteCharacter)
                    {
                        TextWindow.AdvanceChar();
                        break;
                    }

                    else if (ch == quoteCharacter || (ch == '」' && quoteCharacter == '「'))
                    {
                        TextWindow.AdvanceChar();
                        break;
                    }

に変更。

変更した Roslyn をビルドして使ってみよう。

今回用意するのは、次のような hello.cs だ。 "class" を"クラス"にし、ダブル クオーテーションを鉤括弧にした。

クラス プログラム
{
    static void Main()
    {
        System.Console.WriteLine(「こんにちは。ロズリン。」);
    }
}

新しい rcsc.exe でビルドする。

C:\Source\Roslyn\Test>"C:\Source\Roslyn\Binaries\Debug\rcsc.exe" hello.cs
Microsoft (R) Visual C# Compiler version 0.7.0.0
Copyright (C) Microsoft Corporation. All rights reserved.

無事ビルドされ、hello.exe が作られる。

実行してみよう。

C:\Source\Roslyn\Test>hello
こんにちは。ロズリン。

うまくいったようだ。

まとめ

今回は、オープンソースとなった Roslyn を弄ってみた。 次回は、新しい Roslyn Preview を使ってコードの診断やリファクタリングの機能を作ってみたい。