--- title: "Advanced I/O Functionの設定" url: https://docs.catalyst.zoho.com/ja/tutorials/alien-city/nodejs/configure-advio-function/ description: "Catalyst Advanced I/O FunctionとCatalyst Data Storeを使用して、都市でのエイリアン遭遇を報告または検索できるシングルページサーバーレスWebアプリケーションを作成します。" last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Functions" url: /ja/serverless/help/functions/introduction/ - name: "Advanced I/O Functions" url: /ja/serverless/help/functions/advanced-io/ - name: "Functionsディレクトリ構造" url: /ja/cli/v1/project-directory-structure/functions-directory/ --- # Advanced I/O Functionの設定 Alien Cityアプリケーションのコーディングを、functionコンポーネントの設定から始めましょう。 Node.jsのfunctionディレクトリ( `[ functions/alien_city_function ](https://docs.catalyst.zoho.com/ja/cli/v1/project-directory-structure/functions-directory/)` )には以下のファイルが含まれています: * `index.js` メインfunctionファイル * `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)` 依存関係ファイル `index.js` メインfunctionファイルにコードを追加します。 Advanced I/O functionには、サーバーとData Store間のルーティングを処理する2つのAPIがあります: * **`GET /alien`**: 都市にエイリアンが存在するかどうかを確認する * **`POST /alien`**: 都市でのエイリアンの存在を報告する #### Express Node.jsフレームワークのインストール Node.js functionでは、[Express Node.jsフレームワーク](https://expressjs.com/)を使用します。コード内でExpressパッケージをインポートするには、システムにExpress依存関係をインストールする必要があります。 ローカルマシンに`Express.js`をインストールするには、ターミナルでNode functionのディレクトリ(`functions/alien_city_function`)に移動し、以下のコマンドを実行します: ```sh npm install express --save ``` これにより、Expressモジュールがインストールされ、依存関係が保存されます。 ![alien-city-client](https://catalyst-docs-development.zohostratus.in/images/tutorials/alcity/catalyst_alcity_install_express.webp) この情報はpackage.jsonファイルにも更新されます。 ![alien-city-client](https://catalyst-docs-development.zohostratus.in/images/tutorials/alcity/catalyst_alcity_package_json.webp) それでは、functionファイルにコードを追加しましょう。 以下のコードをコピーして、プロジェクトの`functions/alien_city_function`ディレクトリにある`index.js`に貼り付けて、ファイルを保存してください。アプリケーションのファイルを操作するには、お好みのIDEを使用できます。 > **注意:** このセクションのコードを十分に理解するために、必ず目を通してください。 **index.js** ```javascript 'use strict'; var express = require('express'); var app = express(); var catalyst = require('zcatalyst-sdk-node'); app.use(express.json()); const tableName = 'AlienCity'; // Data Storeに作成したテーブル const columnName = 'CityName'; // テーブルに作成したカラム // 特定の都市のエイリアン遭遇を報告するPOST API app.post('/alien', (req, res) => { var cityJson = req.body; console.log(cityJson); // Catalyst SDKの初期化 var catalystApp = catalyst.initialize(req); // Catalyst Data Storeテーブルにクエリを実行し、指定された都市の行が存在するかどうかを確認します getDataFromCatalystDataStore(catalystApp, cityJson.city_name).then(cityDetails => { if (cityDetails.length == 0) { // 行が存在しない場合、新しい行を挿入します console.log("Alien alert!"); // ログに記録されます。コンソールのMonitorセクションにあるLogsからこのログを確認できます var rowData = {} rowData[columnName] = cityJson.city_name; var rowArr = []; rowArr.push(rowData); // Catalyst Data Storeテーブルに都市名を行として挿入します catalystApp.datastore().table(tableName).insertRows(rowArr).then(cityInsertResp => { res.send({ "message": "Thanks for reporting!" }); }).catch(err => { console.log(err); sendErrorResponse(res); }) } else { // 行が存在する場合、重複を示すメッセージを送信します res.send({ "message": "Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!" }); } }).catch(err => { console.log(err); sendErrorResponse(res); }) }); // テーブルで該当都市のエイリアン遭遇を確認するGET API app.get('/alien', (req, res) => { var city = req.query.city_name; // Catalyst SDKの初期化 var catalystApp = catalyst.initialize(req); // Catalyst Data Storeテーブルにクエリを実行し、指定された都市の行が存在するかどうかを確認します getDataFromCatalystDataStore(catalystApp, city).then(cityDetails => { if (cityDetails.length == 0) { res.send({ "message": "Hurray! No alien encounters in this city yet!", "signal": "negative" }); } else { res.send({ "message": "Uh oh! Looks like there are aliens in this city!", "signal": "positive" }); } }).catch(err => { console.log(err); sendErrorResponse(res); }) }); /** * 指定された都市のエイリアン遭遇が既に報告されているかどうかをData Storeテーブルにクエリを実行して確認します * @param {*} catalystApp * @param {*} cityName */ function getDataFromCatalystDataStore(catalystApp, cityName) { return new Promise((resolve, reject) => { // Catalyst Data Storeテーブルにクエリを実行します catalystApp.zcql().executeZCQLQuery("SELECT * FROM AlienCity WHERE CityName = '" + cityName + "'").then(queryResponse => { resolve(queryResponse); }).catch(err => { reject(err); }) }); } /** * エラーレスポンスを送信します * @param {*} res */ function sendErrorResponse(res) { res.status(500); res.send({ "error": "Internal server error occurred. Please try again in some time." }); } module.exports = app; ``` functionsディレクトリの設定が完了しました。次のセクションでは、functionとクライアントのアーキテクチャについて説明します。