Awesome Roslyn
Roslynを扱う資料や関連プロジェクトをまとめたAwesomeリストです。
目次
- 書籍
- チュートリアル
- オープンソースプロジェクト
- オープンソースのアナライザー、コード修正、リファクタリング
- アナライザー、コード修正、リファクタリングをテストするライブラリとフレームワーク
- ソースジェネレーター
- ブログ記事と解説
- 講演
書籍
Roslynを学び始めるのに適した書籍です。
- Roslyn Succinctly - Alessandro Del Soleによる無料電子書籍。入門に最適で、Roslyn APIを解説した後、アナライザーとリファクタリングの作成に焦点を当てる。
- .NET Development Using the Compiler API - ジェイソン・ボックによる書籍。アナライザとリファクタリングに加え、スクリプティングAPIについても解説し、コンパイラAPIの未来について興味深い考察を提供。
- Roslyn Cookbook - RoslynアナライザーチームのManish Vasaniによる書籍。アナライザー、リファクタリング、スクリプティングを詳しく扱い、新しいC#言語機能の開発やRoslynソースコードへの貢献も深く解説する。
チュートリアル
最初のアナライザー、コード修正、ソースジェネレーターを書くためのオンラインチュートリアルです。
- Learn Roslyn Now - RoslynコンパイラAPIを探究するブログ記事シリーズ。小さな自己完結型の例を通じてRoslynの力を紹介する、入門に最適なチュートリアル :-)
- How To Write a C# Analyzer and Code Fix - Roslynチュートリアルの決定版 :-) 構文解析、意味解析、構文変換を現実的な手順で紹介する。
- C# and Visual Basic - Use Roslyn to Write a Live Code Analyzer for Your API - 古いものの内容は今も有効な、コードアナライザー作成に関する詳細なMSDN記事。
- C# - Adding a Code Fix to Your Roslyn Analyzer - 前記事の続編。コードフィックスについての詳細な導入。
- Introducing C# Source Generators - C# 9.0 ソースジェネレータ機能の元々の発表。ソースジェネレータとは何か、どのようなシナリオで役立つか、そして簡単なソースジェネレータを書く方法を説明。
- New C# Source Generator Samples - CSVファイルや Mustache テンプレートなどの追加の非コードファイルを基にした、非自明なコードジェネレータの作成方法のサンプル。
- C# Source Generators - 追加の学習資料、サンプル、実験用および実用ソースジェネレーターの包括的な一覧。基礎を理解した後の優れた参考資料。
オープンソースプロジェクト
Roslyn上に構築されたオープンソースプロジェクトです。
- Bridge - C#からJavaScriptへのトランスパイラ。現代的なモバイルおよびウェブアプリをC#で書くことができ、JavaScriptでどこでも実行可能。
- Code Converter - C#からVB.NETへ、またVB.NETからC#へ変換するトランスパイラー。
- CodeAnalysis.CSharp.PatternMatching - Roslyn構文木向けの直感的なパターンマッチング。C#の構文解析と意味解析を簡素化する。
- CodeGeneration.Roslyn - 設計時サポートを備え、ビルド中にRoslynベースのコード生成を行う。
- dotnet-script - .NET CLIからC#スクリプトを実行し、NuGetパッケージをインラインで定義し、VS Codeで編集・デバッグできる。
- FlubuCore - C#によるプロジェクトのビルドとデプロイスクリプトの実行に用いられる、クロスプラットフォームのビルド自動化ツール
- MirrorSharp - オンラインのC#、VB.NET、F#コードエディター。コード補完、メソッドシグネチャヘルプ、クイックフィックス、診断機能を備える。
- OmniSharp - 好みのエディターでクロスプラットフォームの.NET開発を可能にするオープンソースプロジェクト群。
- roslyn-linq-rewrite - LINQ表現の構文木をプロシージャルコードで再構成した上でC#コードをコンパイルする。これによりパフォーマンスが向上し、ヒープ割り当てや動的ディスパッチが最小限に抑えられる
- RoslynPad - クロスプラットフォームのC#エディター。コード補完、メソッドシグネチャヘルプ、クイックフィックス、診断機能を備える。
- RoslynQuoter - 指定されたC#プログラムに対して、そのプログラムの構文木API呼び出しを生成するオンラインツール
- scriptcs - C#を強力なスクリプトツールに変える。C#REPL、NuGetパッケージのインストール、1行のコードでスクリプトの実行をサポート
- Scripty - Roslynを活用したC#スクリプトによるコード生成ツール。T4テンプレートのスクリプト版と考えられる
- Sharpen - 既存コードベースに、新しいC#言語機能を知的に導入するVisual Studio拡張機能
- SharpLab - .NETコードプレイグラウンド。コードコンパイルの中間ステップと結果を表示。コンパイラが見ているコードの表示を提供し、Roslynの異なるブランチやバージョンを選択可能。ブラウザ上でC#、VB.NET、F#コードを実行可能
- Testura.Code - C#コードの生成、保存、コンパイルに用いるRoslynAPIをラップしたツール。クラス、メソッド、文、式の生成に必要なメソッドとヘルパーを提供
- Uno SourceGenerator - ビルド中のプロジェクトに基づき、そのプロジェクトの構文および意味モデル情報を用いてC#ソースコードを生成するツール
オープンソースのアナライザー、コード修正、リファクタリング
オープンソースのアナライザー、コード修正、リファクタリングです。
- .NET Analyzers - Roslynアナライザ開発に用いられるGitHub組織。組織内のリポジトリはASP.NET Core、WPF、IDisposable、System.Reflectionの使用など、さまざまなアナライザをカバー
- .NET Compiler Platform (“Roslyn”) Analyzers - Roslynチームが開発した診断アナライザ。静的解析APIの設計および実装を補強するために最初に開発された。コード品質、.NET Core、デスクトップ.NETフレームワーク、コード内のコメントなど、さまざまな分野をカバー
- Code Cracker - C#およびVB.NET向けのアナライザライブラリ。パフォーマンス、コーディングスタイルなど多くのカテゴリでの診断を提供する、またいくつかの基本的なリファクタリングも提供
- CSharpGuidelinesAnalyzer - C#コーディングガイドライン( https://csharpcodingguidelines.com/ )に対する診断を報告する。
- ErrorProne.NET - C#プログラムの正確性とパフォーマンスに焦点を当てたアナライザとコード修正のセット。GoogleのError Proneを参考にした。
- Mapping Generator - 任意に複雑なオブジェクト間マッピングを生成するコード修正。マッピングが使われる多数の場面を標準で認識する。AutoMapperに代わる設計時ツール。
- Nullable.Extended - nullable reference typesを使用したコーディング時の経験を向上させるRoslynツールとアナライザ。
- Refactoring Essentials for Visual Studio - C#およびVB.NET向けのリファクタリング、アナライザ、コード修正。
- Roslyn Clr Heap Allocation Analyzer - C#のヒープ割り当てアナライザ。ボックス化、クロージャー、暗黙のデリゲート作成など、明示的および多くの暗黙的な割り当てを検出できる。
- Roslynator - C#向けの190以上のアナライザと190以上のリファクタリングのコレクション。コーディングスタイル、コードの読みやすさと簡略化、冗長性の削除、コンパイラエラーの修正など、多くの項目をカバー。
- SonarC# - SonarQubeプラットフォームへの拡張として使用されるC#言語用の静的コードアナライザ。
- StyleCop Analyzers for the .NET Compiler Platform - StyleCopルールのRoslynへの移植。
- VSDiagnostics - asyncメソッドの使用、フラグ付きenum、例外処理におけるベストプラクティスなど、多くのコード品質チェックをカバーするコード品質アナライザのコレクション。
アナライザー、コード修正、リファクタリングをテストするライブラリとフレームワーク
アナライザー、コード修正、リファクタリングをテストするためのライブラリとフレームワークです。
- Microsoft.CodeAnalysis.Testing - NUnit、xUnitおよびMSTestフレームワークでアナライザおよびコード修正をテストするためのライブラリ。Roslyn SDKの一部。
- RoslynTestKit - アナライザ、コード修正、リファクタリング、完了プロバイダーのためのユニットテストを書くための軽量フレームワーク。ユニットテストフレームワークに依存しない。
ソースジェネレーター
ソースジェネレーター、および内部でソースジェネレーターを利用するオープンソースプロジェクトです(.NET 5.0とC# 9.0がまだプレビュー段階のため、現時点では大半が実験的です)。
- DpDtInject - 依存関係解決ロジックの大部分をコンパイル段階へ移す依存性注入コンテナの概念実証。コンパイル時の安全性を高め、高速な実行時解決を提供。
- Generator.Equals - クラスとレコードの等価性およびハッシュ処理を自動実装する。複数の比較戦略をサポートし、IL weavingベースのEquals.Fodyと同様の機能を提供。
- JsonSrcGen - リフレクションなしJSONシリアライザ。コンパイル時にリフレクションなしシリアライザを生成することで、極めて高速なJSON処理を可能にする。
- Source Generator Playground - オンラインアプリケーションで、ソースジェネレーターを実験できます。学習やアイデアのテストに最適です。自作のソースジェネレーターを作成したり、組み込み例から学んだりし、生成された出力を確認できます。
- StrongInject - コンパイル時依存性注入コンテナ。コンパイル時チェックおよび反射・実行時コード生成なしで、高速かつ app-trimming-フレンドリーです。
- StructPacker - C# struct型向けの低レベルで軽量かつパフォーマンスに焦点を当てたシリアライザ。自動的にC#のシリアライズコードを生成し、実行時パフォーマンスと効率を最適化します。
- Svg to C# Source Generators - SVGをC#にコンパイルするコンパイラ。SVGの描画マーカーを SkiaSharp でレンダリングするエンジンを使用してC#にコンパイルします。
- WrapperValueObject - 型にラッパーを自動生成するツール。特に strongly typed wrappers around primitive types を作成する際に便利です。
ブログ記事と解説
パフォーマンス、Roslynの歴史、内部実装などを扱うブログ記事とオンライン解説です。
- How Microsoft rewrote its C# compiler in C# and made it open source - Mads Torgersen(C#の設計責任者)によるRoslynの物語。Roslynプロジェクトがなぜ始まり、そしてオープンソース化されたのかという、励まされるストーリーです。
- Inside the .NET Compiler Platform – Performance Considerations during Syntax Analysis (#SpeakRoslyn) - Roslynのパフォーマンスに関する詳細な分析、特にメモリ消費量に焦点を当てています。
- Persistence, Facades and Roslyn’s Red-Green Trees - Roslynチームが、不変で再利用可能なツリーを実装し、親参照を安価に提供するなど、多くの素晴らしい機能を実現した方法についての、励まされる紹介。引用:“しかし、Roslynチームでは、不可能なことを日常的にしています” :-)
- ReSharper and Roslyn: Q&A - ReSharperがRoslynを使用しない理由についての優れた説明。静的コード分析とRoslynの制限についての良好なディスカッションを含みます。
- Roslyn performance (Matt Gertz) - Roslynチームがパフォーマンス評価および実現にどう取り組んでいるかに関する洞察を提供します。
講演
Roslynに関する公開講演です。
- The Power of Roslyn - Kasey Uhlenhuthが2018年のNDC Osloで行った講演。Roslynの基本とコード分析器・修正ツールのAPIについての説明を含みます。
コントリビューション
コントリビューションを歓迎します :-) 目標は、コミュニティ主導で分類されたRoslynリソース集を構築することです。コントリビューションの前に、コントリビューションガイドラインを確認してください。
ライセンス
法律で認められる範囲で、Igor Rončevićは本作品に関するすべての著作権および関連する権利を放棄しています。