第4章 開発者環境のカスタマイズ
Red Hat CodeReady Workspaces は、拡張およびカスタマイズ可能な開発者ワークスペースプラットフォームです。
Red Hat CodeReady Workspaces は、以下の 3 つの方法で拡張できます。
- 代替の IDE は、Red Hat CodeReady Workspaces の特殊なツールを提供します。たとえば、データ分析用の Jupyter ノートブックです。代替 IDE は、Eclipse Theia またはその他の Web IDE をベースにすることができます。Red Hat CodeReady Workspaces のデフォルト IDE は Che-Theia です。
- Che-Theia プラグインは、Che- Theia IDE に機能を追加します。これは、Visual Studio Code と互換性のあるプラグイン API に依存します。プラグインは IDE 自体から分離されます。これは、独自の依存関係を提供するために、ファイルまたはコンテナーとしてパッケージ化できます。
- スタック は、異なる開発者の人格に対応する専用のツールセットを備えた事前設定された CodeReady Workspaces ワークスペースです。たとえば、テスト用に必要なツールのみを持つテスト用ワークベンチを事前設定することが可能です。
図4.1 CodeReady Workspaces の拡張性
ユーザーは 、
デフォルトで CodeReady Workspaces が提供するセルフホストモードを使用して CodeReady Workspaces を拡張することができます。
4.1. Che-Theia プラグインとは リンクのコピーリンクがクリップボードにコピーされました!
Che-Theia プラグインは、IDE から分離された開発環境の拡張です。プラグインは、ファイルまたはコンテナーとしてパッケージ化し、独自の依存関係を提供できます。
プラグインを使用して Che-Theia を拡張すると、以下の機能を有効にすることができます。
- 言語サポート: Language Server Protocol に依存することで、サポートされる言語 を拡張します。
- デバッガー: Debug Adapter Protocol でデバッグ機能を拡張します。
- 開発ツール: お気に入りの Linter と、テストおよびパフォーマンスツールとして統合。
- メニュー、パネル、およびコマンド: IDE コンポーネントに独自の項目を追加します。
- themes: カスタムのテーマを作成し、UI を拡張するか、またはアイコンのテーマをカスタマイズします。
- スニペット、フォーマッター、および構文の強調表示: サポートされるプログラミング言語での使用の強化。
- KeyBindings: 環境が不安定であるように、新しいキーマップと一般的なキーバインディングを追加します。
4.1.1. Che-Theia プラグインの機能と利点 リンクのコピーリンクがクリップボードにコピーされました!
Features | description | 利点 |
---|---|---|
高速ロード | プラグインは実行時にロードされ、すでにコンパイルされています。IDE がプラグインコードを読み込んでいる。 | コンパイルの時間を回避します。インストール後の手順は回避します。 |
セキュアなローディング | プラグインは IDE とは別にロードされます。IDE は、常に使用可能な状態のままになります。 | バグがある場合には、プラグインは IDE 全体を破損しません。ネットワークの問題を処理します。 |
ツールの依存関係 | プラグインの依存関係は、独自のコンテナーのプラグインでパッケージ化されます。 | ツールのインストールなし。コンテナー内で実行されている依存関係。 |
コード分離 | ファイルを開くか、入力など、IDE の主な機能をプラグインがブロックできないことを保証します。 | プラグインは個別のスレッドで実行されています。依存関係の不一致を回避します。 |
vs コード拡張の互換性 | 既存の VS Code Extensions で IDE の機能を拡張します。 | ターゲットの複数のプラットフォーム。必要なインストールで、Visual Studio Code Extension を簡単に検出できます。 |
4.1.2. che-Theia プラグインの概念の詳細 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat CodeReady Workspaces は、ワークスペースの Che-Theia のデフォルト Web IDE を提供します。Eclipse Theia をベースにしています。これは、Red Hat CodeReady Workspaces ワークスペースの性質に基づいて追加された機能があるため、プレーン Eclipse Theia とは若干異なるバージョンです。このバージョンの Eclipse Theia for CodeReady Workspaces は Che-Theia と呼ばれています。
Che-Theia プラグインを構築すると、Red Hat CodeReady Workspaces で 提供される IDE を拡張することができます。Che-Theia プラグインは、他の Eclipse Theia ベースの IDE と互換性があります。
4.1.2.1. クライアント側およびサーバー側の Che-Theia プラグイン リンクのコピーリンクがクリップボードにコピーされました!
Che-Theia エディタープラグインでは、開発ワークフローをサポートするために、言語、デバッガー、およびツールをインストールに追加できます。エディターが読み込みを完了すると、プラグインが実行されます。Che-Theia プラグインが失敗すると、メインの Che-Theia エディターが機能し続けます。
che-Theia プラグインは、クライアント側またはサーバー側で実行します。以下は、クライアントおよびサーバー側のプラグインの概念のスキームです。
図4.2 クライアントおよびサーバー側の Che-Theia プラグイン
同じ Che-Theia プラグイン API は、クライアント側(Web ワーカー)またはサーバー側(Node.js)上で実行されるプラグインに公開されます。
4.1.2.2. che-Theia プラグイン API リンクのコピーリンクがクリップボードにコピーされました!
Red Hat CodeReady Workspaces でツールの分離と容易な拡張性を提供するために、Che-Theia IDE にはプラグイン API のセットがあります。API は Visual Studio Code extension API と互換性があります。通常、Che-Theia は VS Code 拡張を独自のプラグインとして実行できます。
CodeReady Workspaces ワークスペース(コンテナー、設定、ファクトリー)のコンポーネントに依存するプラグインを開発する場合、Che-Theia に組み込まれた CodeReady Workspaces API を使用します。
4.1.2.3. che-Theia プラグインの機能 リンクのコピーリンクがクリップボードにコピーされました!
che-Theia プラグインには以下の機能があります。
プラグイン | description | リポジトリー |
---|---|---|
CodeReady Workspaces 拡張タスク | CodeReady Workspaces コマンドを処理し、それらをワークスペースの特定コンテナーを起動する機能を提供します。 | |
CodeReady Workspaces 拡張ターミナル | ワークスペースのコンテナーにターミナルを提供できます。 | |
CodeReady Workspaces Factory | Red Hat CodeReady Workspaces ファクトリーを処理します。 | |
CodeReady Workspaces Container | ワークスペース内で実行されているすべてのコンテナーを表示し、コンテナーと対話できるようにするコンテナービューを提供します。 | |
Dashboard | IDE と Dashboard を統合し、ナビゲーションを容易にします。 | |
CodeReady Workspaces APIs | IDE API を拡張し、CodeReady Workspaces 固有のコンポーネント(ワークスペース、設定)と対話できるようにします。 |
4.1.2.4. vs コードエクステンションおよび Eclipse Theia プラグイン リンクのコピーリンクがクリップボードにコピーされました!
Che-Theia プラグインは、VS Code 拡張または Eclipse Theia プラグインに基づいています。
- Visual Studio Code 拡張
- VS コード拡張を、独自の依存関係セットで Che-Theia プラグインとして再パッケージ化するには、依存関係をコンテナーにパッケージ化します。これにより、Red Hat CodeReady Workspaces ユーザーはエクステンションの使用時に依存関係をインストールする必要がなくなります。CodeReady Workspaces の「 Using a Visual Studio Code extension 」を参照してください。
- Eclipse Theia プラグイン
- Eclipse Theia プラグインを実装し、Red Hat CodeReady Workspaces にパッケージ化することで、Che-Theia プラグインを構築できます。
4.1.3. che-Theia プラグインのメタデータ リンクのコピーリンクがクリップボードにコピーされました!
che-Theia プラグインのメタデータは、プラグインレジストリーの個々のプラグインに関する情報です。
Che-Theia プラグインのメタデータは、各プラグインの meta.yaml
ファイルで定義されます。
以下は、プラグインメタ YAML ファイルで利用できるすべてのフィールドの概要です。本書では、Plugin meta YAML 構造バージョン 3 を示しています。
che-plugin-registry リポジトリー には以下が含まれます。
| バージョン 2 以降(バージョンは後方互換性のためにサポート対象) |
|
Available: category は、 |
| プラグインの目的についての簡単な説明 |
| ユーザーダッシュボードに表示される名前 |
| オプション。他のプラグインを非推奨にするセクション * autoMigrate - boolean
* migrateTo - new org/plugin-id/version(例: |
| YAML に存在する必要はありませんが、これはプラグインレジストリーの dockerimage ビルド時に生成されます。 |
| YAML に存在する必要はありませんが、これはプラグインレジストリーの dockerimage ビルド時に生成されます。 |
| SVG または PNG アイコンの URL |
| 名前(スペースは許可されていません)[-a-z0-9] と一致する必要があります。 |
| パブリッシャーの名前。[-a-z0-9] と一致する必要があります。 |
| プラグインリポジトリーの URL(例: GitHub) |
| プラグインのタイトル(long) |
|
|
| バージョン情報(例: 7.5.1、[-.a-z0-9]) |
| 仕様(下記参照) |
| オプション; プラグインエンドポイント。エンドポイントの説明を参照してください。 |
| オプション: プラグインのサイドカーコンテナー。Che Plugin および VS コードエクステンションがサポートするのは 1 つのコンテナーだけです。 |
| オプション。プラグイン用のサイドカー init コンテナー |
| オプション; ワークスペースの環境変数 |
| オプション: .vsix や .theia ファイルなどの、プラグインアーティファクトへの URL 一覧で VS コードおよび Che-Theia プラグインに必要な属性 |
| サイドカーコンテナー名 |
| 絶対または相対的なコンテナーイメージの URL |
|
OpenShift メモリー制限文字列(例: |
|
OpenShift メモリー要求文字列(例: |
|
OpenShift CPU 制限文字列(例: |
|
OpenShift CPU 要求文字列(例: |
| サイドカーコンテナーに設定する環境変数の一覧 |
| コンテナーにおける root process コマンドの文字列配列定義 |
| コンテナーの root process コマンドの文字列配列引数 |
| プラグインで必要なボリューム |
| プラグインによって公開されるポート(コンテナー上) |
| プラグインコンテナーで利用可能な開発コマンド |
|
ソースコード |
| オプション: サイドカープラグインの init コンテナー |
|
コンテナーライフサイクルフック。 |
| 環境変数名 |
| 環境変数の値 |
| コンテナーのボリュームへのパス |
| ボリューム名 |
| true の場合、ボリュームは一時的なものになります。そうでない場合は、ボリュームは永続化されます。 |
| 公開ポート |
| コマンド名 |
| コマンド作業ディレクトリー |
| 開発コマンドを定義する文字列配列 |
| 名前(スペースは許可されていません)[-a-z0-9] と一致する必要があります。 |
|
|
| ターゲットポート |
| エンドポイント属性 |
|
プロトコル(例: |
|
|
|
|
|
|
|
|
|
コンテナー
* EXEC
* |
|
コンテナーが終了する前に実行される preStop
* EXEC
* |
Che-Theia プラグインの meta.yaml
の例: CodeReady Workspaces machine-exec Service
VisualStudio コードエクステンションの meta.yaml
例: AsciiDoc サポートエクステンション
4.1.4. che-Theia プラグインのライフサイクル リンクのコピーリンクがクリップボードにコピーされました!
ユーザーがワークスペースを起動すると、以下の手順に従います。
- CodeReady Workspaces マスターは、ワークスペース定義から起動するプラグインをチェックします。
- プラグインメタデータが取得され、各プラグインのタイプが認識されます。
- Broker はプラグインタイプに従って選択されます。
- ブローカーはプラグインのインストールおよびデプロイメントを処理します(インストールプロセスはブローカーごとに異なります)。
さまざまな種類のプラグインが存在する。ブローカーは、プラグインが正常にデプロイされるまでのインストール要件をすべて満たします。
図4.3 che-Theia プラグインのライフサイクル
CodeReady Workspaces ワークスペースを起動する前に、CodeReady Workspaces マスターはワークスペースのコンテナーを起動します。
-
Che-Theia プラグインブローカーは(
.theia ファイルから)プラグインを抽出し
、プラグインに必要なサイドカーコンテナーを取得します。 - ブローカーは適切なコンテナー情報を CodeReady Workspaces マスターに送信します。
- ブローカーは Che-Theia プラグインをボリュームにコピーし、Che-Theia エディターコンテナーで使用できるようにします。
- 次に、CodeReady Workspaces ワークスペースマスターがワークスペースのすべてのコンテナーを起動します。
- che-Theia は独自のコンテナーで起動され、プラグインを読み込むために正しいフォルダーをチェックします。
che-Theia プラグインのライフサイクル:
-
ユーザーが Che-Theia でブラウザータブまたはウィンドウを開くと、Che-Theia は新しいプラグインセッションを開始します(フロントエンドの場合は Web ワーカー、バックエンドの場合は Node.js)。Che-Theia プラグインごとに、新しいセッションが開始されていることが通知されます(プラグインの
start()
関数はトリガーされます)。 - Che-Theia プラグインセッションが実行され、Che-Theia バックエンドおよびフロントエンドと対話しています。
-
ユーザーがブラウザータブを閉じるかタイムアウトがある場合、すべてのプラグインが通知されます(トリガーされたプラグインの
stop()
関数)。
4.1.5. Embedded および remote Che-Theia プラグイン リンクのコピーリンクがクリップボードにコピーされました!
Red Hat CodeReady Workspaces の開発者ワークスペースは、プロジェクトで作業するために必要なすべての依存関係を提供します。アプリケーションには、使用されるすべてのツールおよびプラグインに必要な依存関係が含まれます。
che-Theia プラグインは、必要な依存関係( 組み込み (またはローカル)と リモート )に基づいて、2 つの方法で実行できます。
4.1.5.1. Embedded(またはローカル)プラグイン リンクのコピーリンクがクリップボードにコピーされました!
プラグインには特定の依存関係がなく、Node.js ランタイムのみを使用し、IDE と同じコンテナーで実行されます。プラグインが IDE に挿入されます。
例:
- コードの繰り返し
- 新しいコマンドセット
- 新規 UI コンポーネント
Che-Theia プラグインを組み込みとして追加するには、meta.yaml
ファイルにプラグインバイナリーファイル( .theia アーカイブ)
への URL を定義します。VS Code エクステンションの場合は、Visual Studio Code 市場からのエクステンション ID を提供します(CodeReady Workspaces の「 Using a Visual Studio Code extension in CodeReady Workspaces」を参照してください)。
ワークスペースの起動時に、CodeReady Workspaces はプラグインバイナリーをダウンロードして展開し、Che-Theia エディターコンテナーに追加します。Che-Theia エディターは起動時にプラグインを初期化します。
図4.4 ローカル Che-Theia プラグイン
4.1.5.2. リモートプラグイン リンクのコピーリンクがクリップボードにコピーされました!
プラグインは依存関係に依存するか、バックエンドがあります。これは独自のサイドカーコンテナーで実行され、すべての依存関係がコンテナーにパッケージ化されます。
リモート Che-Theia プラグインは、以下の 2 つの部分で構成されます。
-
che-Theia プラグインまたは VS コード拡張バイナリー
meta.yaml
ファイルの定義は、組み込みプラグインと同じです。 -
コンテナーイメージの定義(例:
eclipse/che-theia-dev:yely)
。このイメージから、CodeReady Workspaces はワークスペース内に別のコンテナーを作成します。
例:
- Java Language Server
- Python Language Server
ワークスペースの起動時に、CodeReady Workspaces はプラグインイメージからコンテナーを作成し、プラグインバイナリーをダウンロードおよび展開し、作成したコンテナーに追加します。Che-Theia エディターは起動時にリモートプラグインに接続します。
図4.5 Remote Che-Theia プラグイン
4.1.5.3. 比較マトリックス リンクのコピーリンクがクリップボードにコピーされました!
Che-Theia プラグイン(または VS コード拡張)にコンテナー内で追加の依存関係が必要ない場合は、埋め込みプラグインになります。プラグインを含む追加の依存関係を持つコンテナーはリモートプラグインです。
プラグインごとの RAM の設定 | 環境の依存関係 | 分離されたコンテナーを作成する | |
---|---|---|---|
remote | TRUE | プラグインは、リモートコンテナーに定義された依存関係を使用します。 | TRUE |
embedded | False(ユーザーはエディターコンテナー全体に対して RAM を設定できますが、プラグインごとに RAM を設定できません) | プラグインはエディターコンテナーから依存関係を使用します。コンテナーにこれらの依存関係が含まれていない場合、プラグインは失敗するか、または予想通りに機能しません。 | FALSE |
ユースケースとプラグインが提供する機能に応じて、記述された実行モードの 1 つを選択します。
4.1.6. リモートプラグインエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
Red Hat CodeReady Workspaces には、別個のコンテナーで VS Code Extensions および Che-Theia プラグインを起動するためのリモートプラグインエンドポイントサービスがあります。Red Hat CodeReady Workspaces は、リモートプラグインエンドポイントバイナリーを各リモートプラグインコンテナーに挿入します。このサービスは、プラグイン meta.yaml
ファイルで定義されたリモート拡張とプラグインを開始し、Che-Theia エディターコンテナーに接続します。
リモートプラグインエンドポイントは、リモートプラグインコンテナーと Che-Theia エディターコンテナーとの間にプラグイン API プロキシーを作成します。リモートプラグインエンドポイントは、一部のプラグイン API の部分のインターセプターで、エディターコンテナーではなくリモートサイドカーコンテナー内で起動します。例: 端末 API、デバッグ API
リモートプラグインエンドポイント実行可能コマンドは、リモートプラグインコンテナーの環境変数 PLUGIN_REMOTE_ENDPOINT_EXECUTABLE に保存されます
。
Red Hat CodeReady Workspaces では、サイドカーイメージでリモートプラグインエンドポイントを起動する方法が 2 つあります。
- Dockerfile を使用した起動リモートプラグインエンドポイントの定義。この方法を使用するには、元のイメージをパッチを適用して再ビルドします。
-
プラグインの
meta.yaml
ファイルで起動リモートプラグインエンドポイントを定義する。この方法を使用して、元のイメージのパッチ適用を回避します。
4.1.6.1. Dockerfile を使用した起動リモートプラグインエンドポイントの定義 リンクのコピーリンクがクリップボードにコピーされました!
リモートプラグインエンドポイントを起動するには、Dockerfile で PLUGIN_REMOTE_ENDPOINT_EXECUTABLE 環境
変数を使用します。
手順
Dockerfile の
CMD
コマンドを使用して、リモートプラグインエンドポイントを起動します。Dockerfile の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dockerfile の
ENTRYPOINT
コマンドを使用して、リモートプラグインエンドポイントを起動します。Dockerfile の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.6.1.1. ラッパースクリプトの使用 リンクのコピーリンクがクリップボードにコピーされました!
イメージによっては、ラッパースクリプトを使用してパーミッションを設定します。スクリプトは、コンテナー内のパーミッションを設定する Dockerfile の ENTRYPOINT
コマンドで定義され、Dockerfile の CMD
コマンドで定義されたメインプロセスを実行します。
Red Hat CodeReady Workspaces は、このようなイメージをラッパースクリプトで使用し、OpenShift などの高度なセキュリティーで異なるインフラストラクチャーでパーミッション設定を提供します。
ラッパースクリプトの例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ラッパースクリプトを含む Dockerfile の例:
Dockerfile の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、コンテナーは Dockerfile の
ENTRYPOINT
コマンドで定義された/entrypoint.sh
スクリプトを起動します。スクリプトはパーミッションを設定し、exec $@
を使用してコマンドを実行します。CMD
はENTRYPOINT
の引数で、exec $@
コマンドは${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE} を実行し
ます。リモートプラグインエンドポイントは、パーミッション設定後にコンテナーで起動します。
4.1.6.2. meta.yaml ファイルで起動しているリモートプラグインエンドポイントの定義 リンクのコピーリンクがクリップボードにコピーされました!
この方法を使用して、イメージを再利用して、変更せずにリモートプラグインエンドポイントを起動します。
手順
プラグイン meta.yaml
ファイルプロパティーコマンド および
args
を変更します。
-
Command
- Red Hat CodeReady Workspaces を使用してDockerfile#ENTRYPOINT
を上書きします。 -
args
: Red Hat CodeReady Workspaces はDockerfile#CMD
を上書きするために使用されます。 コマンド
およびargs
プロパティーが変更された YAML ファイルの例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンド
の代わりにargs
を変更し、ラッパースクリプトパターンでイメージを使用し、entrypoint.sh
スクリプトの呼び出しを維持します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat CodeReady Workspaces は、Dockerfile の
ENTRYPOINT
コマンドで定義されたentrypoint.sh
ラッパースクリプトを呼び出します。スクリプトは、exec "$@"
コマンドを使用して[ 'sh', '-c", ' ${PLUGIN_REMOTE_ENDPOINT_EXECUTABLE}' ]
を実行します。
コンテナーの起動時にサービスを実行し、リモートプラグインエンドポイントも起動するには、変更した コマンド
および args
プロパティーで meta.yaml
を使用します。サービスを起動し、プロセスをデタッチし、リモートプラグインエンドポイントを開始し、それらのエンドポイントが並行して機能します。