MS_OmniSharp - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

OmniSharp

概要

Visual Studio Code 開発の中で派生してしまった感。

補足(「派生してしまった感」の実際): 原文の見立ては
順序が逆である。OmniSharp の方が先である。

【時系列】
  2011~  OmniSharp が【Vim 向け】に始まる(コミュニティ発)★
           → 「Visual Studio がない環境でも C# を書きたい」
  2015    Visual Studio Code 登場
           → C# 拡張の【言語サービスとして OmniSharp を採用】
  その後  Microsoft が omnisharp-roslyn の開発に深く関与
  2023    VS Code の C# 拡張が【Roslyn ベースの新実装】へ移行 ★
           → OmniSharp は既定から外れた

**つまり「VS Code から派生した」のではなく、
「先にあった OmniSharp を VS Code が採用し、
のちに自前実装に置き換えた」**という経緯である。

原文が「派生してしまった感」と書いたのは、
VS Code の登場後に OmniSharp の知名度が急上昇したため
と読める
(実際、それ以前はニッチな存在だった)。

詳細

  • 選択した OS や Editor に関係なく、
  • 優れたプログラミングエクスペリエンスを提供できる
  • エコシステムを作成する以下のプロダクトのセット。

補足(これが LSP という発想である): 「OS や Editor に関係なく」
という設計目標は、現在 LSP(Language Server Protocol)として
業界標準になった考え方
である。

【LSP 以前】
   エディタ × 言語 の【組み合わせの数だけ】実装が要る

     VS Code × C#、VS Code × Python、VS Code × Go …
     Vim     × C#、Vim     × Python、Vim     × Go …
     Emacs   × C#、…
       → 【M × N 問題】★

【LSP 以後】
   言語ごとに【1 つのサーバ】を作り、
   エディタごとに【1 つのクライアント】を作る

     言語サーバ(C#、Python、Go …)
           ↕ LSP(JSON-RPC)
     エディタ(VS Code、Vim、Emacs …)
       → 【M + N】で済む

OmniSharp はこの発想を LSP 標準化より前に実践していた
(omnisharp-vim、omnisharp-emacs、omnisharp-atom が並ぶのはそのため)。
LSP は 2016 年に Microsoft / Red Hat / Codenvy が公開し、
その後 OmniSharp も LSP に対応した。

通信は JSON-RPCであり、
プロセス間通信 で触れた
標準入出力による IPC の代表例でもある。

ライブラリ

omnisharp-roslyn

language-client

csharp-language-server-protocol

C# の Language Server Protocol(Visual Studio Code

補足(Roslyn が土台である): omnisharp-roslyn の名の通り、
**中核は Roslyn(.NET コンパイラ プラットフォーム)**である。

【Roslyn が提供するもの】
   ・構文解析(構文木)
   ・意味解析(型情報、シンボル解決)
   ・診断(エラー・警告・アナライザー)
   ・コード修正(Code Fix)、リファクタリング

 → 【コンパイラがこれらを API として公開している】★
 → だから IDE を作れる(コンパイラと IDE で解析結果がずれない)
【構成】
   Roslyn(解析エンジン)
     ↑ 利用
   omnisharp-roslyn(言語サーバ)
     ↕ LSP / 独自プロトコル
   エディタ側のクライアント(omnisharp-vscode / -vim / -emacs …)

.NET のコンパイラ
「コンパイラをサービスとして公開する(Compiler as a Service)」
設計になっていることが、この生態系を可能にしている

エディター統合

omnisharp-vim

omnisharp-emacs

omnisharp-atom

移行メモ(各統合の現況):

統合 現況
omnisharp-vscode 名前は残るが、中身は Roslyn LSP に置換(2023~)★
omnisharp-vim 現役。Vim / Neovim で C# を書くなら今も有力
omnisharp-emacs 現役
omnisharp-atom Atom 自体が終了(2022)したため終了
【VS Code の C# 拡張の変遷】★ 本ページで最も重要な変化

  ~v1.x   OmniSharp(omnisharp-roslyn)が言語サービス
  v2.0~   【Roslyn ベースの新しい言語サーバ】が既定に
             ・Visual Studio 本体と同じ実装基盤
             ・起動が速く、大規模ソリューションで安定
             ・"omnisharp" 設定は互換のため残るが、既定では使われない

  → 現在の VS Code での C# 開発は
    【OmniSharp を経由していない】ことが多い

とはいえ OmniSharp が不要になったわけではない

【今も OmniSharp が使われる場面】
   ・Vim / Neovim / Emacs での C# 開発 ★
   ・VS Code 以外のエディタ
   ・OSS ライセンスで完結させたい場合
      → VS Code の新しい C# 拡張や C# Dev Kit は
        ライセンス条件に注意が要る
        ([Visual Studio CodeによるSPA開発](MS_VSCodeSPADevelopment) 参照)

参考

Microsoft Learn


Tags: 移行, .NET開発, ツール類

⚠️ **GitHub.com Fallback** ⚠️