機能拡張を開発する
Novaは、新しい言語、テーマ、言語サーバ、タスクテンプレート、バリデータ、外部ツールとの連携など、多岐にわたる機能を追加するための柔軟な 機能拡張API をサポートしています。
NovaのAPIドキュメントをお探しですか? docs.nova.app で見つけることができます。
新しい機能拡張を作成する
Novaの機能拡張開発を始めるには、まずNovaの 設定 > 一般 に移動し、 機能拡張メニューに開発用メニューを表示する を有効にします。これにより、機能拡張の作成、テスト、提出のための追加のメニュー項目が機能拡張メニューに追加されます。また 機能拡張開発者アカウント を作成し、サインインする必要もあります。
すべての設定が完了したら 機能拡張 > 新規機能拡張を作成… に進み、新しい機能拡張を作成します。
機能拡張の種類

最初の決定事項は、作成したい機能拡張の種類です。Novaには、さまざまな種類の機能拡張開発をすぐに始められるように、多数のテンプレートが含まれています:
-
アクション機能拡張: 汎用的なコマンドやメニュー項目をNovaに追加します。
-
クリップ: クリップをNovaに追加します。
-
補完プロバイダ: エディタで使用する補完候補を提案します。
-
エディタ機能拡張: フォーマットなど、エディタ内のテキストに対して操作を行います。
-
問題プロバイダ: エディタで見つかった問題や警告を報告します。
-
キーバインド: 事前に作成されたキーバインドセットを提供します。
-
言語定義: エディタ用の新しい言語モードを定義します。
-
言語サーバ機能拡張: 編集機能を強化するために言語サーバに接続します。
-
サイドバー: Novaのインタフェースに新しいサイドバーを追加します。
-
タスクプロバイダ: プロジェクトのコンテキストに基づいてユーザが実行できるタスクを自動的に提供します。
-
タスクテンプレート: ユーザが設定できる、事前に定義されたタスクテンプレートを提供します。
-
テーマ: 主にCSSで記述された、新しいウインドウまたはエディタのテーマをNovaに提供します。
これらの選択は確定的なものではなく、一般的な種類の機能拡張をすばやく始めるためのプリセットにすぎません。1つの機能拡張は、これらの複数の機能拡張タイプにまたがる複数の機能をNovaに提供できます。また、必要最低限のテンプレートファイル以外は何も含まない、空の機能拡張を作成することも選択できます。
初期設定
機能拡張の種類を選択したら、機能拡張に関するいくつかの識別情報を提供する必要があります。選択した機能拡張の種類によっては、特定のエンタイトルメントを有効にする必要がある場合もあります。

- 機能拡張名
- 機能拡張の表示名です。
- 組織
- Nova開発者アカウントは複数の組織を持つことができます。
- 機能拡張識別子
- この機能拡張の一意な識別子で、上記で選択した組織の識別子に追加されます。類似した名前の他の機能拡張と区別するのに役立ちます。
エンタイトルメント
エンタイトルメントは、ユーザの個人データへのアクセスを可能にする可能性のある特定のNova APIを使用する許可を機能拡張に与えます。機能拡張が必要とするエンタイトルメントは その機能拡張がこのデータにアクセスする可能性があることをユーザに知らせるために、機能拡張ライブラリのページにリストされます。
- クリップボード
- コピーまたはペーストされたテキストに対するアクションなど、ユーザのクリップボードの内容を読み取ったり変更したりする機能を許可します。
- ファイルシステム
- ユーザのMac上のファイルやディレクトリを直接読み取ったり変更したりする機能を許可します。
- ネットワーク
- ネットワーク経由で任意のHTTPリクエストを行う機能を許可します。
- プロセス
- ユーザのMac上で外部プロセスを起動し、通信する機能を許可します。
機能拡張の作成
初期作成プロセスを完了すると、機能拡張は新しく作成された .novaextension バンドル内に保存されます。このバンドルには、機能拡張のすべてのソースファイルとリソースが保持され、ローカルプロジェクトとして自動的にNovaに追加されます。

