--- title: "Advanced I/O Functionの設定" url: https://docs.catalyst.zoho.com/ja/tutorials/alien-city/python/configure-advanced-io-function/ description: "Catalyst Advanced I/O FunctionとCatalyst Data Storeを使用して、都市でのエイリアン遭遇を報告または検索できるシングルページサーバーレスWebアプリケーションを作成します。" last_updated: 2026-03-05T06:13:24Z 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コンポーネントの設定から始めましょう。 Pythonのfunctionディレクトリ([`functions/alien_city_function`](https://docs.catalyst.zoho.com/ja/cli/v1/project-directory-structure/functions-directory/))には以下のファイルが含まれています: * `main.py` メインfunctionファイル * `catalyst-config.json` 設定ファイル * 追加する外部ライブラリを記載するための`requirements.txt`ファイル `main.py` メインfunctionファイルにコードを追加します。 Advanced I/O functionには、サーバーとData Store間のルーティングを処理する2つのAPIがあります: * `GET /alien`: 都市にエイリアンが存在するかどうかを確認する * `POST /alien`: 都市でのエイリアンの存在を報告する それでは、functionファイルにコードを追加しましょう。 以下のコードをコピーして、プロジェクトの`functions/alien_city_function`ディレクトリにある`main.py`に貼り付けて、ファイルを保存してください。アプリケーションのファイルを操作するには、お好みのIDEを使用できます。 > **注意:** このセクションのコードを十分に理解するために、必ず目を通してください。 **main.py** ```python import json import zcatalyst_sdk import logging from flask import Request, make_response, jsonify tableName = 'AlienCity' # Data Storeに作成したテーブル columnName = 'CityName' # テーブルに作成したカラム def handler(request: Request): try: app = zcatalyst_sdk.initialize() # Catalyst SDKの初期化 logger = logging.getLogger() if request.path == "/alien" and request.method == 'POST': # 特定の都市のエイリアン遭遇を報告するPOST API req_data = request.get_json() name = req_data.get('city_name') rowid = getAlienCountFromCatalystDataStore(name) # Catalyst Data Storeテーブルにクエリを実行し、指定された都市の行が存在するかどうかを確認します if len(rowid) == 0: # 行が存在しない場合、新しい行を挿入します logger.info("Alien alert!") # ログに記録されます。コンソールのMonitorセクションにあるLogsからこのログを確認できます datastore_service = app.datastore() table_service = datastore_service.table(tableName) row_data = { columnName:name } table_service.insert_row(row_data) # Catalyst Data Storeテーブルに都市名を行として挿入します response = make_response(jsonify({ "message": "Thanks for reporting!" }), 200) else: # 行が存在する場合、重複を示すメッセージを送信します response = make_response(jsonify({ "message": "Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!" }), 200) return response elif request.path == "/alien" and request.method == 'GET': # テーブルで該当都市のエイリアン遭遇を確認するGET API name = request.args.get('city_name') rowid = getAlienCountFromCatalystDataStore(name) # Catalyst Data Storeテーブルにクエリを実行し、指定された都市の行が存在するかどうかを確認します if len(rowid) == 0: response = make_response({ "message": "Hurray! No alien encounters in this city yet!", "signal": "negative" }, 200) else: response = make_response(jsonify({ "message": "Uh oh! Looks like there are aliens in this city!", "signal": "positive" }), 200) return response else: response = make_response("Error. Invalid Request") response.status_code = 404 return response except Exception as err: # エラーレスポンスを送信します logger.error(f"Exception in AlienCityAIO :{err}") response = make_response(jsonify({ "error": "Internal server error occurred. Please try again in some time." }), 500) return response def getAlienCountFromCatalystDataStore(cityname): # 指定された都市のエイリアン遭遇が既に報告されているかどうかをData Storeテーブルにクエリを実行して確認します app = zcatalyst_sdk.initialize() zcql_service = app.zcql() query = f"SELECT * FROM {tableName} WHERE {columnName} = '{cityname}'" output = zcql_service.execute_query(query) return output ``` Advanced I/O functionの設定が完了しました。次のセクションでは、functionとクライアントのアーキテクチャについて説明します。