> For the complete documentation index, see [llms.txt](https://docs.nexthink.com/platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nexthink.com/platform/ja/user-guide/remote-actions/remote-actions-in-finder-classic/writing-scripts-for-remote-actions-on-mac-for-finder-classic.md).

# Finder（クラシック）用のMacでのリモートアクションのスクリプト作成

{% hint style="info" %}
Nexthink FinderはWindows専用のデスクトップアプリケーションであり、その機能は現在Nexthinkのwebインターフェース内で利用可能です。 Nexthinkはブラウザから直接使用でき、大多数の機能は追加のデスクトップアプリケーションを必要としなくなりました。
{% endhint %}

macOSコンピュータ上のリモートアクションのペイロードは、従業員のデバイス上で実行されるBashスクリプトです。 Bashは、macOSのような多くのUNIX系オペレーティングシステムによってサポートされているコマンドラインシェルおよびスクリプト言語であり、タスクの自動化および構成管理に適しています。 Bashスクリプトは、デバイスからのオンデマンドデータの取得、自己修復タスクの実行、またはデバイスの構成の変更に理想的であり、これらはリモートアクションの典型的なユースケースです。

この記事では、読者がBashスクリプトに精通していることを前提としています。

詳細については、[Remote actions group in Community](https://community.nexthink.com/s/group/0F92p000000kI80CAE) を参照してください。

## エンコーディング <a href="#writingscriptsforremoteactionsonmacforfinder-classic-encoding" id="writingscriptsforremoteactionsonmacforfinder-classic-encoding"></a>

自分のBashスクリプトをリモートアクションのために書くには：

* スクリプトのテキストを含むファイルをUTF-8、BOMなしでエンコードします。
* コードの各行をUNIXシステムで通常使用される文字：LFで終了させます。

スクリプトファイルに正しいエンコーディングを指定しないと、従業員のデバイス上でリモートアクションを実行することができません。

## 自分のスクリプトを署名しパッケージ化する <a href="#writingscriptsforremoteactionsonmacforfinder-classic-signingandpackagingyourownscripts" id="writingscriptsforremoteactionsonmacforfinder-classic-signingandpackagingyourownscripts"></a>

セキュリティ上の理由から、NexthinkではmacOS用のリモートアクションのBashスクリプトに`codesign`ツールでデジタル署名することを求めています。 さらに、署名されたスクリプトを`tar.gz`ファイルとしてパッケージ化し、その拡張属性を保持します。 Finderは、macOSをターゲットとしたリモートアクション用スクリプトのインポート時に`tar.gz`拡張子のファイルのみを受け入れます。

ステップバイステップガイドについては、[Signing remote action scripts on Mac (classic)](/platform/ja/user-guide/remote-actions/remote-actions-in-finder-classic/writing-scripts-for-remote-actions-on-mac-for-finder-classic/signing-remote-action-scripts-on-mac-classic.md) ドキュメントを参照してください。

## 汎用スクリプトを書く <a href="#writingscriptsforremoteactionsonmacforfinder-classic-writinggenericscripts" id="writingscriptsforremoteactionsonmacforfinder-classic-writinggenericscripts"></a>

特定のユースケースに適応させるためにスクリプトを汎用的に書くことができます。 スクリプトを汎用化するには、Bashスクリプトの最初に形式的なパラメータを宣言します。 スクリプトを含むリモートアクションを編集する際、Finderでパラメータに実際の値を指定します。

汎用化は、カスタマイズを必要とするデジタル署名済みスクリプトに特に有用です。 スクリプトが署名された場合、テキスト内容のいかなる修正も署名を無効にします。 署名済みスクリプトを汎用化することで、パラメータを通じたカスタマイズが可能になります。 テキストは変更されずにパラメータによってカスタマイズされ、デジタル署名は有効なまま維持されます。 リモートアクションからスクリプトに渡されるパラメータの値がスクリプトの実際の動作を決定します。

Bash位置パラメータのためのスクリプト開始時にパラメータを宣言し、次のように特殊なコメントでそれらを囲みます。

```
# NXT_PARAMETERS_BEGIN
Parameter1=$1
Parameter2=$2
Parameter3=$3
# NXT_PARAMETERS_END
```

リモートアクション設定中にスクリプトをアップロードすると、システムはBashスクリプト内の特殊なNexthinkコメント間にあるパラメータを認識し、それらをスクリプトテキスト下の**Parameters**セクションに一覧表示します。 各パラメータ名の右に表示されるテキスト入力ボックスにパラメータの実際の値を提供します。

{% hint style="info" %}
実際の値は常にテキストとしてスクリプトに渡されます。 スクリプトが**string**以外の型でパラメータを宣言している場合、スクリプトが期待する型への変換が可能な値を提供してください。
{% endhint %}

## 出力変数 <a href="#writingscriptsforremoteactionsonmacforfinder-classic-outputvariables" id="writingscriptsforremoteactionsonmacforfinder-classic-outputvariables"></a>

スクリプトの実行により、オンデマンドデータとして保存したい出力を生成することがあります。 そのために、Nexthinkは従業員のデバイスにCollectorと同時にインストールされるBashスクリプト（`nxt_ra_script_output.sh`）を提供しています。 このスクリプトには、Engineに結果を書き込むための関数が含まれています。

Nexthinkスクリプトのリモートアクション出力用関数を使用するには、次のヘッダーをBashスクリプトの先頭に追加します。

```
#!/bin/bash
. "${NEXTHINK}"/bash/nxt_ra_script_output.sh
```

すべての書き込みメソッドは、出力名と書き込みたい値の2つの引数を受け取ります。 例えば、ディレクトリ内のファイル数をEngineに返したいとし、スクリプト内の変数`nfiles`にその数が保持されているとします。 `nfiles`の値を`FileNumber`という名前でEngineに出力として書き込むために、符号なし整数を書く関数を呼び出すには：

```
nxt_write_output_uint32 'FileNumber' $nfiles
```

\
リモートアクションのエディタはスクリプト内の出力を書き込む呼び出しを認識し、スクリプトテキスト下の**Outputs**セクションに出力変数をリストします。 出力ラベルを設定し、調査およびメトリクスでそれをどのように参照するかを示します。

各`write`メソッドの末尾が出力の型を示しています。 Bashは緩やかに型付けされた言語であるため、出力型はコンテキストによって解釈されます。 下記の表で利用可能なメソッドを確認してください。

| nxt 書き込みメソッド                     | 制約                                                          |
| -------------------------------- | ----------------------------------------------------------- |
| nxt\_write\_output\_string       | 0 - 1024文字（出力は大きい場合は切り捨て）                                   |
| nxt\_write\_output\_bool         | true / false                                                |
| nxt\_write\_output\_uint32       | <ul><li>最小: 0</li><li>最大: 4 294 967 295</li></ul>           |
| nxt\_write\_output\_float        | <ul><li>最小: -3.4E+38</li><li>最大: 3.4E+38</li></ul>          |
| nxt\_write\_output\_size         | <ul><li>最小: 0</li><li>最大: 3.4E+38</li></ul>                 |
| nxt\_write\_output\_ratio        |                                                             |
| nxt\_write\_output\_bitrate      |                                                             |
| nxt\_write\_output\_duration     | <ul><li>最小: 0 ms</li><li>最大: 49日</li><li>ミリ秒単位の精度</li></ul> |
| nxt\_write\_output\_date\_time   | DD.MM.YYYY\@HH:MM                                           |
| nxt\_write\_output\_string\_list | 0 - 1024文字（出力は大きい場合は切り捨て）                                   |

## 自己ヘルプシナリオで従業員と対話する <a href="#writingscriptsforremoteactionsonmacforfinder-classic-interactingwithemployeesinself-helpscenarios" id="writingscriptsforremoteactionsonmacforfinder-classic-interactingwithemployeesinself-helpscenarios"></a>

### キャンペーンのUIDを取得する <a href="#writingscriptsforremoteactionsonmacforfinder-classic-obtainingtheuidofacampaign" id="writingscriptsforremoteactionsonmacforfinder-classic-obtainingtheuidofacampaign"></a>

リモートアクションからキャンペーンを実行する方法には、引数としてUIDキャンペーン識別子を渡す必要があります。

このUIDをリモートアクションに渡すには、リモートアクションのスクリプト内でそれぞれのキャンペーンに必要なパラメータを宣言します。 リモートアクションを編集するときにパラメータに実際の値としてUIDを使用します。

キャンペーンのUIDを取得し、リモートアクションのパラメータとして渡すには：

1. キャンペーンおよびリモートアクションを編集する権限を持つユーザーとしてFinderにログインします。
2. 左側のメニューの**Campaigns**セクションで、リモートアクションから起動したいキャンペーンの名前を右クリックします。
3. **エクスポート > Campaign Uid to clipboard** を選択して、キャンペーンのUIDをコピーします。
4. 左側のメニューの**Remote actions**セクションで、キャンペーンを実行するべきリモートアクションの名前をダブルクリックして編集します。 リモートアクションはキャンペーンのUIDを収納するためのパラメータを宣言するスクリプトを含むべきです。
5. スクリプトの下にある**Parameters**セクションで、キャンペーンのUIDを保持するパラメータを選択します。
6. **Ctrl+V**を押してキャンペーンのUIDを実際に貼り付け、対応するパラメータに割り当てます。

#### リモートアクションのスクリプトからキャンペーンを実行する <a href="#writingscriptsforremoteactionsonmacforfinder-classic-runningacampaignfromthescriptofaremoteaction" id="writingscriptsforremoteactionsonmacforfinder-classic-runningacampaignfromthescriptofaremoteaction"></a>

以下の関数はリモートアクションのスクリプト能力を拡張します。

`nxt_run_campaign( id )`

この関数はパラメータとして渡されたUIDにマッチするキャンペーンを実行し、回答を内部に保存します。

* キャンペーンのステータスを受け取った場合、この関数は0を返します。
* その他のケースではこの関数は1を返し、エラーがログに記録されます。

この関数を呼び出すことで、従業員がキャンペーンを完了するか、キャンペーンを未表示にするまでリモートアクションの実行が一時停止します。

`nxt_run_campaign_with_timeout (id timeout)`

この関数は秒単位のタイムアウト(0 < T < 1週間)をパラメータとして渡し、UIDにマッチするキャンペーンを実行し、回答を内部に保存します。

* キャンペーンのステータスを受け取った場合、この関数は0を返します。
* その他のケースではこの関数は1を返し、エラーがログに記録されます。

この関数を呼び出すことで、従業員がキャンペーンを完了するか、キャンペーンを見逃すか、またはタイムアウトまでにキャンペーンを完了できない場合に、リモートアクションの実行が一時停止します。

`nxt_run_standalone_campaign( id )`

この関数はパラメータとして渡されたUIDにマッチするキャンペーンを実行し、回答を内部に保存します。

* キャンペーンのステータスを受け取った場合、この関数は0を返します。
* その他のケースではこの関数は1を返し、エラーがログに記録されます。

この関数を呼び出すとキャンペーンが開始され、リモートアクションの実行が従業員の回答を待たずに続行します。

`nxt_get_campaign_status( res_var )`

この関数は最後のキャンペーンのステータスを返します。

* **fully**: 従業員がキャンペーンの質問に完全に答えた。
* **timeout**: ユーザーが回答を終える前にキャンペーンのタイムアウトが発生した。
* **postponed**: 従業員がキャンペーンに参加することに同意した。
* **declined**: 従業員がキャンペーンへの参加を辞退した。
* **connectionfailed**: スクリプトがCampaign通知を制御するCollectorコンポーネントに接続できなかった。
* **notificationfailed**: 次のいずれかの理由でキャンペーンの表示に失敗した。
  * プラットフォームからキャンペーン定義を取得できなかったため、キャンペーンが存在しないか公開されていない。
  * 別のキャンペーンがすでに従業員に表示されている。
  * Collectorのフォーカス保護または邪魔しないルールにより非緊急のキャンペーンが表示されない。 キャンペーンの受信レートを制限する詳細は、[キャンペーンの受信レートを制限する](/platform/ja/user-guide/campaigns/managing-campaigns/creating-campaigns/limiting-the-reception-rate-of-campaigns.md)を参照してください。
* 最後のキャンペーンが失敗した場合には空。

`nxt_get_response_answer( res_var question_key)`

文字列パラメータ`query_key`を使用して、質問ラベルを基に最後のキャンペーンをクエリします。 この関数は、回答を文字列値として抽出し、指定された変数`res_var`に保存します。

* キャンペーンのステータスを受け取った場合には0を返します。
* それ以外の場合には1を返します。

### コード例 <a href="#writingscriptsforremoteactionsonmacforfinder-classic-codeexamples" id="writingscriptsforremoteactionsonmacforfinder-classic-codeexamples"></a>

### **キャンペーンの呼び出し**

```
 # これはキャンペーンの基本呼び出しを示す簡単な例です

if nxt_run_campaign "11111111-aaaa-2222-bbbb-333333333333"; then
    nxt_get_campaign_status status
 if [[ status == "fully" ]]; then
        echo "Campaign succeeded"
 else
        echo "Status is $status"
    fi
else
    echo "Campaign failed"
fi 
```

### **回答へのアクセス**

```
# 応答データへの簡単なアクセス
 
nxt_get_campaign_status status
echo "The response status is $status"
nxt_get_response_answer answersArray key1
echo ${answersArray[1]}

# 注意 - Bashは0からn-1を使用し、Zshは1からnを使用します。
```

### **タイムアウト付きキャンペーンの実行**

```
# タイムアウト付きキャンペーンの実行
# タイムアウトは秒単位 (100sまたは00:01:40)

if nxt_run_campaign_with_timeout "11111111-aaaa-2222-bbbb-333333333333" 100; then
    nxt_get_campaign_status status
 if [[ status == "fully" ]]; then
        echo "Campaign succeeded"
 else
        echo "Status is $status"
    fi
else
    echo "Campaign failed"
fi 
```

### **非ブロッキングキャンペーンの実行**

```
# 非ブロッキングキャンペーンの実行
 
if nxt_run_standalone_campaign "11111111-aaaa-2222-bbbb-333333333333"; then
    nxt_get_campaign_status status
 if [[ status == "fully" ]]; then
        echo "Campaign succeeded"
 else
        echo "Status is $status"
    fi
else
    echo "Campaign failed"
fi
```

## スクリプトの終了とタイムアウト <a href="#writingscriptsforremoteactionsonmacforfinder-classic-scriptterminationandtimeout" id="writingscriptsforremoteactionsonmacforfinder-classic-scriptterminationandtimeout"></a>

リモートアクションスクリプトからサブプロセスを起動し、リモートアクションスクリプトが終了またはタイムアウトした場合、Collectorはサブプロセスを自動的に終了します。 リモートアクションが終了した後もサブプロセスが実行を続ける場合、スクリプトが`&`文字を使用してサブプロセスをデタッチにすることを確認してください。例：

`some_script.sh -arg1 -arg2 &`

## Zshコマンドインタープリタ <a href="#writingscriptsforremoteactionsonmacforfinder-classic-zshcommandinterpreter" id="writingscriptsforremoteactionsonmacforfinder-classic-zshcommandinterpreter"></a>

Collectorバージョン6.27.2以降、Zsh Unixシェル用に書かれたスクリプトを実行できます。 シェルスクリプトの冒頭に次のコード行を追加する必要があります：

`#!/bin/zsh`

これは[シェバング](https://ja.wikipedia.org/wiki/Shebang_\(Unix\))（外部リンク）として知られている文字列です。

Macでリモートアクションがトリガーされると、Collectorは最初のコード行をチェックし、指定されたインタープリターを使用して残りの指示を実行します。 シェバンのないスクリプトは、Bashコマンドインタープリタを使用して実行されます。

Nexthinkは、シェルスクリプトに常にシェバンを使用し、標準のインタープリタに従うことを推奨します。

{% hint style="info" %}
この記事で説明されている操作は、NexthinkエンジニアまたはNexthink認定パートナーによってのみ実行される必要があります。

サポートや支援が必要な場合は、Nexthink認定パートナーにお問い合わせください。
{% endhint %}

***

関連トピック

* [Macでのリモートアクションスクリプトの署名（クラシック）](/platform/ja/user-guide/remote-actions/remote-actions-in-finder-classic/writing-scripts-for-remote-actions-on-mac-for-finder-classic/signing-remote-action-scripts-on-mac-classic.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.nexthink.com/platform/ja/user-guide/remote-actions/remote-actions-in-finder-classic/writing-scripts-for-remote-actions-on-mac-for-finder-classic.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
