メインコンテンツへスキップ

はじめに

コードエンジンは、Domoネイティブのランタイム環境で、JavaScriptまたはPythonコードを実行します。コードエンジンでは、ワークフローやその他のDomoのAppで使用できる関数を記述、テスト、配布できます。 Domoでは、一般的なパッケージの ライブラリー と、コードエンジンにアクセス権のあるすべてのユーザーがアクセスできる共通の統合およびサービスに関連する関数を提供しています。カスタムコードを使用して関数を作成し、インスタンスで自動化されたサービスを実行することもできます。

必要な許可

以下の許可は、Domo環境でのコードエンジンに対するユーザーベースの権限を付与します。また、コードエンジンに対する許可を持つユーザーは、コードエンジン内の1つ以上の特定のパッケージに対して、パッケージを操作する権限を持っている必要があります。権限については、後述の「 権限 」を参照してください。
  • コードエンジンのパッケージを管理 — インスタンス内の任意のコードエンジンパッケージに対して任意のアクションを実行できます。この許可は、管理者またはコードエンジンの管理を手伝うすべてのユーザーに付与する必要があります。
  • コードエンジンのパッケージを作成 — 新しいコードエンジンパッケージを作成できます。この許可は、インスタンス内のコードエンジンリポジトリに新しい関数パッケージを作成して追加する必要があるすべてのユーザーに付与する必要があります。
    注記: インスタンスに対してこれらの許可のいずれかを有効にする場合は、Domoアカウントチームにお問い合わせください。非インスタンス管理者ユーザーに付与できる権限については、この記事の「 権限 」セクションを参照してください。

コードエンジンにアクセスする

ナビゲーションヘッダーからコードエンジンにアクセスするには、 [その他] > [ワークフロー] を選択してワークフローのランディングページを表示します。 左側のナビゲーションで、 [コードエンジン] を選択します。
コードエンジンのホームページが表示されます。
このページのトップへ

ホームページ

コードエンジンホームページの主な機能は、 権限 にもとづいてそのユーザーが利用できるすべてのコードエンジンパッケージを表示する リスト です。ここから、新しいパッケージを作成したり、コードエディターにアクセスして既存のパッケージを編集したりすることもできます。 左側のナビゲーションから、補完的な機能( [ワークフロー][フォーム][タスクセンター] )にアクセスできます。 これらの機能のオプションが左側のナビゲーションに表示されない場合は、インスタンスで有効になっていません。有効化については、Domoアカウントチームにお問い合わせください。
このページのトップへ

コードエンジンリポジトリリスト

リポジトリリストは、コードエンジンホームページの主な機能です。リストの各行は、個々のパッケージを表します。リスト内の列は以下の通りです。
  • [パッケージ名]/[説明] — パッケージのタイトルと簡単な説明が表示されます。
  • [所有者] — パッケージの作成者/所有者の名前とアバターが表示されます。
  • [実行時間] — パッケージの実行時間(またはプログラム言語)が表示されます。
  • [最終保存] — パッケージが最後に更新された日付が表示されます。
  • [作成] — パッケージが作成された日付が表示されます。
コードエディター でこのパッケージを開くには、行の任意の場所を選択します。 このページのトップへ

カスタムパッケージを作成する

以下の手順を実行すると、コードエンジン ホームページ からカスタム関数パッケージを作成できます。
  1. [+新しいパッケージ] を選択します。 このオプションが無効になっている場合は、 必要な許可 を持っていることを確認してください。許可を持っているにもかかわらず、新しいパッケージを作成できない場合は、Domoアカウントチームまたは Domoサポート にお問い合わせください。
    [新しいパッケージを作成] モーダルが表示されます。
  2. (必須) [パッケージ名] および [パッケージの説明] フィールド に入力します。
  3. (必須) [言語を選択] ドロップダウンからオプションを選択します。オプションは[JavaScript]と[Python]です。
  4. (オプション)サムネイルをアップロードして、パッケージを見分けやすくすることができます。
  5. [新しいパッケージを作成] を選択すると、 コードエディター にパッケージが表示され、 [キャンセル] を選択すると、ホームページに戻ります。
このページのトップへ

新しいパッケージバージョンを作成する

関数の更新や新しい関数の追加など、パッケージに変更を加える必要がある場合は、パッケージの新しいバージョンを作成して更新を行う必要があります。コードエンジンでパッケージを開くか、ワークフローでパッケージモーダルにアクセスすると、パッケージの最新バージョンがデフォルトになりますが、必要に応じて以前のバージョンを選択できます。 コードエディター で新しいパッケージバージョンを作成するには、以下の手順を実行します。
  1. コードエディタでパッケージを開きます。
  2. [展開]
