【Rider】SourceGeneratorをデバッグする方法

# SourceGeneratorのデバッグ
昨今流行りのSourceGeneratorを作るとき、
毎回Unityにもって行って適切な生成ができているのか確認するのはさすがに大変です。

今回は、Rider上でブレークポイントを設置し、デバッグできるように、
SourceGeneratorを初期設定する方法をまとめてみました！

::: note
Visual Studioをご利用の方には
neuecc様のありがたい記事がありますので、こちらをどうぞ！

https://neue.cc/2022/12/16_IncrementalSourceGenerator.html

:::


# Solutionを作る

なにはともあれ、まずはSolutionを作成しましょう！
SDK:6.0
言語:C#
Framework:netstandard2.0
で作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/e978a35f-af71-2a77-1145-38055e295893.png)

### csprojファイルの変更

Explorerの表示をFileSystem表示に切り替えて、Solution名.csproj ファイルを開きましょう。
以下を参考に、不足部分を追記してください！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/23127cf8-fb71-38cd-e99f-73176d0cab8d.png)


```
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
        <!--ココカラ-->
        <IncludeBuildOutput>false</IncludeBuildOutput>
        <DevelopmentDependency>true</DevelopmentDependency>
        <IsRoslynComponent>true</IsRoslynComponent>
        <!--ココマデ追記-->
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.1.0" />
    </ItemGroup>


</Project>
```


# デバッグ用のプロジェクトを設定する
SourceGeneratorは、他のプロジェクト上で動作し、コードの自動生成を行う技術です。
ですので、デバッグするために、別のプロジェクトを作成しておく必要があります！

### Projectを追加する

Solution上で右クリックし、Add>New Project しましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/9bd5c141-86bb-8354-bb69-6508cf6270c7.png)

今回はProject名をSandBoxにしておきます。
その他の設定は先程と同じでOKです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/5c147930-b6be-8923-142b-74b8b9ff6807.png)


### csprojを編集

新しく作った SandBox.csproj を編集しましょう！

**ProjectReference Includeには、SourceGeneratorのcsprojのアドレスを指定してください。**


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/e6ba7a8b-b9c2-61b3-728f-b8a960a653b5.png)

```
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <!--ココカラ-->
    <ItemGroup>
        <ProjectReference Include="../IncrementalSourceGeneratorSample/IncrementalSourceGeneratorSample.csproj"
                          OutputItemType="Analyzer"
                          ReferenceOutputAssembly="false" />
    </ItemGroup>
    <!--ココマデ追記-->
</Project>
```


# launchSettingsを作る
**SourceGenerator側のProject**に Properties というフォルダを作ってください。
その中に launchSettings.jsonという名前のjsonファイルを作成してください。
jsonファイルの中身に以下の内容をコピペしてください。

**targetProject の中身は先程のSandBox.csprojのアドレスにしておきます。**

```json
{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "Generators": {
      "commandName": "DebugRoslynComponent",
      "targetProject": "../SandBox/SandBox.csproj"
    }
  }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/71a74f79-d357-b815-b910-e70324ce63c8.png)

# デバッグしてみよう！
ここまでやると、launchSettings.jsonの左側に再生マーク(▷)が表示されるはずです。
二番目のDebugメニューを選択すると、デバッグが走ります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/f6afd887-a51e-8e75-1ea9-59db1b705065.png)

当然ながら、ブレークポイントを設置していないと止まりません。
SourceGenerator側のコードにブレークポイントを設置しておいてください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955766/031513c2-9ac2-fb67-ef18-9989a7ca8e6b.png)

以上です！デバッグで快適なSourceGenerateライフを送ってください！！

# 謝辞

デバッグ方法の調査に当たってはneuecc様の記事、及びRider公式の記事を参考にさせていただきました。
この場を借りてお礼申し上げます。

https://neue.cc/2022/12/16_IncrementalSourceGenerator.html

https://blog.jetbrains.com/dotnet/2023/07/13/debug-source-generators-in-jetbrains-rider/