# 機能シンクレット

機能Thinkletは、JavaScriptを使用してカスタムデータ変換と計算を可能にします。 ビルトインのThinkletはほとんどのタスクを処理しますが、関数Thinkletは複雑なデータ操作やワークフローのロジックに柔軟性を提供します。

### 仕組み

データを変換し、洞察を生み出し、ワークフローの決定を自動化するためにJavaScriptコードをFunctionシンクレットに追加してください。 Functionは大規模な環境でもスケーラビリティが確保されるよう、バッチ実行されます。 その結果、実行は即座に開始される保証はありません。 従って、Functionシンクレットは時間に敏感な操作には使用すべきではありません。

### 使用ケース

関数Thinkletを使用するのに適したケース：

* **データ変換**: 値を変換し、データをフォーマットし、新しいメトリクスを計算します。
* **時間計算**: 時間差を求め、継続時間を追跡します。
* **意思決定の自動化**: 計算された出力を使用して、条件付きワークフローのロジックを駆動します。

### 制限

パフォーマンス、セキュリティ、および予測性を確保するために、Function thinkletは次のルールを適用します:

* Function thinkletは、安全で分離された環境で実行されます。 HTTPリクエストの送信、外部サービスやAPIへのアクセス、ワークフロー外のシステムとの連携はできません。 この制限は、実行が安全で一貫性があり、セキュリティポリシーに準拠していることを保証します。
* Function thinkletは、すべてのロジックを5秒以内に完了しなければなりません。 この時間制限を超えるスクリプトは、自動的に終了されます。 その結果、人工的な遅延を導入したり、Function thinkletを使用してワークフロー実行を一時停止することはサポートされていません。

Function thinkletは、迅速なローカルデータ処理と意思決定のためにのみ使用してください。 遅延や外部とのやり取りを伴う高度なユースケースについては、専用のthinkletの使用を検討してください。

<figure><img src="/files/n7mNfbXqeUU22uGraXtQ" alt=""><figcaption></figcaption></figure>

## 関数Thinkletの設定

