--- title: "Event関数の設定" url: https://docs.catalyst.zoho.com/ja/tutorials/workdrivesync/nodejs/configure-event-function/ description: "Catalyst関数とEvent Listenerを使用して、Catalyst StratusとZoho WorkDrive間でAPIを通じてファイルのアップロードと削除を同期するWebアプリケーションを構築します" last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Event Functions" url: /ja/serverless/help/functions/event-functions --- # Event関数の設定 ここから、Event関数を設定してWorkDrive Syncアプリのコーディングを開始します。 > **注意:** Catalystコンソールでイベントリスナーを設定する前に、アプリケーションコードをCatalystリモートコンソールにコーディングしてデプロイする必要があります。これは、イベントリスナーをEvent関数に関連付ける必要があるためです。 [関数ディレクトリ](https://docs.catalyst.zoho.com/ja/cli/v1/project-directory-structure/functions-directory) `functions/workdrivesync`には以下が含まれています: * `index.js`メイン関数ファイル * `catalyst-config.json`設定ファイル * Nodeモジュール * `[package.json](https://docs.npmjs.com/files/package.json)`および`[package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json.html)`依存関係ファイル 任意のIDEを使用して関数を設定できます。 ### Node.js用パッケージのインストール Node.js Event関数には、[`axios`](https://www.npmjs.com/package/axios)、[`form-data`](https://www.npmjs.com/package/form-data)、[`fs`](https://www.npmjs.com/package/fs)の3つのパッケージをインストールする必要があります。 #### `axios` `axios`は、PromiseベースのHTTPクライアントで、WorkDrive APIエンドポイントにファイルを投稿するための非同期HTTPリクエストの送信に使用します。 `axios`をインストールするには、Node関数のディレクトリ(`functions/workdrivesync`)に移動して、以下のコマンドを実行します: ```sh npm install axios ``` モジュールがインストールされます。 ![catalyst_workdrive_npm_axios](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_npm_axios.webp) #### `form-data` `form-data`は、イベントリスナーから送信されたイベントデータからファイルを読み取った後、WorkDriveにファイルをアップロードするために使用します。 `form-data`をインストールするには、Node関数のディレクトリ(`functions/workdrivesync`)に移動して、以下のコマンドを実行します: ```sh npm install form-data ``` モジュールがインストールされます。 ![catalyst_workdrive_npm_formdata](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_npm_formdata.webp) #### `fs` `fs`モジュールは、物理ファイルシステムにアクセスし、イベントデータからファイルを取得するための読み取りストリームを作成することを可能にします。 `fs`をインストールするには、Node関数のディレクトリ(`functions/workdrivesync`)に移動して、以下のコマンドを実行します: ```sh npm install fs ``` モジュールがインストールされます。 ![catalyst_workdrive_npm_fs](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_npm_fs.webp) #### `qs` `qs`モジュールは、APIやクエリパラメータを通じて送受信するデータを扱う際に、URLクエリ文字列の解析と文字列化を支援します。 `qs`をインストールするには、Node関数のディレクトリ(`functions/workdrivesync`)に移動して、以下のコマンドを実行します: ```sh npm install qs ``` これらのパッケージの情報は、Event関数の[`package.json`](https://docs.npmjs.com/files/package.json)ファイルにも更新されます。 ```json { "name": "workdrivesync", "version": "1.0.0", "main": "index.js", "author": "emma@zylker.com", "dependencies": { "axios": "^1.13.1", "form-data": "^4.0.4", "fs": "^0.0.1-security", "qs": "^6.14.0", "zcatalyst-sdk-node": "latest" } } ``` これで関数ファイルにコードを追加できます。 以下のコードをコピーして、`functions/workdrivesync`ディレクトリにある`index.js`に貼り付けて、ファイルを保存してください。 > **注意:** このセクションのコードを十分に理解するため、必ず内容を確認してください。関数とクライアントのコードについては、クライアントの設定後に説明します。 **index.js** ```javascript const catalyst = require('zcatalyst-sdk-node'); const axios = require('axios').default; const FormData = require('form-data'); const fs = require('fs'); const credentials = { WorkDriveConnector: { client_id: '{{YOUR_CLIENT_ID}}', // Client IDを入力してください client_secret: '{{YOUR_CLIENT_SECRET}}', // Client Secretを入力してください auth_url: 'https://accounts.zoho.com/oauth/v2/token', refresh_url: 'https://accounts.zoho.com/oauth/v2/token', refresh_token: '{{YOUR_REFRESH_TOKEN}}' // Refresh Tokenを入力してください } } const FOLDERID = '5m0kq28f2efdbc2464a37866cec7d6580cb47'; // WorkDriveフォルダIDを入力してください module.exports = async (event, context) => { try { const eventData = event.getRawData().events[0]; const eventType = eventData.event_config.api_name; const fileName = eventData.data.object_details[0].key; const app = catalyst.initialize(context); const query = `SELECT ROWID, WorkDriveFileID FROM FileVault where FileName='${fileName}'`; const queryResult = await app.zcql().executeZCQLQuery(query); console.log(queryResult); const ROWID = queryResult[0].FileVault.ROWID; const accessToken = await app.connection(credentials).getConnector('WorkDriveConnector').getAccessToken(); if (eventType === "stratus_object_uploaded") { const stratus = app.stratus(); const bucket = stratus.bucket("file-vault-demo"); // バケット名に置き換えてください let fileStream = await bucket.getObject(fileName); const chunks = []; for await (const chunk of fileStream) { chunks.push(chunk); } const buffer = Buffer.concat(chunks); fs.writeFileSync(__dirname + '/' + fileName, buffer); var data = new FormData(); data.append('content', fs.createReadStream(__dirname + '/' + fileName)); const config = { method: 'POST', url: `https://workdrive.zoho.com/api/v1/upload?filename=${fileName}&override-name-exist=true&parent_id=${FOLDERID}`, headers: { 'Authorization': `Zoho-oauthtoken ${accessToken}`, ...data.getHeaders() }, data: data }; const response = await axios(config); console.log(response); const WorkDriveSync = 'Uploaded'; const body = response.data; const WorkDriveFileID = body.data[0].attributes.resource_id; const catalystTable = app.datastore().table('FileVault'); await catalystTable.updateRow({ WorkDriveFileID, WorkDriveSync, ROWID }); } else if (eventType === "stratus_object_deleted") { const WorkDriveFileID = queryResult[0].FileVault.WorkDriveFileID; const config = { method: "PATCH", url: `https://workdrive.zoho.com/api/v1/files/${WorkDriveFileID}`, headers: { Authorization: `Zoho-oauthtoken ${accessToken}`, Accept: "application/vnd.api+json", }, data: JSON.stringify({ data: { attributes: { status: "51", }, type: "files", }, }), }; console.log(config); await axios(config); const table = app.datastore().table("FileVault"); await table.deleteRow(ROWID); } context.closeWithSuccess(); } catch (err) { console.log(err); context.closeWithFailure(); } }; ``` > **注意:** このコードを関数ファイルにコピー&ペーストした後、コメントで示されている以下の値を必ず入力してください: * **[Client ID](https://docs.catalyst.zoho.com/ja/tutorials/workdrivesync/nodejs/register-client)** * **[Client Secret](https://docs.catalyst.zoho.com/ja/tutorials/workdrivesync/nodejs/register-client)** * このコードで使用されているZohoサービスリンク(例:accounts.zoho.com、workdrive.zoho.comなど)はデータセンター(DC)固有です。.comを対応するZohoデータセンタードメインに置き換えてください。認証やAPIエラーを避けるため、コード内のすべてのURLが同じDCドメインを使用していることを確認してください。 * **[Refresh Token](https://docs.catalyst.zoho.com/ja/tutorials/workdrivesync/nodejs/generate-refresh-token)** * [WorkDriveフォルダID](https://docs.catalyst.zoho.com/ja/tutorials/workdrivesync/nodejs/create-workdrive-folder): この値は、[先ほどWorkDriveで作成したフォルダ](https://docs.catalyst.zoho.com/ja/tutorials/workdrivesync/nodejs/create-workdrive-folder)を開くことで取得できます。URLにはWorkDriveフォルダのフォルダIDが含まれています。URLの`folders/`の後に表示されるIDをコピーしてください。 ![catalyst_workdrive_folderid](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/workdrive-folder-id-through-link.webp) Event関数の設定が完了しました。