見出し画像

kintoneで生年月日から学年を算出する式を作ってみた with chatGPT

こんにちは!
クラフテクス株式会社」にてインターンシップに参加しているコウです!

さて、kintoneを用いた生徒カルテ作成の第2弾です。
今回は生徒一覧のマスターデータに含まれている生年月日から、
学年を自動計算する仕組み
を作っていきます。

1. アプリの全体像


今回用意したアプリはこんな感じです。
ほぼ初めてですので、フィールドの形式などはあまり気にせず作りました。

生年月日には初期値として現在日時が入っています

今回の目標は「生年月日」から「学年」を計算することです。
なぜ、元データからの挿入ではなく、計算したいかというと、
「更新する手間を削減したい」からですね。

ちなみに、ここでは生年月日は「日付フィールド」という形式で、
誕生年や誕生月のみをDATE_FORMAT関数というものを用いて、
以下のように取り出しています。

月の場合は第二引数を"MM", 日の場合は"dd"にしています

DATE_FORMAT関数の詳細については、
以下のページを参考にしてください。
[DATE_FORMAT関数]日付や時刻の表示形式を指定して表示する | kintone ヘルプ (cybozu.help)

2.chatGPTに計算方法の相談

誕生日から、学年を計算する方法はなんとなく思い描けていましたが、
ここで、あえてchatGPTの力を借りてみることにしました。

まずは、kintoneならではのルールである、
「日付の扱い方」と「DATE_FORMAT関数」について、学ばせました。

ページを読み込むことはできなかったので、コピペして
そのまま学習してもらい、書いてみてもらいます。

コピペしただけですね

(参考1)日付、時刻、日時の計算 | kintone ヘルプ (cybozu.help)
(参考2)[DATE_FORMAT関数]日付や時刻の表示形式を指定して表示する | kintone ヘルプ (cybozu.help)


そうすると・・・

pythonで書き始めたので一度止めてもらい、
「pythonではなく、与えられたルールで記述してください」
というお願いをしてみました。

その結果・・・

DATE_FORMATについては教えたつもりでしたが、
明確に伝わっていなかった様子です。
説明してくれている通り、
kintone用にチューニングするには、もう少し学習させる
内容を検討する必要
がありそうです。

一方、「{}年生」に1から15くらいまで入ってしまう形となり、
「小学生」「中学生」「高校生」という概念を
教える必要
がありそうです。

いったんは・・・
「『中学生』や『高校生』も指定してください。」
と依頼をしてみました。

…これでは、
該当生徒が、小学生・中学生・高校生のどれにあたるのか。
しか指定することができません。

(「●年生」という記載はないことが見て取れると思います)

確かにそうです、僕は「中学生なのか」「高校生なのか」
を指定ほしいとしか言っていない・・・
(自分の指示が下手なことに気づかされますね)

「小学1~6年生、中学1~3年生、高校1~3年生を条件分岐して
 表示できるようにしてください」
と、追加依頼してみました。

いいですね。やりたいことはほとんど完成しています。

3. 早生まれの適用

ここでちょっとした問題に気づきました。
そう、「早生まれ」が考慮されていません。
現在日から誕生日を引き算して、年齢が決まるまでは良いのですが、
このままでは、誕生日を過ぎた瞬間、学年が上がる形になってしまいます。 

「日本の学生制度では、4月に学年が一つ上がることになっています。
 いただいたプログラムではそれが表現されていないので、
 修正してください。」

このように依頼してみると・・・

4月以降生まれの場合、年齢を+1として設定することにしたようです。
良さそうに思いましたが、逆でした。

4月以降に生まれた場合、ここでは同年1~3月生まれの人に対して
学年は1つ「下げる」べき
ですので、年齢も下げなければなりません。

また、先ほどは「4月に1学年上がる」と伝えましたが、
正確には「4月2日以降に生まれた場合」となります。

「4月2日以降に誕生した場合は、学年が一つ下がるようにしてください。」
とお願いしてみました。

誕生月と誕生日まで条件に加えた形

目的のプログラムとしては完成でしょうか。
とはいえ、あまりきれいには思えないですね…。

ここまでで、
・誕生年度を設定
・現在年度-誕生年度で仮の年齢を決定
・学年を決定
ということをすれば良いことが分かりましたので、
一度、自分で計算式を作ることにしました。

4. いったん自分の力で計算を設定


まずは、「誕生年度」というものを作ります。
4月2日以降であれば、「誕生年」をそのまま使いますが、
1月1日~4月1日生まれの人の場合は、「誕生年-1」を誕生年度とします。

まずは誕生「年度」を設定

次に、「現在年度」から「誕生年度」を引き、仮の「年齢」を作ります。

年度は別フィールドで定数を設定しています

あとは、学年に割り当てるだけなのですが、
ちょっと混乱もしており、
いったん、力業な計算式をいれて、きちんと計算されるか試しました。

ひたすら分岐ですね💦

こちらの計算式を「学年」フィールドの
「自動計算する」にチェックを入れて、入力します。

文字列指定なので「""」を忘れずに・・・

計算式を入れて更新しただけでは、レコードに反映されないので、
再度、csvファイルを読み込みます。

でましたね!
とはいえ、先ほどの計算式をそのままにしておくのは悲しい。
ここで再度chatGPTに依頼をし、
もっと簡単な式になおしてもらうことに。

※こういった動作を「リファクタリング」と呼ぶことを
 後になって知りました(笑) 

先ほどの計算式をそのまま突っ込み、
「条件分岐を減らして記述するにはどのようにするべきでしょうか。」
と聞いてみると・・・

いいですね!

良さそうです。
18歳以上は卒業に、
15歳以上であれば、”高”+(18-年齢)を、
12歳以上であれば、"中"+(15-年齢)を、
6歳以上であれば、"小"+(12-年齢)を、表示するということですね。

ロジックは分かったので、以下のように修正しました。

美しくなりました

いいでしょう!
すっきりしました!

これで、現在の年度だけ更新し、csvファイルを総入れ替えすれば、
学年が一括更新されるようになりました!

今回のchatGPTとの協力では
・「中学生」「高校生」を指定して!と伝えるだけでは、
 各学年に振り分けてはくれなかったこと
・日本の学校制度における「早生まれ」を伝える必要があったこと
・プログラムのリファクタリングは完璧だったこと
などが、面白いポイントでしたね!

次回は、kintoneの「ルックアップ」を使って、
別アプリから、生徒一覧の情報を取り出せるようにしてみます。

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