CLion 用のプラグインを開発する
CLion の特定の機能性を欠くとき、独自のプラグインを書くことを考えるかもしれません。 この記事は、IntelliJ プラットフォームプラグイン開発の基本を理解し、CLion プラグインを実装する最初のステップを案内することを目的としています。
CLion プラグインはすべて IntelliJ Platform の拡張機能であり、基本的に個別の Java プロジェクトです。 IntelliJ プラグイン開発には、次の 2 つのワークフローがサポートされています。推奨される方法は gradle-intellij-plugin と Gradle をビルドシステムとして使用する方法(推奨)、もう一つは DevKit と IntelliJ IDEA 独自のビルドシステムを利用する方法です。
プラグイン開発用の IDE として、IntelliJ IDEA Community または Ultimate エディションを使用してください。
IntelliJ IDEA 自体とは別に、ターゲット CLion ディストリビューションが必要になります。 Gradle ベースのアプローチでは、ビルドスクリプトによって自動的にダウンロードできます。 DevKit を使用する場合は、必ず CLion を手動でインストールしてください。
プラットフォームオープン API
CLion は、安定性と詳細な説明が保証された独自のパブリック API を提供していませんが、 プラットフォームオープン API(英語) のすべての機能を使用できます。 Platform API を探索する効果的な方法は、公式 リポジトリ(英語)から IntelliJ IDEA CommunityEdition のソースを取得してインスペクションすることです。
IntelliJ プラットフォームの API はリリース間で変わる可能性があるため、プラグインの機能に影響します。 そのような変更は IntelliJ プラットフォームとプラグインの非互換な変更(英語)にリストされています。 CLion の内部 SDK は予告なく変更されることがあります。
CLion プラグインの API 利用についてサポートが必要な場合は、 コミュニティフォーラムでお気軽にご質問ください。
拡張機能
IntelliJ プラットフォームは、プラグインが新しい機能を追加したり、既存の機能をカスタマイズしたりするための 拡張機能と拡張ポイント(英語)を提供します。 プラグインは、 plugin.xml ファイルに 1 つまたは複数の拡張 <extenstions> または拡張ポイント <extensionPoints> を実装することを宣言する必要があります。 利用可能な拡張機能および拡張ポイントの一覧を取得するには、Community Edition ソースの このディレクトリにある *Extention/*ExtentionPoints ファイルを参照してください。
一般的な拡張ポイントは次のとおりです。
アクション (英語) - メニューおよびツールバー項目。
コードインスペクション (英語) - 静的コード分析
インテンション -(英語) エディターで使用可能なコンテキスト固有のアクション。
プラグイン依存関係
プラグインは他のプラグインのクラスに依存している可能性があります。 この場合、プラグインはバンドル、サードパーティ、独自のプラグインのいずれかになります。 依存関係の表現の詳細については、 プラグイン依存関係(英語)を参照してください。
プラグインは、どの製品 (IntelliJ ベースのすべての IDE、CLion のみ、または一部のサブセット) と互換性があるかを指定する必要があります。 これを行うには、 plugin.xml で <depends> タグを使用してモジュールの依存関係を宣言します (IntelliJ 製品とのプラグイン互換性(英語)を参照)。
一部のモジュールはすべての IntelliJ ベースの製品で使用できますが、次のモジュールは特に CLion で使用できます。
com.intellij.modules.cidr.lang- C/C++ 言語サポート (このモジュールは Android Studio でも使用可能)。com.intellij.modules.cidr.debugger- ネイティブデバッガーのサポート (Android Studio でも)com.intellij.modules.clion- コア CLion 機能。
Plugin.xml ファイル
plugin.xml ファイルは、プラグインメタデータ(名前、説明、作成者、変更ログ、実装された機能のリスト)を含む 主要なプラグイン記述子(英語)です。
name、id、description および vendor の値は、プラグインデータベースにプラグインを正しく登録するために必要です。 上記の通り、 depends パラメーターはすべて、プラグインが依存するモジュールの ID です。 depends パラメーターの一覧によって、対応する製品が暗黙的に定義されます。
CLion プラグイン入門
さらに、Gradle ベースのアプローチを、すべての新しいプラグインプロジェクトに推奨されるアプローチとして取り上げます。 DevKit ワークフローは、既存のプラグインでも引き続きサポートされていますが、 DevKIt を使う(英語)で説明されています。
まず、IntelliJ IDEA Community または Ultimate を インストールします。 開始する前に、2 つのバンドルされたプラグイン Gradle と DevKit の両方が IntelliJ IDEA インスタンスで有効になっていることを確認してください( に移動し、名前でプラグインを検索してください)。
Gradle ベースのワークフロー
IDE メインメニューに 挨拶 を追加し、CLion 用にカスタマイズするプラグインの例を見てみましょう。
追加のライブラリおよびフレームワーク のリストで IntelliJ Platform プラグイン. を選択して、新しい Gradle プロジェクトを作成します。

新しい Gradle プロジェクトの作成手順を進めてください。 デフォルトの gradle ラッパーを使用する オプションを選択することを推奨します。その方法で、IntelliJ IDEA が Gradle タスクの実行に必要なすべてを自動的に設定します:

テンプレートプラグインプロジェクトの準備ができたら、 から Gradle ツールウィンドウを呼び出し、 runIde タスクに注目してください。 このタスクは、プラグインのターゲット IDE を起動します(デフォルトでは、IntelliJ IDEA に構成されています)。

gradle-intellij-plugin によって提供されるタスクの完全な リスト(英語)を参照してください。
それでは、デフォルトのプロジェクトを変更しましょう。
HelloAction という新しい Java クラスを追加します。
import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; public class HelloAction extends AnAction { public HelloAction() { super("Hello"); } public void actionPerformed(AnActionEvent event) { Project project = event.getProject(); Messages.showMessageDialog(project, "Hello world!", "Greeting", Messages.getInformationIcon()); } }次のダミーコードを plugin.xml に入れます。
<idea-plugin> <id>org.helloplugin</id> <name>Hello Action Project</name> <version>0.0.1</version> <vendor email="dummy" url="dummy">dummy</vendor> <depends>com.intellij.modules.lang</depends> <extensions defaultExtensionNs="com.intellij"> </extensions> <actions> <group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu"> <add-to-group group-id="MainMenu" anchor="last"/> <action id="Myplugin.Textboxes" class="HelloAction" text="Hello" description="Says hello"/> </group> </actions> </idea-plugin>build.gradle スクリプトの
intellijエントリを変更します (詳細については、 DSL の設定(英語)を参照してください)。intellij { version 'LATEST-EAP-SNAPSHOT' type 'CL' }CLion は、2019.2 EAP と共に Maven 互換の アーティファクトリポジトリ(英語)に公開されました。 現在、
LATEST-EAP-SNAPSHOTまたは191-EAP-SNAPSHOTのいずれかをバージョン指定子として使用できます。
これで runIde タスクを実行でき、CLion メインメニューの 挨拶 を見ることができます。

さらなるステップ
上記の例は非常に基本的なものであり、CLion の詳細がなく、一般的な IntelliJ 機能のみを使用しています。 さらに詳しく知りたい場合は、SDK ドキュメントの プラグイン構造 セクションや CLion プラグイン開発、 IntelliJ SDK ドキュメント FAQ 、そして コミュニティフォーラムを参照してください。
カスタム言語サポート用のプラグインの開発に興味がある場合は、Platform SDK ドキュメントの 専用セクション(英語)を参照し、 Antlr のプラグイン開発ノート(英語)を確認してください。 PSI ビューアー(英語)プラグインは、プログラム構造インターフェース PSI(英語) に慣れるために役立ちます。
プラグインの テスト(英語)に関するガイダンスドキュメントも参照してください。 プラグインの公開のトピックについては、 Gradle によるプラグインの公開(英語)および DSL の公開(英語)で説明されています。