見出し画像

【自動日記ツール】Googleスプレッドシートの作成


年末に今年一年を振り返るために、毎日の出来事が自動的に日記として生成されていてほしいのだ。

そんな欲望をもとに考えた一連の仕組みがあるので、今日は、それを紹介します。

本記事だけを読んでも意味がわからないと思いますが、もし、興味のある方は、一連の流れを以下の記事にしていますので、こちらをご参照ください。

今回は、Googleスプレッドシートを作成して、GoogleCalendarやchatGPTと連携をとる仕組み作りです。

今回の記事は、本ツールを語る上で、最も肝になる仲介役になります。
やろうと思えば、GASとGoogleカレンダーだけでいけるでしょうが、スケジュール内容の確認や、promptのテストなど考えると、スプレッドシートを挟んで作ったほうが利便性がよいであろうという判断です。

本記事だけを読んでも意味がわからないと思いますが、もし、興味のある方は、一連の流れを以下の記事、マガジンにしていますので、こちらをご参照ください。

全体のフローチャートでいうところの、「Googleスプレッドシートにリスト化」や「Googleスプレッドシートに記載のpromptを使用する」などの部分で登場するスプレッドシートの用意になります。




新しいスプレッドシートを作成する

スプレッドシート作成画面から、空白のスプレッドシートを出します

シートを3つ用意する

新しいシートを作って以下の名前をつけます

  • GCalendar

  • inputData

  • prompt

この名前は、このあとプログラムで呼び出すので、このままつけてください。
各シートと、役割は以下です。

  • GCalendar

    • Googleカレンダーから抽出した情報が並びます

      • ここには、このあと別途作成するプログラムで、自動的に月曜日〜日曜日の一週間のデータが抽出されます

      • A列〜C列に、「日付」「件名」「説明」と入れておきます

  • inputData

    • カレンダーから抽出した情報をもとにGPTにinputするためのデータにします

    • 「GCalendar」で抽出したデータをもとに今日の日付分のデータを抽出して1つのセルにまとめます

      • A列〜B列に「今日の日付」「daily」と入れておき、2行目には、各セルに以下の関数を入れます

A列B列にはヘッダ名を入れておきます

■セルA-2にいれる関数

=TODAY()

■セルB-2にいれる関数

=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IF(GCalendar!A:A=A2, IF(GCalendar!C:C<>"", TEXT(GCalendar!A:A, "yyyy/mm/dd") & ", " & GCalendar!B:B & ", " & GCalendar!C:C, ""), "")))

ここで「B-2」にいれる関数によって、何日分のデータをGPTに送るか調整できます。
例えば、3日に1回、3日分の日記を書きたいという場合、この関数を調整します。
※別記事のGASで、「GCalendar」に一週間分のデータを抽出しているのは、このへんの調整をしやすくするようにです。

  • prompt

    • GPTに送るpromptを保存します

    • 各セルにいれるものは以下です

promptを用意する

  • A列

    • A-1:function

    • A-2:prompt

ヘッダー、項目名です。
もともと、モデルの指定などもスプレッドシートでやろうと思って、他の項目名を入れていましたが、(「Model」や「Token」などもあったんですが)うまくいかないのでやめました。その名残でpromptという項目名だけ残ってますが、とくに意味がある列ではないです。苦笑


B列:日記を書くGPTへのprompt

全体の行程中の、以下フロー内のスプレッドシートにあたります

  • B-1:buildApiRequestOptions

    • どの関数で使用するのかわかりやすいように名前を入れています

  • B-2:「inputData」シートのデータをもとに日記を書くように指示するprompt部分です

    • 書いてほしい日記の内容にあわせてpromptを入れます。

      • 例:
        「入力されたデータをもとに日記を書いてください」

    • 今回の仕組みではGPT4を使うので、そんなに凝ったことをしなくても自然なものはできますが、「英語で書いて」や「200文字程度にまとめて」といったような細かい指示がここからできます。

    • 以下ではもう少し詳細なpromptを販売しています(宣伝)

C列:「イラストを書くためのprompt」を書くGPTへのprompt

全体の行程中の、以下フロー内のスプレッドシートにあたります

  • C-1:extractEventFromDiary

    • どの関数で使用するのかわかりやすいように名前を入れています

  • C-2:日記の内容をもとにDALL-Eへの指示内容を生成するpromptになります。

    • 日記の内容をそのままDALL-Eに送っても思ったようなイラストにはならないため、主要な出来事を抽出して、「どのような内容のイラストにしてほしいか」を生成してもらいましょう。

      • 例:
        「入力された日記をもとに主要な出来事を抜き出し、DALL-Eへのpromptを生成してください」

    • 以下ではもう少し詳細なpromptを販売しています(宣伝)

D列:イラストを書くGPTへのprompt

全体の行程中の、以下フロー内のスプレッドシートにあたります

  • D-1:createIllustrationPrompt

    • どの関数で使用するのかわかりやすいように名前を入れています

  • D-2:上記の「C-2」のやりとりで生成されたpromptに加えて、更に画風の指定をするpromptです

    • C-2のアウトプットで、それなりのpromptができていると思うので、「それなりのアウトプットはされますが、毎回の画風が安定しないので、詳細に指定したほうが良いと言えます。

      • 例:
        入力されたデータをもとにリアルなイラストにしてください

  • ↓同じpromptでも、こんなにアウトプットが違う

  • そんな中で、アニメ風の画風で安定させるのが結構面白かったので、以下ではもう少し詳細なpromptを紹介しています。(宣伝)


これで、スプレッドシートの準備は完了です。

この記事が気に入ったらサポートをしてみませんか?