Kanji
・クラウドエンジニア / フリーランス ・1993年生まれ ・愛媛県出身 / 東京都渋谷区在住 ・AWS歴5年 プロフィールの詳細
目次
個人的な話になりますが、最近痛風になってしまい、プリン体を制限する必要が出てきました。。。 まずは iPhone のアプリで食事管理を始めようとしたのですが、なかなかプリン体の含有量まで出してくれるアプリが見つからず、困っていました。 それならば、Chat GPT に聞いてみればいいのでは?と思い立ちました。
Chat GPT では、以下のようにレスポンスする形式を指定すれば、YAML、JSON などで出力してくれます。 この出力をプログラム制御すれば、スプレッドシートにデータ出力したり、Locker Studio で可視化可能です。
なるべくお金をかけずにアプリ化したく、無償でジョブをスケジュール実行可能な GAS を利用して、Google カレンダーと Chat GPT を連携させることにしました。
作成したアプリ用のスプレッドシートは以下の URL です。
gcal-ai-event-manager - Google スプレッドシート
スプレッドシートを開き、上部のメニューの [ファイル] → [コピーを作成] で自分の Google アカウントにコピーしてください。
適当な名前を付けて、「コピーを作成」をクリックします。
コピーしたスプレッドシートが開くので、[拡張機能] → [Apps Script] を開きます。
左ペインから const.gs ファイルを開いて、定数 SPREADSHEET_ID の値をコピーして作成したスプレッドシートの ID に変更してください。 例えば、スプレッドシートの URL が https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit の場合、 xxxxxxxxxxxxxxxxxxxx の部分がスプレッドシートの ID になります。
const.gs
SPREADSHEET_ID
https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit
xxxxxxxxxxxxxxxxxxxx
const.gs ファイルでは、他にも以下のような定数を設定しています。 これらの定数は、アプリの動作に影響を与えるため、必要に応じて変更してください。
// Google スプレッドシートのID(対象となるスプレッドシートを指定) const SPREADSHEET_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // ログレベル定義とデフォルト値 const LOG_LEVELS = { DEBUG: 1, INFO: 2, WARN: 3, ERROR: 4 }; let LOG_LEVEL = LOG_LEVELS.DEBUG; // デフォルトログレベル // 予定一覧を管理するシート名 const SHEET_NAME_EVENT_LIST = '予定一覧'; // ルールを管理するシート名 const SHEET_NAME_RULE = 'ルール'; // 利用するOpenAIのモデル名 const OPENAI_MODEL = 'gpt-3.5-turbo'; // AIによる回答のヘッダー名 const AI_RESPONSE_HEADER = 'AI による回答'; // 予定取得の開始日(今日から何日後かを指定、0は今日) const DAYS_FROM_TODAY_START = 0; // 予定取得の範囲(日数、負の値で過去、正の値で未来) const DAYS_RANGE = -7; // ドライラン設定。trueの場合、OpenAPI呼び出し以降をスキップ const DRY_RUN = false;
続いて、OpenAI の API キーを取得して、スクリプトプロパティの OPEN_AI_API_KEY の値に設定します。 OpenAI の API キーの取得方法は他のサイトで紹介されているので、そちらを参考にしてください。 左ペインから [プロジェクトの設定] を開き、[スクリプト プロパティ を追加] をクリックします。 プロパティへ OPEN_AI_API_KEY を入力し、値に OpenAI の API キーを入力後、[スクリプト プロパティ を保存] をクリックします。
OPEN_AI_API_KEY
以上で App Script の初期設定は完了です。
続いてスプレッドシートに戻り、OpenAI で処理するルールを設定します。 [ルール] シートを開き、必要に応じてルールの内容を変更してください。
<ルールシートに入力する内容の解説>
TRUE
FALSE
${title}
${description}
最後にテスト実行とスケジュール実行するトリーガー設定を行います。 上部のメニューの [カスタムメニュー] → [onSchedule を 実行] をクリックします。 この時点でカレンダーのイベント情報から Chat GPT にリクエストしたい場合、事前に Google カレンダーに「食事」のイベントを登録しておく必要があります。
初回実行時には以下のように「認証が必要です」と表示されるので、[OK] をクリックします。
画面に沿って認証を進めていきます。途中、「このアプリは Google で確認されていません」と表示される場合がありますが、[詳細] をクリックして「安全ではないページに移動」を選択します。 これは特にこのアプリが不審な処理を実行している訳ではありません。 このアプリは Google で確認されていません - Google 検索 で検索すると出てくるように、Google の審査を受けていないアプリであるために表示されるものです。
更に画面を進めていくと「 ${AppScript プロジェクト名} がアクセスできる情報を確認してください」と表示されるので、[すべて選択] にチェックを入れ、[続行] をクリックします。
${AppScript プロジェクト名}
上部のメニューの [カスタムメニュー] → [onSchedule を 実行] をクリックすると、スクリプトが実行されます。 スクリプトの実行が完了すると、スプレッドシートの [予定一覧] シートに Google カレンダーのイベント情報が出力されます。 これで、スクリプトのテスト実行は完了です。
問題なく動作することを確認できたら、スケジュール実行するトリガーを設定します。 上部のメニューの [カスタムメニュー] → [installTriger を実行] をクリックします。 「スクリプトが終了しました」と表示されれば、スケジュール実行するトリガーの設定が完了です。 デフォルトでは 4 時間毎に実行されるように設定されています。必要に応じて App Script の [トリガー] から変更してください。
実際に App Script の [トリガー] を開くと、以下のように onSchedule が登録されていることが確認できます。
onSchedule
実際に作ったアプリの利用イメージは以下の通りです。
カレンダーは食品管理用に作成しても良いですし、いつも利用しているカレンダーを利用しても良いと思います。 自分の場合は、いつも利用しているカレンダーに「食事」のイベントであることが分かるよう、タイトルに「🍝」「🍽️」を付けています。 このカレンダーのタイトルの規則は「初期セットアップ」で設定したルールの「タイトルのパターン」にマッチする必要があります。
カレンダーのタイトルでも食事の内容は分かるのですが、あまり情報が少ないと正確な情報がでないので カレンダーの説明欄に食事の内容を入力します。 以下の説明欄のうち、 --- よりも前の内容は事前に自分で入力した内容、それ以降は Chat GPT が出力した内容です。
---
以下は GAS で処理して Google カレンダーのイベントを取得し、Chat GPT にリクエストした結果をスプレッドシートに出力したものです。 カレンダーの内容と YAML 形式で出力された結果を表形式で表示しています。
作り方については現在この記事では紹介しておりませんが、これを利用して以下のように Locker Studio で可視化することも可能です。
Google カレンダーと Chat GPT を連携して、食事の栄養管理を行うアプリの作成方法について紹介しました。 このアプリを利用することで、食事の内容をカレンダーに登録するだけで、Chat GPT が栄養情報を解析し、スプレッドシートに出力することができます。 また、Locker Studio で可視化することで、食事の傾向を把握することも可能です。
しばらく使ってみましたが、食事の量や食材の情報を渡さないと、Chat GPT が正確な栄養情報を出力できない場合もあります。 そのため、あくまで参考情報として利用することをおすすめします。
[ルール] シートを編集することで、Chat GPT にリクエストする内容をカスタマイズすることもできます。 今回は栄養管理を目的としたアプリを紹介しましたが、例えば、運動管理や案件の工数管理など、他の分野にも応用可能です。