--- title: "Advanced IOファンクションの設定" url: https://docs.catalyst.zoho.com/ja/tutorials/task-manager/nodejs/config-function/ description: "タスクの作成・管理が可能なReact製タスクマネージャーアプリを構築します。タスクに対してCRUD操作やフィルター機能を実行できます。" last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Catalyst NoSQLヘルプドキュメント" url: /ja/cloud-scale/help/nosql/introduction/ - name: "NoSQL NodeJS SDK " url: /ja/sdk/nodejs/v2/cloud-scale/nosql/get-component-instance/ - name: "Advanced IO Function" url: /ja/serverless/help/functions/advanced-io/ - name: "Functionディレクトリ構造" url: /ja/cli/v1/project-directory-structure/functions-directory --- # Advanced IOファンクションの設定 ここでは、ファンクションコンポーネントを設定してタスクマネージャーアプリケーションのコーディングを開始します。 [ファンクションのディレクトリ](https://docs.catalyst.zoho.com/ja/cli/v1/project-directory-structure/functions-directory)(`functions/task_manager_function`)には以下が含まれています: * `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) 依存関係ファイル `index.js`ファイルにコードを追加します。 Advanced I/Oファンクションには以下の機能が含まれています:
リクエストメソッド エンドポイント 目的
`POST` `/addtask` 新しいタスクを作成します。
`GET` `/filtertask` *UserID*、*TaskName*、または*Status*フィールドで作成済みタスクをフィルタリングします。
`DELETE` `/deletetask` 不要になったタスクを削除します。
`POST` `/updatetask` 既存のタスクの内容を更新します。
### 必要な依存関係のインストール Advanced I/Oファンクションのコーディングには[Express](https://expressjs.com/)と[Axios](https://www.npmjs.com/package/axios)フレームワークを使用します。ファンクションのコードで**Express**と**Axios**パッケージをインポートするには、必要な依存関係をシステムにインストールする必要があります。
パッケージ名 目的
`Express` HTTPリクエストのルーティングを行います。
`Axios` HTTPリクエストの送信と処理を行います。
ローカルマシンにインストールするには、ターミナルでファンクションのホームディレクトリ(`functions/task_manager_function`)に移動し、以下のコマンドを実行します: ```sh npm install express axios --save ``` ![catalyst_tutorials_nosql_taskmanager_func_cli_pack_install](https://catalyst-docs-development.zohostratus.in/images/tutorials/task-manager/catalyst_tutorials_nosql_taskmanager_func_cli_pack_install.webp) この情報は`package.json`ファイルにも反映されます。 ![catalyst_tutorials_nosql_taskmanager_packagejson](https://catalyst-docs-development.zohostratus.in/images/tutorials/task-manager/catalyst_tutorials_nosql_taskmanager_packagejson.webp) それでは、Advanced I/Oファンクションのコーディングを始めましょう。 以下のコードをコピーして、プロジェクトの`functions/task_manager_function`ディレクトリにある`index.js`に貼り付け、ファイルを保存してください。アプリケーションのファイルの操作には、お好みのIDEを使用できます。 > **Note:** このセクションのコードを十分に理解するために、必ず一通り確認してください。 **index.js** ```javascript 'use strict'; var express=require('express'); var catalyst=require('zcatalyst-sdk-node'); const{NoSQLItem}=require('zcatalyst-sdk-node/lib/no-sql'); const{NoSQLReturnValue,NoSQLConditionGroupOperator}=require('zcatalyst-sdk-node/lib/no-sql/enum'); const{NoSQLMarshall,NoSQLEnum}=require('zcatalyst-sdk-node/lib/no-sql'); const{NoSQLOperator}=NoSQLEnum; var app=express(); app.use(express.json()); app.use(express.static('public')); // タスクを追加する app.post('/addtask',async(req,res)=>{ let{userID,taskName,dueDate,priority,status}=req.body; var capp=catalyst.initialize(req); const nosql=capp.nosql(); const table=nosql.table('YOUR_TABLE_ID'); try{ await table.insertItems({ item:NoSQLItem.from({UserID:userID,DueDate:dueDate,TaskName:taskName,Priority:priority,Status:status}), return:NoSQLReturnValue.NULL }); res.send({message:"Thanks! Your task has been successfully inserted."}); }catch(error){ res.status(500).send({error:"Internal server error occurred. Please try again in some time."}); } }); // タスクをフィルタリングする app.get('/filtertask',async(req,res)=>{ const query=req.query; const parsedData={index_data:{userID:query.userID,taskName:query.taskName,status:query.status}}; const userId=parsedData.index_data.userID; var capp=catalyst.initialize(req); const nosql=capp.nosql(); const table=nosql.table('YOUR_TABLE_ID'); try{ if(userId!=null&&parsedData.index_data.taskName===''){ if(parsedData.index_data.status==='')return res.status(400).json({error:"Oops! You forgot to select a status."}); const groupOpInsert=await table.queryTable({ key_condition:{attribute:'UserID',operator:NoSQLOperator.EQUALS,value:NoSQLMarshall.makeString(parsedData.index_data.userID)}, consistent_read:true, limit:10, forward_scan:true }); let responseData=[]; groupOpInsert.getResponseData().forEach(data=>{ responseData.push({ UserID:data.item.get("UserID"), TaskName:data.item.get("TaskName"), DueDate:data.item.get("DueDate"), Priority:data.item.get("Priority"), Status:data.item.get("Status") }); }); const filteredData=await filterByStatus(responseData,parsedData); res.status(200).send(filteredData); }else if(userId!=null&&parsedData.index_data.taskName!=null){ if(parsedData.index_data.status==='')return res.status(400).json({error:"Oops! You forgot to select a status."}); const groupOpInsert=await table.queryTable({ key_condition:{ group_operator:NoSQLConditionGroupOperator.AND, group:[ {attribute:'UserID',operator:NoSQLOperator.EQUALS,value:NoSQLMarshall.makeString(parsedData.index_data.userID)}, {attribute:'TaskName',operator:NoSQLOperator.EQUALS,value:NoSQLMarshall.makeString(parsedData.index_data.taskName)} ] }, consistent_read:true, limit:10, forward_scan:true }); let responseData=[]; groupOpInsert.getResponseData().forEach(data=>{ responseData.push({ UserID:data.item.get("UserID"), TaskName:data.item.get("TaskName"), DueDate:data.item.get("DueDate"), Priority:data.item.get("Priority"), Status:data.item.get("Status") }); }); const filteredData=await filterByStatus(responseData,parsedData); res.send(filteredData); }else return res.send("Kindly enter partiyion key user ID and sort key Taskname"); }catch(error){ res.status(500).send({error:"Internal server error occurred. Please try again in some time."}); } }); // タスクを削除する app.delete('/deletetask',async(req,res)=>{ const query=req.query; const parsedData={index_data:{userID:query.userID,taskName:query.taskName}}; var capp=catalyst.initialize(req); const nosql=capp.nosql(); const table=nosql.table('YOUR_TABLE_ID'); try{ await table.deleteItems({keys:NoSQLItem.from({UserID:parsedData.index_data.userID,TaskName:parsedData.index_data.taskName})}); res.status(200).json({message:"Data deleted successfully!"}); }catch(error){ res.status(500).send({error:"Internal server error occurred. Please try again in some time."}); } }); // タスクを更新する app.post('/updatetask',async(req,res)=>{ let{UserID,TaskName,DueDate,Priority,Status}=req.body; var capp=catalyst.initialize(req); const nosql=capp.nosql(); const table=nosql.table('YOUR_TABLE_ID'); try{ await table.insertItems({ item:NoSQLItem.from({UserID:UserID,DueDate:DueDate,TaskName:TaskName,Priority:Priority,Status:Status}), return:NoSQLReturnValue.NULL }); res.send({message:"Items updated successfully!"}); }catch(error){ res.status(500).send({error:"Internal server error occurred. Please try again in some time."}); } }); async function filterByStatus(data,parseData){ return data.filter(task=>task.Status.toLowerCase()===parseData.index_data.status.toLowerCase()); } module.exports=app; ``` > **Note:** **16**行目、**34**行目、**93**行目、**106**行目にテーブルIDを必ず入力してください。 ファンクションディレクトリの設定が完了しました。次に、クライアントディレクトリの設定に進みます。