{% hint style="info" %}
[AIで生成](#generating-javascript-with-ai-for-function-thinklets) されたJavaScriptは、Function thinkletを定義します。 最良の結果を得るには、このページの例に従ってAIプロンプトを構築してください。
{% endhint %}

生データを意味のあるフォーマットに変換することで、第三者の統合を簡素化し、例えば、2つの日付の間の日数を計算することができます。作業回避策や外部ツールを使用せずに対応可能です。

<div align="left"><figure><img src="/files/ZgukhkxMYz9b5q634WoO" alt="" width="375"><figcaption></figcaption></figure></div>

* **名前**: 関数Thinkletのためのユニークな名前を入力します。
* **ID**: この名前に基づいて、システムがIDを自動生成します。
* **説明 (オプション)**: Thinkletの目的とその機能について説明します。 この情報は、ワークフローの利用に慣れていない他のユーザーに役立ちます。
* **パラメータ**: **パラメータを追加**を選択し、最大5つのシンクレットパラメータを構成します。これらは関数のロジックの入力パラメータにもなります。
  * **ID**: 入力パラメーターのIDを定義します。 バリデーションロジックは、JavaScriptがサポートする文字のみを許可します。
  * **値**：対応するパラメータ値を設定します。データベース値、別のシンクレットの出力、グローバルパラメータ、またはカスタム値を使用できます。
    * 環境固有のデータを入力として使用するために、シンクレットのパラメータ値として[\[マニュアルカスタムフィールド\]](https://docs.nexthink.com/platform/ja/configuring_nexthink/configuring-your-platform/administration/content-management/custom-fields-management.md#customfieldsmanagement-choosingmanualcustomfieldtypemanual) - \`ユーザー\`または\`デバイス\`の属性を選択することができます。
* **出力**：最大5つの出力を構成するために、**出力を追加** を選択します。
  * **名前**: 望ましい出力のためのユニークな名前を入力します。
  * **ID**：名前に基づいてシステムが自動的にIDを生成します。
* **JavaScript**: 入力パラメータに基づいて関数のロジックを定義するJavaScriptコードを書いてください。 スクリプトは、定義された出力のIDを持つ出力も定義すべきです。
  * **ファンクション**シンクレットのJavaScriptを**AIで生成する**ことができます。

### Function thinkletのためのJavaScriptをAIで生成する方法

{% hint style="info" %}
システムはAI生成されたコンテンツや洞察を示すために✦スパークルアイコンを表示します。 AIは急速に進化し、素晴らしい洞察を提供していますが、まだ誤りが起こることもあります。 Nexthinkは、精度を確保し情報に基づいた意思決定をサポートするために、結果を検証することを推奨します。 詳細については、[Global AI Hub](https://docs.nexthink.com/legal/global-ai-hub)ドキュメントを参照してください。
{% endhint %}

AIでワークフロー**関数**のための**JavaScript**を生成するには：

1. **AIで生成** ボタンをクリックします。
2. 入力パラメータ、期待される出力、および必要な変換を記述した**プロンプト**リクエストを挿入します。 [プロンプトの例](#javascript-examples-for-function-thinklets-prompts-and-codes)を参照してください。
3. **説明**を確認し、生成された**コード**が論理要件を満たしていることを確認します。 論理の更新が必要な場合は、プロンプトを変更して関数を再生成してください。

AIコードジェネレーターは、JavaScriptの**コード構造と構文**に従って関数のシンクレットを生成します。

<details>

<summary>JavaScriptの<strong>コード構造と構文</strong>に関する関数シンクレット</summary>

JavaScriptが正しく動作し、デバッグが簡単になるように、これらの構文ルールに従ってください：

* `inputs.parameter_ID`を使用して、設定内でアクセス入力パラメータを定義します。
* Assign output values with the syntax `outputs.output_ID`
* Include useful information in the Workflow execution timeline for troubleshooting by using `nxLogger.log()`

```javascript
Access input parameters
const param1 = inputs.parameter_ID_1;
const param2 = inputs.parameter_ID_2;
...
const paramN = inputs.parameter_ID_5; // Up to 5 parameters
Logic for transformations
outputs.output_1 = /* your logic here */;
outputs.output_2 = /* your logic here */;
...
outputs.output_5 = /* your logic here */;
Output any results for troubleshooting
nxLogger.log("Name the output" + output_1);
```

</details>

<details>

<summary>関数シンクレットで<strong>未サポート</strong>の関数とオブジェクト</summary>

以下のグローバル関数とオブジェクトはサポートされていません：

* `setTimeout`
* `setInterval`
* `setImmediate`
* `clearTimeout`
* `clearInterval`
* `clearImmediate`
* `process`
* `require`
* `Buffer`
* `console`
* `process.nextTick`

</details>

<figure><img src="/files/396nCCTbIGyLCy9RXkcR" alt=""><figcaption></figcaption></figure>

### シンクレットのJavaScript例：プロンプトとコード

以下は、JavaScript の AI プロンプトとコーディングの例です：

<details>

<summary>AIでJavaScriptを生成するためのプロンプトの例</summary>

\_保証終了日に基づいて、保証が終了するまでの日数を計算します。 既に期限が切れている場合は、0を出力します。

</details>

<details>

<summary>関数シンクレット内のパスワード有効期限チェックのユースケース</summary>

このコード例は、関数シンクレット内でパスワード有効期限チェックを実装する方法を示しています。

```javascript
// 入力パラメータにアクセスする
const lastUpdate = inputs.last_update_date;
 
// パスワードの有効期間を定義する（90日）
const validityDays = 90;
const expirationDate = new Date(lastUpdate);
expirationDate.setDate(expirationDate.getDate() + validityDays);
 
// 現在の日付を取得する
const now = new Date();
 
// 残り日数を計算する
const timeDiff = expirationDate - now;
const daysLeft = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
 
// 出力を設定する
outputs.days_left = daysLeft;                  // パスワード変更までの日数
outputs.if_expired = daysLeft <= 0;             // すでに切れているかどうか
 
// トラブルシューティング用の中間結果を出力する
nxLogger.log("残り日数: " + daysLeft);
nxLogger.log("通知が必要か: " + outputs.output_2);

```

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nexthink.com/platform/ja/user-guide/workflows/creating-workflows/configuring-thinklets/function-thinklet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
