JetBrainsのクロスプラットフォーム対応.NET IDE「Rider」誕生までの歴史とそのアーキテクチャ

こんにちは。JetBrains堀岡です。 「最近JetBrainsは.NET関連ツールに注力してないのでは?JetBrains Night Tokyoでもセッション無いし。」というご意見を頂きました。そんなことありません。実際のところJetBrainsの.NET系製品群はIntelliJ IDEAに次ぐ代表製品で、日本でも多くのお客様にご利用いただいております。つい先日、弊社Developer Adovocate(@cwoodruff、@maartenballiauw)によるRiderに関する英文記事がCODE Magazineで公開されました。せっかくなのでCODE Magazine 様から了承を頂き、英文記事の抄訳を作成しました。Riderをお使いのお客様や、これから使ってみたいと考えているお客様にRiderの設計思想やメリット、JetBrainsの.NET製品への継続的な取り組みをご理解頂くために参考にして頂ければ幸いです(ただし、かなりの長文です)。英語の原文で読みたい方は以下をご覧ください。 “This article originally appeared in CODE Magazine – Nov/Dec 2018: https://www.codemag.com/Article/1811091/Building-a-.NET-IDE-with-JetBrains-Rider” JetBrains Riderについて JetBrains Riderは.NET/Mono/.NET Core環境、およびASP.NET、ASP.NET Core、Xamarin、WPFなどのフレームワークを使用するテクノロジをサポートするクロスプラットフォーム(Windows, Linux, macOS)対応IDEです。Riderは、C#、VB.NET、F#、JavaScript、TypeScriptなどの多くの言語に対応しており、コンソールアプリケーション、ライブラリ、Unityゲーム、Xamarinモバイルアプリケーション、ASP.NET MVCの構築、及び、Angular/React/Vue.jsなどを用いたWebアプリケーション作成をサポートしています。 Riderには、.NET開発者にとって日々のコーディングを快適にし、品質の高いコードを書くために役立つ多くの機能があります。例えば、Riderは他のJetBrains IDEと同レベルの優れたコード補完、コード生成、リファクタリング、ナビゲーション、2,300を超えるコード検査(静的コード解析)機能を備えています。これらのコーディング支援機能に加えて、.NET開発者がIDEの基本機能として期待するような、デバッガ、単体テスト実行、(高速な)NuGetクライアント、データベースツール、WPF XAMLプレビューウィンドウ、バージョンコントロールシステムとの連携機能も備えています。さらに、Dockerとの連携やUnity Editorのような最新のテクノロジーにも対応しています。しかしながら、特筆すべきことは、これらの豊富な機能が全て備わっていても、Riderはメモリ効率が良く、高速で機敏に動作するということです。 Rider誕生までの歴史 Riderの技術とアーキテクチャの話に入る前に、その歴史について触れなければなりません。 2004年、JetBrainsはVisual StudioアドインReSharperのスタンドアロンアプリケーション版の作成を検討していました。 結果としてリリースされることはありませんでしたが完全に機能するプロトタイプが既に存在していました。 以下の図1がReSharper 2.0 IDE UIのスナップショットです。ソリューションエクスプローラ、エディタ、使用箇所の表示、コード補完、リファクタリング機能は既に実装されていました。 ユーザーインターフェイスはモダンではありませんが、エディタ上でドキュメンテーションをインラインで装飾表示するための機能は.NET WinFormsをベースに実現されており、WPF(Windows Presentation Foundation)が存在しなかった当時としては革新的な取り組みでした。 図1: ReSharper 2.0 IDE UI その後スタンドアロン版ReSharperプロジェクトは一旦中止となってしまいましたが、そこで開発された要素技術(アクションシステム、テキストコントロール実装、ツールウィンドウおよびツールバーコントロール、単体テストランナー、ReSharperコマンドラインツール)は、その後のReSharperの進化とRiderの誕生に応用され、決して無駄になることはありませんでした。 ReSharper 2.0 IDEにおいて1つの重要なデザイン上の決定は、ReSharperのコア機能と(エディタとしての)IDE機能をデザイン上分離しておくということでした。この決定はその後のReSharperの開発の効率化(Visual … Continue reading JetBrainsのクロスプラットフォーム対応.NET IDE「Rider」誕生までの歴史とそのアーキテクチャ