--- title: "ファンクションディレクトリの設定" url: https://docs.catalyst.zoho.com/ja/tutorials/todo-list/python/configure-function/ description: "Catalyst Advanced I/OファンクションとCatalyst Data Storeを使用して、タスクを記録し完了後に削除できるBasic、React、またはAngularのToDoリストWebアプリケーションを構築します。" last_updated: 2026-03-05T06:13:24Z service: All Services type: tutorial related_links: - 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ファンクションの設定 次に、ファンクションコンポーネントを設定してToDoリストアプリケーションのコーディングを開始します。 [ファンクションのディレクトリ](https://docs.catalyst.zoho.com/ja/cli/v1/project-directory-structure/functions-directory)、`functions/to_do_list_function`には以下が含まれます: * `main.py` メインファンクションファイル * `catalyst-config.json` 設定ファイル * `requirements.txt` 追加する外部ライブラリを記述するファイル `main.py`ファイルにコードを追加します。 サーバーとData Store間のルーティングを処理するAdvanced I/Oファンクションの3つのAPIは以下の通りです: * **GET /todo**: Data Storeの*TodoItems*テーブルからToDoリストアイテムを取得します * **POST /todo**: 新しいリストアイテムを作成してData Storeに保存します * **DELETE /todo**: Data Storeからリストアイテムを削除します 次に、ファンクションファイルにコードを追加しましょう。以下のPythonコードをコピーして、プロジェクトの`functions/to_do_list_function`ディレクトリにある`main.py`にペーストし、ファイルを保存してください。任意のIDEを使用してアプリケーションのファイルを操作できます。 > **Note:** このセクションのコードを十分に理解するため、必ず目を通してください。ファンクションとクライアントのアーキテクチャについては、次のセクションで説明します。 **main.py** ```python import json import zcatalyst_sdk import logging from flask import Request, make_response, jsonify logger = logging.getLogger() def handler(request: Request): try: app = zcatalyst_sdk.initialize() logger = logging.getLogger() if request.path == "/add" and request.method == 'POST': req_data = request.get_json() notes = req_data.get("notes") table = app.datastore().table('TodoItems') row = table.insert_row({ 'Notes': notes }) todo_item = {'id': row['ROWID'], 'notes': notes} response_data = { 'status': 'success', 'data': { 'todoItem': todo_item } } return make_response(jsonify(response_data), 200) elif request.path == "/all" and request.method == 'GET': page = request.args.get('page') per_page = request.args.get('perPage') page = int(page) logger.info(page) per_page = int(per_page) logger.info(per_page) zcql_service = app.zcql() row_count = zcql_service.execute_query('SELECT COUNT(ROWID) FROM TodoItems') row_id = int(row_count[0]['TodoItems']['COUNT(ROWID)']) has_more = int(row_id) > (page) * (per_page) logger.info(has_more) query_result = zcql_service.execute_query(f'SELECT ROWID, Notes FROM TodoItems LIMIT {(page - 1) * per_page + 1},{per_page}') todo_items = [{'id': item['TodoItems']['ROWID'], 'notes': item['TodoItems']['Notes']} for item in query_result] get_resp = { 'status': 'success', 'data': { 'todoItems': todo_items, 'hasMore': has_more } } return make_response(jsonify(get_resp), 200) elif request.method == 'DELETE': row_id = request.path[1:] if row_id: datastore_service = app.datastore() table_service = datastore_service.table("ToDoItems") table_service.delete_row(row_id) row_response = { 'status': 'success', 'data': { 'todoItem': { 'id': row_id } }} logging.info(row_response) return make_response(jsonify(row_response), 200) else: message = { 'status': 'failure', 'error': 'Please provide a valid rowid in the request path' } return make_response(jsonify(message), 400) else: print('working') except Exception as err: logger.error(f"Exception in to_do_list_function :{err}") response = make_response(jsonify({ "error": "Internal server error occurred. Please try again in some time." }), 500) return response ``` ファンクションディレクトリの設定が完了しました。