まず extension.json を開いて、機能拡張に関する追加のメタデータを追加することになるでしょう。名前、識別子、組織のフィールドは自動的に入力されますが、機能拡張の カスタム説明 も記述する必要があります。機能拡張ライブラリに提出される機能拡張には、ユーザがバグレポートを提出できるURLを提供するbugs の値も必要です。
Novaの機能拡張は、主にNovaの機能豊富なJavaScript APIを使用して JavaScript で記述されます。テーマは主にCSSで記述されます。Novaに新しい言語モードを追加するには、Tree-sitterパーサをコンパイルして機能拡張にバンドルできます。
Novaの機能拡張APIの詳細なドキュメントについては docs.nova.appのNova Extension APIライブラリ をご確認ください。
機能拡張のテスト
機能拡張のテストを開始する準備ができたら 機能拡張メニュー > プロジェクトを機能拡張として有効化 に進みます。これにより、テストのためにNovaプロジェクトが一時的に機能拡張としてNovaに追加されます。開発中の機能拡張は 機能拡張メニュー > プロジェクトの機能拡張化を解除 からいつでも削除できます。
言語インスペクタ
The 言語インスペクタは、Novaがエディタ内の書類をどのように解析し、ハイライトしているかについての洞察を提供します。これは、新しい言語やテーマなどの特定の機能拡張を開発する際に非常に貴重です。書式メニュー > 言語インスペクタから、またはエディタのステータスビューにあるシンタックスインスペクタアイコン
をクリックすることで有効にできます。

W言語インスペクタが有効な間、Novaのエディタ内の任意のシンボル、単語、または文字に カーソルを合わせる と、現在の言語モードがそのトークンをどのように解析しているか、および現在のテーマがそのトークンにどのCSSセレクタを適用しているかの両方を確認できます 。これは、言語機能拡張によって書類が正しく解析されていない、またはテーマが期待通りに適用されていない問題をデバッグするのに役立ちます。
機能拡張コンソール
デバッグペインから 機能拡張コンソールにアクセスできます。機能拡張コンソールには、実行中に機能拡張のコードからスローされたエラーや警告、および手動でのコンソール出力が表示されます。

各エントリには、メッセージがログに記録された時刻、メッセージを記録した機能拡張、およびメッセージ自体が表示されます 。左上のメニューからソースを選択することで、コンソールを機能拡張ごとにフィルタリングできます。右上では、ビューをエラー、警告、またはログでフィルタリングできます。必要に応じてコンソールを消去することもできます。
機能拡張の配布
機能拡張の準備ができたら、他のユーザに配布したくなるでしょう!1つの選択肢は .novaextension バンドルを好きな方法で配布 することです。ユーザは、そのバンドルをダブルクリックするだけで、Novaに機能拡張をインストールできます。もちろん、Novaの機能拡張ライブラリに機能拡張を提出して、どのNovaユーザでも簡単に見つけられるようにすることもできます。
始めるには、機能拡張をプロジェクトとして開き 機能拡張メニュー > 機能拡張ライブラリに提出… に進みます。まず、Novaはアイコンやバグレポートのリンクなど、機能拡張に必要なメタデータが含まれていることを確認します。必要なメタデータが欠けている場合、それを提供するまで機能拡張を提出することはできません。

すべてがチェックアウトされれば、Novaは機能拡張の提出を許可します。

提出されると、機能拡張ライブラリは extension.json で提供されたメタデータを使用して機能拡張のリスティングを作成し、他のNovaユーザが自分で機能拡張をダウンロードできるようになります。提出した機能拡張は、機能拡張開発者アカウントにサインインして管理できます。
Nova CLIの使用
**Nova CLI tool**は、機能拡張開発者向けに、機能拡張のテストと配布を自動化するのに役立つ追加のコマンドをいくつか提供します。以下のすべての機能拡張開発コマンドは、nova extension <subcommand> を使用して呼び出されます。また、nova help extension <subcommand> を実行して、各コマンドのドキュメントを表示することもできます。
サブコマンド
activate- .novaextension バンドルをNovaの機能拡張としてアクティベートします。例:
nova extension activate /path/to/bundle.novaextension invoke- 既存のNovaワークスペースで機能拡張コマンドを呼び出します。これにより、コマンドラインスクリプトから機能拡張のアクションを自動化できます。コマンドは、CommandsRegistry APIを使用して機能拡張によって登録されている必要があります。
login- コマンドラインからNova機能拡張開発者アカウントにログインします。ログインするために資格情報の入力を求められます。
logout- 現在サインインしているNova機能拡張開発者アカウントからログアウトします。
publish- 機能拡張バンドルを機能拡張ライブラリに提出します。例:
nova extension publish /path/to/bundle.novaextension validate- 機能拡張ライブラリへの提出を妨げる可能性のある問題や警告がないか、機能拡張バンドルをチェックします。例:
nova extension validate /path/to/bundle.novaextension whoami- 現在サインインしているNova機能拡張開発者アカウントのメールアドレスを出力します。
|
← 前へ 機能拡張ライブラリ |