[新しいバージョンを作成] を選択すると、新しいバージョンモーダルが表示されます。
Screenshot 2023-05-04 at 5.12.16 PM.png
  1. [コピー元のバージョン:] ドロップダウンでパッケージの対象のバージョンを選択して、そのすべてのコンテンツを新しいバージョンにコピーします。これには、構文、変数、およびメタデータが含まれます。
Screenshot 2023-05-04 at 5.13.17 PM.png
  1. [バージョン] フィールドに、「セマンティックバージョニング」に従って、必要なバージョン番号を入力します(公式の 仕様 を参照してください)。このフィールドにはデフォルトの値が含まれますが、変更することもできます。
    Screenshot 2023-05-09 at 2.56.29 PM.png
  2. (オプション) [バージョンの説明] フィールドに詳細を入力します。
  3. [新しいバージョンを作成] を選択して変更を保存し、新しいバージョンのパッケージを作成します。 新しいバージョンがパッケージのデフォルトバージョンになりますが、以前のバージョンにアクセスする場合は、コードエディターでパッケージを開き、 バージョンリスト から別のバージョンを選択できます。
このページのトップへ

コードエディター

コードエディターは、コードの記述、関数の入出力の設定、およびリアルタイムでの関数のテストを行う統合開発環境(IDE)の役割を果たします。パッケージには複数の関数を含めることができます。コードエディターで各関数をコーディングし、設定する必要があります。

パッケージ情報/アクションバー

コードエディターの上部には、パッケージ情報/アクションバーがあります。以下のリストでは、このエリアの要素とその様々な関数について説明します。
  • 戻る矢印 — コードエンジン ホームページ にリダイレクトされます。
  • パッケージのサムネイル — パッケージに関連付けられた画像。
  • パッケージタイトル/説明 — パッケージの作成時にパッケージに指定されたタイトルと説明。
  • 最終保存 — パッケージバージョンが最後に保存された日付。
  • 実行時間/言語 — スクリプトの記述に使用されたプログラミング言語。
  • 所有者のサムネイル — パッケージ所有者のアバター。
  • [シェア]ボタン — 権限 モーダルを開きます。
  • [ダークモード]トグル — コードエディターのダークモードを有効/無効にします。
  • バージョンリスト — 表示/編集するパッケージのバージョンを選択できます。
  • 保存 — コードの構文と変数が有効な場合は、パッケージへの変更を保存できます。
  • 保存オプション — パッケージには、以下のオプションがあります。
    • [新しいバージョンを作成] — [新しいバージョンを作成] モーダルを開きます。詳細については、「 新しいパッケージバージョンを作成する 」を参照してください。
    • [現在のパッケージを削除] — パッケージを完全に削除します。
    • [現在のバージョンを削除] — バージョンを完全に削除します。
    • [保存してデプロイ] — コード構文と変数が有効な場合は、変更が保存され、新しいバージョンのパッケージが展開されます。これにより、展開されたバージョンの編集が無効になり、ワークフローなどのほかのDomo機能で使用できるようになります。
このページのトップへ

権限

コードエンジン内で、権限モーダルを使用して、特定のパッケージに対してアクションを実行するための権限をほかのユーザーまたはグループに付与できます。すべての権限はパッケージレベルで付与されます。 以下のリストで、様々な権限またはアクセスレベルについて説明します。
  • 管理者 — ユーザーがパッケージで任意のアクションを実行できるようにします。この権限は、インスタンス内のすべてのパッケージへのアクセス権がある 「コードエンジンのパッケージを管理」の許可 とは異なります。
  • 削除 — パッケージまたはパッケージのバージョンを削除できます。
  • 読み込む — パッケージのメタデータとそのバージョンへの閲覧専用のアクセス権を許可します。
  • 書き込む — パッケージを編集できます。
  • シェア — 別のユーザーに同等またはそれ以下のパッケージへのアクセス権を付与できます。
  • 実行 — パッケージ内の関数を実行できます。
  • コンテンツを読み込む パッケージのコードコンテンツ、そのバージョンへの閲覧専用のアクセス権を許可します。
  • コンテンツを更新 — パッケージのコードコンテンツとメタデータ、そのバージョンを編集できます。
