C と C++ の開発シーンを大きく変える CLion Nova
CLion の「レガシー」エンジンではなく ReSharper C++/Rider C++ の言語エンジンを採用した CLion の無料早期プレビューがリリースされました。 プレビュービルドは専用の Toolbox App フィードから入手できます。 CLion Nova は収集されたフィードバックの結果に応じて 2024 年のどこかで CLion にマージされる予定です。 それまではプレビュービルドを無料でご利用いただけます。また、通常の CLion(Classic)インストールと共存してインストールできます。
これまでの背景
JetBrains の最初の C++ エンジンは iOS と macOS の開発者向け IDE である AppCode 用に設計されていました。 IntelliJ プラットフォームの一部であり、当初は Java で記述されていましたが、後に Kotlin でも記述されるようになりました。 このエンジンのアプローチとアーキテクチャは IntelliJ ベース IDE の多数の言語に対応できますが、この設計は特に C++ 言語には最適でないことが判明しました。
より迅速に C++ の進化に適応し、エンジンと IDE のプロセスを分離するため、clangd ベースエンジンが後に CLion に追加されました。 clangd のカスタムブランチで構築されたこのエンジンはあらゆる警告とエラーを検出してエディターに表示し、クイックフィックスを提案するほか、ハイライト、補完、特定のナビゲーションアクションも実行します。 データフロー解析や MISRA チェックなどにも使用されています。 一方、CLion の「レガシー」エンジンはリファクタリングといった他のコードインサイト機能を担っています。 詳細な「担当リスト」については、CLion ドキュメントをご覧ください。
clangd には多くのメリットがありますが、プロジェクト全体のリファクタリングとアクションに関して言えばあまり役立ちません。 clangd をベースとするインデクサーのプロトタイプを作成し、さらには実験的な Find Usages(使用箇所の検索)も実装しました。これは、CLion で有効にして評価できます。
JetBrains が C++ 向けに開発したもう 1 つの代替エンジンは、ReSharper C++ と Rider(C++ によるゲーム開発向け)で使用されている言語エンジンです。 Rider などの IntelliJ ベース IDE が言語エンジンとして機能するスタンドアロンのバックエンドプロセスと通信できるようにする通信プロトコルも導入されています。 このプロトコルと元のエンジンも CLion に適合させました!
目標
この新しい実験的ソリューションでは、IDE の応答性、精度、パフォーマンスを重視しています。 主に次の 2 つの目標を念頭に置いています。
- 「レガシー」エンジンの使用が原因で長らく問題となっているパフォーマンスと品質に関わる CLion の問題を解決すること。
- すべての C++ ツール( CLion、Rider、ReSharper C++)でユーザーエクスペリエンスを統一すること。
この新しい実験的プレビューを「CLion Nova」と名付け、CLion の現行バージョンを「CLion Classic」としました。 将来的には CLion Nova を CLion Classic にマージするため、 新製品は想定していません。
メリットと機能強化
CLion Nova は現在でも clangd ベースのエンジンと ReSharper C++/Rider が使用しているエンジンの 2 つの C++ 言語エンジンを使用しています。 CLion Classic のほとんどの機能は CLion Nova とまったく同じように動作します。
CLion Nova にはパフォーマンスの点で以下のような最も注目すべきメリットがあります。
- ハイライトの高速化(特にコードの増分更新の場合)
- UI の応答性向上
- Find Usages(使用箇所の検索)の高速化
- リファクタリングにおけるフリーズとハングの大幅な減少
- テストのインデックス作成の高速化
この統一により、CLion Classic の機能セットには含まれていない新機能もいくつか CLion Nova に導入されています。
- Introduce Field(フィールドの導入)、Introduce Namespace Alias(名前空間エイリアスの導入)、Introduce Using Enum(using 列挙型の導入)、Convert to Scoped Enum(スコープ付き列挙型に変換)などの新しいリファクタリング。
- 冗長な修飾子、
auto
を明示的な型宣言に置換、#include
ディレクティブの並べ替えなどの新しいインスペクション、クイックフィックス、インテンション。 - プリプロセッサディレクティブヒントおよび Push-to-Hint(ヒントにプッシュ)モードなどの新しいコードヒント。
注目すべき違い
CLion Classic とは異なり、CLion Nova はコード補完やハイライトなどの基本的な IDE の機能に clangd を使用していません。 ただし、JetBrains の clangd フォークは依然として新しいエンジンと一緒にさまざまなタスク(ClangFormat、Clang-Tidy、MISRA チェック、データフロー解析など)を行っています。
CLion Classic ユーザーが CLion Nova を使用し始めた際に外観も使い心地も新しくなったと感じるであろう要素がいくつかあります。
- ユーザーが入力する際の IDE の応答動作が一部異なっています。
- コードインサイト機能に関連する一部の UI 要素と設定が従来と異なって見えるか、見慣れない場所に配置されています。
- 一部のコード関連の設定のデフォルト値が、CLion Nova では異なる場合があります。 初回起動時に CLion Nova がプロジェクトごとの設定とアプリケーションごとの設定を一部 CLion Classic から移行します。ただし、すべてではありません。
- 異なる言語構成( デバッグ/リリース)を切り替えた場合、コードインサイトエンジンが変更に追従するのにさらに時間がかかる場合があります。 ファイルごとに解決コンテキストを切り替えるオプションもありません。
- ReSharper C++ は Windows 限定ですが、Rider はクロスプラットフォームです。 ただし、ReSharper C++/Rider エンジンは非 Windows 環境を Windows 環境と同程度シームレスにはサポートしていない可能性があります。 そのようなケースに遭遇した場合はご報告ください。
以下のように現時点で不足している機能もいくつかあります。
- ツールチェーン: CLion にはリモートワークをセットアップするためのオプションがいくつかあります。 CLion Nova ではローカルソースを使ったリモートワークはサポートされていますが、シンクライアント(Gateway)を使ったリモートワークはまだ提供されていません。
- 言語: Objective-C 言語、CUDA(RSCPP-613、CPP-26144)、およびいくつかのベンダー固有のコンパイラー拡張機能はまだサポートされていません。
- Simplify statement(ステートメントの単純化)などの一部のインテンションやクイックフィックスは現時点でサポートされていません(CPP-35879)。
- 一部のあまり一般的でないリファクタリングもありません。 Move(移動)(CPP-35867)および Inline Parameter(パラメーターのインライン化)リファクタリング(CPP-35868)は後日再導入される予定です。
- JetBrains の AI Assistant はまだ CLion Nova には提供されていません。
CLion Nova のインストール方法
CLion Nova は Toolbox App のみで提供されている無料の早期プレビュービルドです。
CLion Nova は早期アクセスプレビュービルドであるため、ログインが必要ですが、CLion Nova が CLion にマージされるまでは無料で使用できます。 CLion Nova へのアップデートを定期的にリリースする予定ですが、これも Toolbox App 経由で提供されます。
CLion Classic と比較すると、CLion Nova は UI の応答性がより高く、IDE の全体的なパフォーマンスが改善されており、C++ コードのリファクタリングを中心に機能の品質が向上しています。 今すぐお試しになり、ご感想をお聞かせください!
ご意見をお寄せください
CLion Nova は大きな変更であり、さまざまな環境での詳細なテストが必要です。 そのため、ユーザーの皆さんの協力が必要です! さまざまな環境とユースケースがある方はぜひ CLion Nova をお試しになり、その感想をお聞かせください。
具体的には次の内容についてのご意見をお待ちしています。
- CLion Classic と比較した場合、CLion Nova はどのような点であなたのプロジェクトにより効果的に機能していますか?
- CLion Nova でワークフローを中断させ、IDE の使用を妨げているものは何ですか? その中断は CLion Nova に固有のものですか?それとも、CLion Classic でも発生していますか?
CLion Nova をしばらくご利用になった後、フィードバックフォームの送信を求められます。 お手数ですが、回答していただければ幸いです!
また、課題トラッカーでもフィードバックを受け付けています。CLion Classic ではなく、CLion Nova に関する問題であることを忘れずに明記してください。
CLion チーム一同より
JetBrains
The Drive to Develop
オリジナル(英語)ブログ投稿記事の作者: