---
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
```

この情報は`package.json`ファイルにも反映されます。

それでは、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を必ず入力してください。
ファンクションディレクトリの設定が完了しました。次に、クライアントディレクトリの設定に進みます。