権限を付与するには、次の手順を実行します。
  1. パッケージ情報/アクションバーで [シェア] を選択すると、権限モーダルが表示されます。
    権限モーダルには、検索バー、パッケージへの [アクセス権のあるユーザー] のリスト、パッケージへの[アクセス権のないユーザー] のリストが含まれます。デフォルトでは、パッケージの所有者は常にパッケージに対して管理者権限を持っています。
  2. 権限を編集するユーザーまたはグループの名前を検索バーに入力します。インスタンス内でユーザーまたはグループが見つかった場合は、アクセス権のないユーザーのリストの一番上にその名前が表示されます。権限メニューがユーザー名またはグループ名の横に表示されます。デフォルトの権限は[アクセス権がありません]です。
  3. ユーザーまたはグループに付与する権限を選択します。
  4. [保存] を選択して変更を保存します。
このページのトップへ

サイドナビゲーション

コードエディターのサイドナビゲーションを使用すると、パッケージ自体またはエディターのコードに関連するメタデータと変数を表示および設定できます。
サイドナビゲーションには2つのセクションがあります。セクションを選択すると、サイドパネルが展開され、そのセクションのオプションが表示されます。

関数設定

[関数設定] セクションでは、パッケージ内の関数の説明、入力、およびオプションの出力を設定できます。パッケージには複数の関数を含めることができます。 関数を保存できるようにするには、入力変数の名前とタイプを保存する必要があります。
[関数設定] セクションの要素については、以下で説明します。

要素

説明

[関数を選択] ドロップダウン

このリストには、コードエディターで解析されて見つかったすべての関数が表示されます。パネル内のほかのすべてのフィールドは、選択した関数にもとづいています。

記述した関数がリストに表示されない場合は、 [再スキャンの関数] を選択して、コードエンジンが新しい関数を解析して検索できるようにします。

関数の詳細フィールド

関数の目的の簡単な要約。

[入力] タブ

このタブでは、 [入力を追加] を選択して入力パラメーターを関数に追加できます。入力ごとにデータタイプを指定し、その名前を入力する必要があります。データタイプが指定されていない場合は、フィールドに赤の境界線が表示され、関数設定を保存できません。

データタイプを選択して名前を入力したら、 [保存] または [キャンセル] を選択します。これはコードエディターでも実行できます。詳細については、後述の「 入力変数と戻り値のタイプ 」を参照してください。

[出力] タブ

このタブでは、出力パラメーターを関数に追加できます。変数タイプを選択し、その名前を入力します。 [保存] または [キャンセル] を選択します。

入力パラメーター

関数で宣言されたすべての入力パラメーターのリスト。

出力パラメーター

関数で定義された出力パラメーター。指定できる出力パラメーターは1つのみです。正常に実行される関数を構築するのに出力パラメーターは必須ではありませんが、戻り値を取得して関数が正常に実行されたかどうかを確認できるように、出力パラメーターを追加することを推奨します。

リストですか?

[パラメーターを編集] モーダルで、出力変数が指定されたタイプの配列である場合は、このチェックボックスをオンにします。

再スキャンの関数

パッケージを再スキャンして関数と変数を解析します。
入力変数と戻り値のタイプ
入力パラメーターを設定する場合は、各パラメーターまたは入力変数のデータタイプを選択する必要があります。利用できるデータタイプには以下があります。
  • アカウント(このデータタイプの処理は若干異なります。後述の「 [アカウント]データタイプ 」を参照してください)
  • ブール型
  • DataSet
  • 日付
  • 日時
  • 小数
  • 期間
  • グループ
  • 数値
  • オブジェクト
  • ユーザー
  • テキスト
  • 時間
