MS_OmniSharp - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(開発ツール)
Visual Studio Code 開発の中で派生してしまった感。
- Vim で C# が書ける。
- Visual Studio Code に C# 拡張を与える。
補足(「派生してしまった感」の実際): 原文の見立ては
順序が逆である。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 の代表例でもある。
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-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) 参照)
-
OmniSharp
https://github.com/omnisharp -
Vim で C# を書くなら OmniSharp で決まり! - 永遠に未完成
https://thinca.hatenablog.com/entry/20130522/1369234427
- Language Server Protocol
https://learn.microsoft.com/ja-jp/visualstudio/extensibility/language-server-protocol - .NET コンパイラ プラットフォーム SDK(Roslyn)
https://learn.microsoft.com/ja-jp/dotnet/csharp/roslyn-sdk/ - Visual Studio Code での C# 開発
https://learn.microsoft.com/ja-jp/dotnet/core/tutorials/with-visual-studio-code
Tags: 移行, .NET開発, ツール類