はじめに
OutSystems では外部ライブラリを導入することができますが、
複数の JS / CSS / 画像リソースを持つライブラリの導入については、
情報が少なく、ハマりやすいポイントが多いと感じました。
特に企業案件では、以下のような制約があることが多いと思います。
- 外部 CDN の利用禁止
- 本番環境からインターネット通信不可
- 利用ライブラリのバージョン固定が必須
その結果、
「ライブラリ自体は問題なさそうなのに、なぜか画面に反映されない」
という状況に陥りがちです。
本記事では、
jQuery + プラグイン(複数の JS / CSS / 画像を含むライブラリ)を
CDN を使わずに OutSystems(Reactive Web)へ取り込み、
実際に動作するプロトタイプを作成するまでの手順をまとめます。
Reactive Web 特有のハマりポイントや考え方も含めて解説します。
今回作るプロトタイプ
- jQuery プラグインを使った日付入力 UI
- テキストボックスをクリックするとカレンダーが表示される
- CDN は使わず、すべてローカルリソース
使用環境
- OutSystemsバージョン:11
- Service Studioバージョン:11.55.46
- ブラウザ:MicroSoft Edge
- アプリ種別:Reactive Web App
使用ライブラリ
- jQuery(OutSystems 標準)
- jQuery UI
- JS
- CSS(+画像リソース)
使用するファイル構成
今回は以下のファイルを使用します。
jquery-ui.min.jsjquery-ui.min.css-
images/(CSS から参照される画像)
※ jQuery 本体は OutSystems に標準で含まれているため追加しません。
ライブラリのダウンロード
- jQuery UIから Datepicker を含むビルドをダウンロード
- zip を展開し、以下を確認
- js ファイル
- css ファイル
- images フォルダ
OutSystems への取り込み
-
Service Studioの Interface > Scripts > (右クリック)Import Script でjquery-ui.min.jsを追加

-
Service Studioの Data > Resources > (右クリック)Import Script でjquery-ui.min.cssとimages下のpngを追加
階層は自由です。今回はライブラリごとにフォルダ分けるイメージでやります。

-
Resourcesに追加したリソースのデプロイ先を指定
Target Directoryに指定がなければScriptの下に展開されます。
今回、CSSはTarget Directoryの指定なし、ImagesフォルダにあったpngだけImagesの下に入るように設定します。
Resourcesでは階層を作れませんが、ここで階層を再現することができます。

画面への適用(Reactive Web)
CSS の設定
- 新しい画面を作成
- 画面のStyleSheetにCSSの@importを追加
@import url("/<モジュール名>/jquery-ui.min.css");
画面の作成
- 画面にInput Widgetを置く
InputTypeはTextのままにしてください - ローカル変数の作成
このままだとエラーが出るのでローカル変数を作ります。
型はTextです。 - Classの設定
要素を特定するためStyle Classesに独自Classを設定しておきます。
JavaScript の設定
- 画面のRequired ScriptsにjQueryとjquery-ui.min.jsを設定
- 画面のOnRenderで先ほどクラスを付けた要素に対して以下のJavaScriptを設定
OnRenderが適切かどうかは導入するライブラリによると思います。
ライフサイクルを意識しながら適切なタイミングで呼ぶようにしてください。
$(function() {
$(".js-datepicker").datepicker();
});
ここまで出来たらPublishしましょう!
動作確認
InputWidgetをクリックするとカレンダーが出るようになったかと思います。

おわりに
今回は練習として jQuery UI の Datepicker を使用しましたが、
他の外部ライブラリでも JavaScriptやCSS から参照されるリソースの階層構造を意識すれば、
同様の手順で導入できると考えています。
なお、OutSystems では DOM を直接操作するライブラリの使用は
推奨されていません。
そのため、
「本当にそのライブラリを使う必要があるのか」
「OutSystems 標準機能やコンポーネントで代替できないか」
を検討した上で導入することが重要だと感じました。