これらのオプションには、総じて分かりやすい名前が付けられています。例えば、テキストベースの文字列を格納する必要がある場合は、 [テキスト] タイプを使用します。 その他の設定オプションについては、「 パラメーターの高度な編集 」を参照してください。
注記: 各入力変数のデータタイプを定義することは、コードエンジンの外部で関数を使用する場合に重要です。そのため、入力変数のデータタイプを定義せずに関数を保存することはできません。例えば、ワークフローでコードエンジンパッケージから関数を選択すると、ワークフローのアクションを実行できます。ワークフローで関数を選択すると、ワークフローの設定パネルにコードエンジン関数の入力と出力が表示されるので、ワークフローの変数を関数の入力に、関数の出力をワークフローの変数にマップできます(設定済みの関数の出力がある場合)。出力パラメーター は必須ではありません。1つ以上の出力パラメーターを追加する場合は、関数を使用しているワークフローで出力をマップできるように、コードエンジンで各出力に戻り値のタイプを定義する必要があります。
このページのトップへ
パラメーターの高度な編集
パラメーターの高度な編集オプションにアクセスするには、 [入力パラメーター] リストでそのパラメーターの 詳細 (縦三点メニュー)を選択し、 [高度な編集] を選択します。出力パラメーターを定義した場合は、 [出力] タブで 詳細 (縦三点メニュー)> [高度な編集] を選択すると、高度な編集オプションにアクセスできます。
[パラメーターを編集] モーダルが表示されます。
モーダルでは、パラメーター名とデータタイプを変更したり、パラメーターを指定したデータタイプのリストにしたり、変数をNULL値にできるようにしたりできます。デフォルト値を追加または削除することもできます。
[アカウント]データタイプ
[アカウント]データタイプを選択した場合は、データプロバイダーを選択する必要があります。この例では、システムはGoogleスプレッドシートから取得しているため、Googleスプレッドシートがデータプロバイダーです。
データプロバイダーを保存したら、そのパラメーターが表示されている関数に移動し、 [関数を開始] を選択します。
[関数を開始] モーダルで各必須フィールドに値を入力します。 この例では、Googleアカウントを選択し、シートIDを追加しています。
[関数を開始] を選択して値をテストします。 関数が正常に実行されると、回答が [回答] パネルに表示されます。
[リスト]タイプ
[リスト] をデータタイプとして選択すると、入力変数または戻り値のタイプがリストを含むように定義されます。リストの内容は定義されません。別のタイプのリストを定義する場合は、そのタイプを選択して、 [リストですか?] チェックボックスをオンにすることができます。パラメーターは、そのタイプの変数のリストとして定義されます。
[オブジェクト]タイプ
[オブジェクト] タイプは、複雑なタイプを格納する場合に便利です。オブジェクトは、[オープン]または[定義されたオブジェクト]にできます。
  • [オープン] — オープンオブジェクトには任意のタイプのデータを格納できますが、オブジェクトに格納されるデータは明示的に定義されません。これは、複雑なデータを返すAPIを操作する場合に便利です。
  • [定義されたオブジェクト] — 定義されたオブジェクトの場合は、モーダルで [子プロパティを追加] を選択してオブジェクトの子プロパティを定義します。
    子プロパティを追加すると、オブジェクトの子プロパティごとに行が開きます。ここでは、オブジェクトの各子プロパティのパラメーターの名前とデータタイプを定義できます。 例えば、州、都市、番地(これらはすべてテキストタイプ)、郵便番号(数値タイプ)の子プロパティを持つ住所オブジェクトを作成できます。
このページのトップへ

パッケージ情報

[パッケージ情報] セクションには、以下のメタデータが含まれています。
  • [名前] — 関数名。
  • [作成] — パッケージバージョンが作成された日付。
  • [最終導入] — パッケージバージョンが展開された日付。
  • [言語] — スクリプトを記述するプログラミング言語。
  • [所有者] — パッケージ所有者の名前とアバター。
  • [説明] — パッケージの簡単な説明。
このページのトップへ

関数をテストする

関数のコードとパラメーターを入力した後、展開前に関数をテストできます。

必要条件

関数の構文と変数に問題がないことを確認します。例えば、パラメーターに赤の境界線が表示されている場合は、タイプが定義されており、未解決の設定の問題がないことを確認します。
コードエディタで [関数を開始] を選択して、開始モーダルを開きます。
モーダルには、設定されているすべての変数とそのデフォルト値のリストが表示されます。ここでは、現在のテスト実行のデフォルト値を変更できますが、変更はこのモーダルの外では保持されません。
注記: デフォルト値を永続的に変更する場合は、サイドナビゲーションの [関数設定] セクションでその変数の > [高度な編集] を選択する必要があります。
関数をテストする準備ができたら、モーダル内の [関数を保存/開始する] を選択します。 関数が正常に終了すると、緑の完了メッセージと紙吹雪のGIFが表示されます。関数が正常に実行されない場合は、エラーメッセージが赤で表示されます。 テスト実行のログは、コードエディターの下の [コンソール] エリアに表示されます。関数から返された出力は、 [回答] エリアに表示されます。
console and response.jpg
このページのトップへ

コードエンジンライブラリー

コードエンジンライブラリーには、内部および外部のAPIコールに特化した便利なメソッドがいくつか含まれており、コードエンジンパッケージのグローバルスコープで使用できます。ライブラリーを利用するには、必要な「codeengine」コールをパッケージに追加します。ライブラリーの利用方法の詳細については、 codeengine.sendRequestcodeengine.getAccountcodeengine.axios を参照してください。

codeengine.sendRequest

