Build 2014 での Roslyn 関連の発表
先日、マイクロソフトの開発者会議 BUILD 2014 (4月2–4日、米国サンフランシスコ) で Roslyn がオープンソースとして公開されたことが発表された。
BUILD 2014 での Roslyn の発表に関連した記事/サイト
- [Video] The Future of C# | Build 2014 | Channel 9
- [速報]米マイクロソフト、C#/Visual Basic次世代コンパイラ「Roslyn」をオープンソースで公開。独自言語など開発可能に。Build 2014 - Publickey
- 次のC#、VB実装も先取りする24のOSSプロジェクト:マイクロソフト、「Roslyn」のオープンソース化を発表 - @IT
- C#コンパイラがオープンソースとして公開される - InfoQ
Roslyn. - .NET Compiler Platform ("Roslyn") - CodePlex
Open-source C# and VB compilers with rich code analysis APIs. - Taking a tour of Roslyn - C# Frequently Asked Questions - MSDN Blogs
※ その他の BUILD 2014 に関する記事は、 「[Event] BUILD 2014 からの情報」を参照のこと。
Roslyn とは
Roslyn は、C# や Visual Basic のコンパイラーを再実装し、内部の コード分析などの API 等を公開したものだ。
Roslyn に関しては、以前、次にあげる記事で扱った。参考にしてほしい。
- [C#][Roslyn] Roslyn による Visual Studio のアドイン
- [C#][.NET][Roslyn] メタプログラミング入門 - Roslyn による Add メソッドの動的生成
- [C#][.NET] メタプログラミング入門 - メソッド呼び出しのパフォーマンスの比較
- [C#][.NET][Roslyn] メタプログラミング入門 - 応用編 - オブジェクトの文字列変換のメタプログラミング (Roslyn 編)
- [C#][.NET][Roslyn] メタプログラミング入門 - Roslyn による C# ソースコードの解析と変更
- [C#][.NET][Roslyn][式木] Room metro #23 大阪「メタプログラミング C#」の資料公開
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 による診断機能やリファクタリング機能を作成することができるようになっている。
これらについては、後日別の記事で試そうと思う。 「The Future of C# | Build 2014 | Channel 9」でそれらの作成手順を確認することができる。
Roslyn のソースコードのダウンロード
次に Roslyn のソースコードをダウンロードしてみよう。
オープンソースとなった Roslyn のソースコードは、「.NET Compiler Platform ("Roslyn") - CodePlex」からダウンロードすることができる。
- このサイトの Source Code のページへ行く。
- "Clone" を選び URL をコピーする。
- Visual Studio の「チーム エクスプローラー」を開く。
- 「チーム プロジェクトへの接続」を選ぶ。
- 「ローカル Git リポジトリ」の「複製」を選ぶ。
- 上のテキスト ボックスに、上でコピーした URL を入力し、上のテキスト ボックスにローカル マシン上のソースコードの格納場所 (例えば C:\Source\Roslyn) を入力し、「複製」ボタンを押す。
これで、ローカル マシンの指定した場所に Roslyn のソースコードがダウンロードされる。
では、この中から Roslyn.sln を Visual Studio で開いてみよう。
沢山のソースコードが確認できる。
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 を使ってコードの診断やリファクタリングの機能を作ってみたい。