4 Oracle JET VComponentベースのWebコンポーネントの使用
Oracle JET VComponentベースのWebコンポーネントは、カスタムHTML要素として埋め込むことができる、再利用可能なユーザー・インタフェース・コードの単位です。Webコンポーネントには、Oracle JETコンポーネント、他のWebコンポーネント、HTML、JavaScriptおよびCSSが含まれます。独自のWebコンポーネントを作成するか、ページに追加できます。
Webコンポーネントの作成
Oracle JETでは、カスタムWebコンポーネントの様々なコンポーネント・タイプがサポートされます。スタンドアロンWebコンポーネントを作成できます。または、一緒に使用するためのWebコンポーネントのセットを作成できます。その後、それらをJETパックすなわちパック・コンポーネント・タイプとしてアセンブルできます。リソース・コンポーネントを作成してJETパックを拡張できるのは、厳密にUIコンポーネントではないアセットの再利用可能なライブラリがあるときです。また、スタンドアロン・コンポーネントでサードパーティ・コードを参照する必要がある場合は、参照コンポーネントを作成して、そのコードへのポインタを定義できます。
スタンドアロンWebコンポーネントの作成
Oracle JETコマンドライン・インタフェース(CLI)を使用して、コンテンツを移入できるOracle JET Webコンポーネント・テンプレートを作成します。CLIを使用しない場合、WebコンポーネントのファイルとフォルダをOracle JETアプリケーションに手動で追加できます。
次の手順では、Webコンポーネントを作成するための大まかなステップを示します。
始める前に:
- 使用できないWebコンポーネントの予約名のリストについては、「valid custom element name」を参照してください
-
既存のWebコンポーネントのプロパティ、イベントおよびメソッドのリストについては、「HTMLElement properties, event listeners, and methods」を参照してください
-
グローバル属性およびイベントのリストについては、「Global attributes」を参照してください
Webコンポーネントを作成するには:
JETパックの作成
コンシューマが選んだコンポーネントが1つ以上のコンポーネントに関連する可能性がある場合、JETパックを作成するとプロジェクト管理が単純化されます。個々のJETパックで、特定のバージョンの参照コンポーネントが必要になることがあります。
基本的に、JETパックは関連するWebコンポーネントのライブラリです。それらのアセットが直接含まれるわけではなく、コンポーネントの特定バージョン・ストライプの索引として存在します。
ノート:
関連するコンポーネントの参照メカニズムとしてのパックには例外が1つあります。パックには、1つ以上のRequireJSバンドル・ファイルを含めることができます。これは、最適化された形式のコンポーネント・セットを、少数の物理的ダウンロードにパッケージ化したものです。ただし、これは常に、Oracle Component Exchangeで独立エンティティとして提供される実際のコンポーネントと合せて使用されます。
JETパックで参照されるコンポーネントは一緒に使用するためのものであり、その使用方法は個別のコンポーネント・バージョンによって制限されます。したがって、作成するJETパックによって、各コンポーネントの特定のバージョンと、同じセット内の他のコンポーネントの特定の固定バージョンとの関係が結ばれます。つまり、JETパックそのものに「バージョン・ストライプ」があり、これによってユーザーがアプリケーションにインポートする特定のコンポーネントが決まります。個々のコンポーネントのバージョン番号は異なる可能性があるため、JETパックによって、コンシューマが自らのアプリケーションとパック全体のバージョン(パックに含まれる個別のコンポーネントではない)を関連付けることが保証されます。
JETパックのリソース・コンポーネントの作成
JETパックにアセンブルするWebコンポーネント全体でアセットを再利用する場合は、リソース・コンポーネントを作成します。リソース・コンポーネントは、複数のJETパックで再利用できます。
複雑なコンポーネントのセットを扱うときは、複数のコンポーネント間で特定のアセットを共有できると役立つことがあります。そのような場合、コンポーネントすべてを1つのJETパックに含めて、共有アセットを保持するためにリソース・コンポーネントをパックに追加できます。パックに格納できる内容に制限はありません。通常、共有されるJavaScript、CSS、JSONのファイルとイメージが公開されます。通常、サードパーティ・ライブラリは参照コンポーネントから参照する必要があることに注意してください。リソース・コンポーネントには組み込まないでください。
リソース・コンポーネントを作成するためにツールは必要ありません。便利な場所にフォルダを作成する必要があります。最終的にはこのフォルダを圧縮して、配布可能なリソース・コンポーネントを作成します。このフォルダの内部には、望みの構造で任意のコンテンツを含めることができます。
リソース・コンポーネントを作成するには:
Webコンポーネントの参照コンポーネントの作成
Webコンポーネントで使用するためにサードパーティ・ライブラリへのポインタを取得する必要があるときは、参照コンポーネントを作成します。
参照コンポーネントの作成
参照コンポーネントを作成するためにツールは必要ありません。便利な場所にフォルダを作成して、そこでcomponent.json
ファイルの参照コンポーネントのメタデータを定義する必要があります。最終的にはこのフォルダを圧縮して、配布可能な参照コンポーネントを作成します。
参照コンポーネントは通常はスタンドアロンであるため、作成するcomponent.json
ファイルをJETパックに含めないでください。
参照コンポーネントを作成するには:
参照コンポーネントの使用
Webコンポーネントが、これらの参照コンポーネントのいずれかに定義されたサードパーティ・ライブラリにアクセスする必要があるときは、component.json
のdependency属性のメタデータを使用して、参照コンポーネントの明示的なバージョンを示すか、セマンティック範囲を指定します。ここで示すのは、特定のバージョンの2つの参照コンポーネントを使用するコンポーネントの単純な例です。
{
"name":"calendar",
"pack":"oj-sample",
"displayName": "JET Calendar",
"description": "FullCalendar wrapper with Accessibility added.",
"version": "1.0.2",
"jetVersion": "^9.0.0",
"dependencies": {
"oj-ref-moment":"2.24.0",
"oj-ref-fullcalendar":"3.9.0"
},
...
前述のコンポーネントがOracle JETまたはOracle Visual Builderプロジェクトに追加されるとき、この依存関係情報が使用されて、参照コンポーネントとしてポイントされるサードパーティ・ライブラリの正しいRequireJSパスが作成されます。
または、参照コンポーネントに依存するWebコンポーネントをインストールし、Oracle JET CLIを使用すると、ツールによって自動的にnpmインストールが実行され、ライブラリがローカルになります。ただし、同じコンポーネントがOracle Visual Builderで使用されるときは、CDN位置を使用する必要があります。つまり、参照コンポーネントはVisual Builderで使用できるようにCDNに存在する必要があります。
ページへのWebコンポーネントの追加
VComponentベースのWebコンポーネントを使用するには、Webコンポーネントを使用するTSXページのWebコンポーネントにエントリ・ポイントを提供するローダー・モジュールをインポートします。
以前にコンポジット・コンポーネント・アーキテクチャを使用してWebコンポーネントを構築したユーザーは、ローダー・モジュールを使用したWebコンポーネントのインポートに精通しています。VComponentベースのWebコンポーネントでは、Webコンポーネントのメイン・エントリ・ポイントとして機能するloader
モジュールのこの規則も使用します。これにより、Oracle JET CLI、Visual BuilderおよびComponent ExchangeがVComponentベースのWebコンポーネントと連携できます。
WebコンポーネントをVDOMアプリケーションにインポートする場合は、Webコンポーネントのインポートにコンポーネント・クラス名とWebコンポーネントのカスタム要素名のどちらを使用するかを選択できます。VComponentベースのWebコンポーネントをMVVM JETアプリケーションにインポートする場合は、カスタム要素構文を使用する必要があります。JETパックからコンポーネントをインポートする場合は、import文でJETパックを識別する必要もあります。次のコメント付きの例に、各オプションに使用する構文を示します。
import { h } from "preact";
// Import standalone components.
// Import as a custom element.
import "doc-hello-world/loader";
// Import as a component class.
import { DocBonjourWorld } from "doc-bonjour-world/loader";
// Import components from a JET Pack
// Import as a custom element.
import "my-component-pack/my-widget-1/loader";
// Import as a component class.
import { MyWidget2 } from "my-component-pack/my-widget-2/loader";
export function Content() {
return (
<div class="oj-web-applayout-max-width oj-web-applayout-content">
{/* Standalone component's custom element */}
<doc-hello-world></doc-hello-world>
{/* Standalone component's component class */}
<DocBonjourWorld />
{/* JET Pack component's custom element */}
<my-component-pack-my-widget-1></my-component-pack-my-widget-1>
{/* JET Pack component's component class */}
<MyWidget2 />
</div>
);
}
次の図は、スタータ・テンプレートのコンテンツ・コンポーネントでの各レンダリングの例を示しています。

VComponentベースのWebコンポーネントのAPIドキュメントの生成
Oracle JET CLIには、開発するVComponentベースのWebコンポーネント(VComponent)のAPIドキュメントの生成を支援するためのコマンド(ojet add docgen
)が含まれています。
プロジェクトのルートからコマンドを実行すると、JSDoc NPMパッケージがインストールされ、apidoc_template
ディレクトリがプロジェクトのsrc
ディレクトリに追加されます。apidoc_template
ディレクトリには、後でVComponent用に生成するAPIリファレンス・ドキュメントの適切なタイトル、サブタイトルおよびフッター情報(コピーライト情報など)でカスタマイズできる次のファイルが含まれています。
footer.html
header.html
main.html
次の例のように、VComponentのソース・ファイルにコメントを記述します:
import { ExtendGlobalProps, registerCustomElement } from "ojs/ojvcomponent";
. . .
type Props = Readonly<{
message?: string;
address?: string;
}>;
/**
*
* @ojmetadata version "1.0.0"
* @ojmetadata displayName "A user friendly, translatable name of the component"
* @ojmetadata description "<p>Write a description here.</p>
<p>Use HTML tags to put in new paragraphs</p>
<ul>
<li>Bullet list item 1</li>
<li>Bullet list item 2</li></ul>
* <p>Everything before the closing quote is rendered</p>
* "
*
*/
function StandaloneVcompFuncImpl({ address = "Redwood shores",
message = "Hello from standalone-vcomp-func" }: Props) {
return (
<div>
. . .
</div>
);
}
ソース・ファイルでのVComponentのAPIの文書化が完了したら、コンポーネントがJETパック(ojet build component component-name
またはojet build component jet-pack-name
)の一部である場合、コンポーネントまたはJETパックに対してbuild
コマンドを実行し、appRootDir/web/components/component-or-pack-name/vcomponent-version/docs
ディレクトリにAPIリファレンス・ドキュメントを生成します。
次の/docs
ディレクトリ・リストは、スタンドアロンVComponentに対してOracle JET CLIによって生成されるファイルを示しています。コンポーネントを含むOracle JETアプリケーションをビルドして、APIドキュメントを生成することはできません。個々のVComponentまたはVComponentを含むJETパックをビルドする必要があります。Oracle JET CLI ojet add docgen
コマンドを使用して、CCAベースのWebコンポーネントのAPIドキュメントを生成することもできません。
appRootDir/web/components/standalone-vcomp-func/1.0.0/docs
| index.html
| jsDocMd.json
| standalone-vcomp-func.html
| standalone.StandaloneVcompFunc.html
|
+---scripts
| | deprecated.js
| |
| \---prettify
| Apache-License-2.0.txt
| lang-css.js
| prettify.js
|
\---styles
| jsdoc-default.css
| prettify-jsdoc.css
| prettify-tomorrow.css
|
\---images
bookmark.png
linesarrowup.png
linesarrowup_blue.png
linesarrowup_hov.png
linesarrowup_white.png
oracle_logo_sm.png
なお、生成されたAPIドキュメントの外観を変更するために代替ロゴまたはCSSスタイル(あるいはその両方)を含める場合は、ディレクトリappRootDir/node_modules/@oracle/oraclejet/dist/jsdoc/static/styles/
のコンテンツを更新してください。
Webコンポーネントのビルド
Oracle JET Webコンポーネントを作成することで、ファイルを最適化し、コンシューマと共有可能なコンポーネントの縮小フォルダを生成できます。
Webコンポーネントを構成し、様々なアプリケーションで使用する準備ができたら、スタンドアロンWebコンポーネント、JETパックおよびリソース・コンポーネントといったタイプのWebコンポーネントをビルドできます。JETツールを使用してこれらのコンポーネントをビルドすると、最適化されたコンポーネント・ファイルを含む縮小コンテンツが生成されます。この縮小バージョンのコンポーネントは、コンシューマと簡単に共有して使用できます。たとえば、Oracle Component Exchangeに公開する前にコンポーネントをビルドします。Webコンポーネントをビルドするには、コンポーネントを含むJETアプリケーションのルート・フォルダから次のコマンドを使用します:
ojet build component my-web-component-name
たとえば、Webコンポーネント名がhello-world
の場合は、次のコマンドを使用します:
ojet build component hello-world
JET Packの場合は、パック名を指定します。
ojet build component my-pack-name
パック内の個別のコンポーネントのビルドはサポートされていないことに注意してください。パック全体を一度にビルドする必要があります。
このコマンドによって、Oracle JET Webアプリケーションのweb/components/hello-world/x.x.x/
ディレクトリに/min
フォルダが作成されます。ここで、x.x.x
はコンポーネントのバージョン番号です。/min
フォルダにはWebコンポーネント・ファイルの縮小(リリース)バージョンが含まれます。
参照コンポーネントでは縮小やバンドルは必要ないため、ビルドする必要はありません。
Webコンポーネントをビルドする場合:
-
JETアプリケーションに複数のコンポーネントが含まれる場合、コンポーネントを含むJETアプリケーションをビルドし、すべてのコンポーネントをまとめてビルドして最適化できます。コンポーネント名を指定して
build component
コマンドを実行すると、単一コンポーネントをビルドできます。 -
オプションで、buildコマンドとともに
--release
フラグを使用することはできますが、build
コマンドではコンポーネントのデバッグと縮小バージョンの両方が生成されるため、必須ではありません。 -
デバッグに適した可読性の高いコンパイル出力を生成する場合は、オプションで
build
コマンドとともに--optimize=none
フラグを使用できます。コンポーネントのloader.js
ファイルには縮小アプリケーション・ソースが含まれますが、元のソースの改行および空白が保持されるため、内容の可読性は向上します。
Webコンポーネントのパッケージ化
コマンドライン・インタフェースで、縮小Oracle JET Webコンポーネントの共有可能なzipファイル・アーカイブを作成できます。
/web
のcomponents
サブフォルダに含まれる生成済出力のアーカイブ・ファイルを作成できます。スタンドアロンWebコンポーネントまたはリソース・コンポーネントをビルドしたら、JETツールを使用してpackage
コマンドを実行し、Webコンポーネントのコンパイル済の縮小ソースを含むzipファイルを作成します。ojet package component my-web-component-name
/jet-composites/<packName>
サブフォルダ内の出力にはネストされたコンポーネント・フォルダが含まれ、ツールによって各コンポーネントに独自のzipファイルが確保されるためです。ojet package pack my-JET-Pack-name
package
コマンドは、/web/components
ディレクトリからコンポーネントの縮小ソースをパッケージ化し、それを含むアプリケーションのルートにある/dist
フォルダ内のzipファイルとして使用できるようにします。このzipファイルの/min
サブフォルダには、指定されたコンポーネントとそのコンポーネントの縮小バージョンの両方が含まれます。
参照コンポーネントでは縮小やバンドルは必要ないため、ビルドする必要はありません。コンポーネントのフォルダの単純なzipアーカイブを作成することで、参照コンポーネントをアーカイブできます。
パッケージ化されたコンポーネントのzipアーカイブは、たとえば、「Oracle Component ExchangeへのWebコンポーネントの公開」に示されているように、Oracle Component Exchangeでの共有に適しています。公開するコンポーネントを編成するために、JETツールにより、JETパックのcomponent.json
ファイルのversion
プロパティの値が追加され、個々のコンポーネントがdist
フォルダ内の生成されたzipに追加されます。たとえば、version
値が1.0.0
で、パック内の個々のコンポーネント(my-widget-1
など)のバージョン値も1.0.0
であるコンポーネント・パックmy-component-pack
がある場合、生成されたファイルのzipファイル名は、次のようになります:
appRootDir/dist/
my-web-component-name_1-0-0.zip
my-component-pack_1-0-0.zip
my-component-pack-my-widget-1_1-0-0.zip
my-component-pack-my-widget-2_1-0-0.zip
my-component-pack-my-widget-3_1-0-0.zip
コンポーネントをCDNにアップロードするときに、アーカイブ・ファイルも生成できます。CDNの場合は、「CDNでのWebコンポーネントのアップロードおよび消費」で説明しているように、コンポーネントを共有するために追加のステップが必要です。