「codeengine」ライブラリーには、Domoの内部APIを呼び出すことができる「sendRequest」というメソッドが含まれています。「sendRequest」は、非同期コールを行うほかの多くのhttpリクエストライブラリーと同様に機能します(通常は、GET、POST、PUT、DELETEなどのリクエストメソッドを使用します)。「sendRequest」メソッドを使用すると、DataSet、ユーザーとグループ、カードとダッシュボードなど、様々なDomo APIを呼び出すことができます。 Domo DataSetパッケージに組み込まれている関数の例を以下に示します。
const codeengine = require("codeengine"); /** * Retrieves the metadata for the specified dataset. * * @param dataSetId string The dataset id * @returns {} The dataset metadata */ function getDataSetMetadata(dataSetId) { const url = `api/data/v3/datasources/${dataSetId}?part=core,permission,status,pdp,rowcolcount,certification,functions`; return codeengine.sendRequest("get", url).catch(console.error); }
axiosライブラリーを使用して外部から呼び出す場合のように、認証情報を使用せずにリクエストを行っていることに注目してください。すべての「sendRequest」コールは、コードエンジンサービスによってインターセプトされ、リクエストを行っている認証済みユーザーの認証情報を使用して挿入されます。 このページのトップへ

codeengine.getAccount

これはTwilioパッケージに組み込まれている関数の例で、「codeengine」ライブラリーの「getAccount」メソッドを利用します。キーは以下のコードブロックです。
const codeengine = require("codeengine");  
  
function accountExample(twilioAccount) {  
const account = await codeengine.getAccount(twilioAccount.id);  
const {accountSID, password} = account.properties;  
}
以下は、「codeengine」ライブラリのインポートからも利用できるaxiosライブラリを使用して外部からリクエストを作成する際の使用例です。
const codeengine = require("codeengine");  
  
async function sendSMS(twilioAccount, to, from, body) {  
// get the account by account id  
const account = await codeengine.getAccount(twilioAccount.id);  
// access the properties of the account. These will vary from account type so it's   
// important to check what is returned. In this case it's `accountSID` and `password`  
const {accountSID, password} = account.properties;  
  
const url = `https://api.twilio.com/2010-04-  
01/Accounts/${accountSID}/Messages.json?To+${to}&From=${from}&Body=${encodeURIC  
omponent(body)}`;  
  
const apiBody = {  
To: to,  
From: from,  
Body: body,  
};  
  
const requestOptions = {  
headers: {  
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',  
Authorization:  
'Basic' + Buffer.from(`${accountSID}:${password}`).toString('base64'),  
},  
};  
  
try {  
await axios.post(url, apiBody, requestOptions)';  
  
return true;  
} catch (error) {  
console.error(error);  
throw error;  
}  
}
この例の入力「twilioAccount」は、実行時に関数に渡されるアカウントを表します。アカウントを設定するには、入力を関数に追加し、タイプを「アカウント」に設定して、アカウントタイプを選択します。 [入力を追加] を選択します。
add input.jpg
入力に名前を付け、タイプとして [アカウント] を選択します。
Screenshot 2025-01-16 at 5.07.16 PM.png
[アカウント] タイプを選択すると、アカウントデータプロバイダーを選択できる [パラメーターを編集] モーダルが開きます。
Screenshot 2024-11-08 at 2.53.14 PM (1).png
[保存] を選択します。入力が、選択したデータプロバイダーを確実に使用するアカウントになります。コードエンジンまたはワークフローで関数を実行する場合、入力は同じデータプロバイダーから行う必要があります。 このページのトップへ

codeengine.axios

Twilioパッケージに組み込まれた、テキスト送信用の関数の例です。axiosを使用して、Twilio APIにPOSTリクエストを送信します。Domoアカウントも利用されます。詳細については、「codeengine.getAccount」を参照してください。
const codeengine = require(“codeengine”); async function sendTwilioSms(to, from, body) { const account = await codeengine.getAccount(“Twilio”).then(a => { return a.properties; }); const url = `https://api.twilio.com/2010-04-01/Accounts/${account.properties.SID}/Messages.json`; const data = new URLSearchParams(); data.append(‘To’, to); data.append(‘From’, from); data.append(‘Body’, body); const requestOptions = { method:POST’, headers: { ‘Content-Type’:application/x-www-form-urlencoded;charset=utf-8’, ‘Authorization’:Basic ‘ + Buffer.from(`${SID}:${TOKEN}`).toString(‘base64’) }, data }; try { const response = await codeengine.axios(url, requestOptions); const jsonResponse = await response.data; if (response.ok) { console.log('SMS sent successfully:', jsonResponse); return jsonResponse; } else { console.error('Error sending SMS:', jsonResponse); throw new Error(jsonResponse.message); } } catch (error) { console.error('Error:', error); throw error; } return jsonResponse; }
このページのトップへ 日本語