Open9

VSCodeとRiderの違い

なぴぃなぴぃ

Unity開発でVSCodeを使ってたんですが、Riderを試してみたので気づいた事を残していこうと思います。

なぴぃなぴぃ

第一印象としてRiderはセットアップが簡単でした。VSCodeでいい感じのUnity開発環境を作るには拡張機能をいろいろ入れたり設定をいじったりする必要がありますが、RiderはインストールしたらすぐUnity作業を開始できる状態でした。

そして一番印象的だったのがヒントや警告がとにかく沢山出る事。
VSCode+拡張でも問題のあるところは表示されますが、圧倒的に細かいところまで指摘してくれます。
書き方に統一性がないとことかUnity独自の懸念点、誤字等も指摘してくれる。
何も設定しない状態だと「そこはそれでいいのに」みたいな指摘もされるんですが、右クリックメニューから警告レベルや用語辞書を簡単に設定変更できるので使ってるうちにほんとにほしい警告だけ出してくれるようになります。

プロジェクトからコーディングルールを推測したりもできるので、他の人が書いたコードに合わせて書くみたいな事もしやすそうです。

なぴぃなぴぃ

そしてフォーマッタがやっぱり優秀。長い行を自動でインデント入れて改行してくれるしインデントも=の位置に合わせてくれたりしてすごくきれいになる。文法だけじゃなく並び順等も揃えてくれる。範囲を細かく設定して複数ファイル一気に書き換えられるのもいいです。

VSCodeのフォーマットではそこまでやってくれないと思ってたけど、設定変更や拡張でできたりするんだろうか?

なぴぃなぴぃ

拡張機能で近い事はできそうだけどコマンドを使ったらソリューション全体にかかってしまって外部アセットもGitに変更履歴出て大変な事に。制御が難しそうなのでRiderでエディター機能に統合されててコントロールしやすいのはメリットかも。

なぴぃなぴぃ

ファイル毎のフォーマットの場合CSharpierがいいかもしれない。プロパティとコンストラクターの順序とかは変わらないけど、改行スタイルが厳密に揃って多くのケースでは読みやすそうです。

なぴぃなぴぃ

Rider

public void FillVoxels(Vector3Int pos1, Vector3Int pos2, VoxelIdentifier voxel)
{
    (int minX, int maxX, int minY, int maxY, int minZ, int maxZ) = GetMinMaxVoxelPositions(pos1, pos2);

    for (int x = minX; x <= maxX; x++)
    {
        for (int y = minY; y <= maxY; y++)
        {
            for (int z = minZ; z <= maxZ; z++)
            {
                VoxelArray[x - offsetX + (y - offsetY) * LengthX + (z - offsetZ) * LengthX * LengthY] = voxel;
            }
        }
    }
}

CSharpier

public void FillVoxels(Vector3Int pos1, Vector3Int pos2, VoxelIdentifier voxel)
{
    (int minX, int maxX, int minY, int maxY, int minZ, int maxZ) = GetMinMaxVoxelPositions(
        pos1,
        pos2
    );

    for (int x = minX; x <= maxX; x++)
    {
        for (int y = minY; y <= maxY; y++)
        {
            for (int z = minZ; z <= maxZ; z++)
            {
                VoxelArray[
                    x
                        - offsetX
                        + (y - offsetY) * LengthX
                        + (z - offsetZ) * LengthX * LengthY
                ] = voxel;
            }
        }
    }
}

かけ算のまとまりで改行してくれて何をやってるかわかりやすくなってる。
ただ、項目数や行数に応じてなんでもかんでも展開しちゃうので「このケースは展開しなくてもよかったのにな」というケースがなくもないですが。揃えるという点ではありかも。
CSharpierはRiderのプラグインもあったのでいろんな環境で統一できてよさそうです。

なぴぃなぴぃ

CSharpierはRiderのクリーンナップ機能みたいに範囲してして一気にかける方法は見当たりませんでした。CSharpierのような改行の設定についてはRiderには見当たらなかった(気づいてないだけかもですが)のでこれを使うにはファイル毎にやる必要があるかも?

Riderのクリーンナップは柔軟に設定を変えられるけどCSharpierは揃える事を目的としててオプションはあまり提供してないらしい。

CSharpier → クリーンナップ と クリーンナップ→CSharpier はほぼ同じ結果に。
強制する部分が違うだけで方向性は同じみたい。

なぴぃなぴぃ

Riderはコード改行時の挙動がいい感じでした。波括弧を展開したい時に一か所改行入れると一発で全体展開してくれる。VSCodeの場合波括弧の中身と閉じ括弧で2回改行してからショートカットキーで手動フォーマットかけてました。

なぴぃなぴぃ

Riderのクラス摘出機能がよすぎる!今までなかなかに億劫だったリファクタリングがサクサクできそうです。VSCodeのいいところとRiderのいいところそれぞれあって五分五分で、好み的にはVSCode寄りだったんですが、これだけでひっくり返ってしまったかもしれない。