【社長日記】Geminiでアプリを作ってみた

 当社は7月に社員と評価面談をするのですが、その際の評価シートをExcelで作って、ファイルサーバに権限をつけて保存しています。管理が面倒なので、Power AppsかGoogle App Scriptで書いてWEBアプリ化したいなと常々考えていましたが、私の衰えたプログラミング能力では実現できずにいました。しかし近頃は生成AIがさくっとプログラム書いてくれるという話が聞かれますので、それならということで早速試してみました。

 Google App Scriptのことなら同じGoogleファミリーのGeminiかなと思い、ひとまず相談してみました。最初の一言はこんな感じです。

会社の評価面談のためのシステムを作りたい。
google workspaceを契約しているので、社員はgoogle アカウントでログインする。
社員ごとに評価シートがある。評価シートには8行4列の採点項目がある。
8行はコンピテンシーであり、4列は役割クラス別の評価となっている。
評価シートは本人と所属長がアクセスできる。
所属長が指定した社員は指定した副所属長もアクセスできる。
評価シートは本人のみ記入する項目と所属長が記入する項目がある。
なお、役員、人事部長はすべての社員の評価シートにアクセスできる。
まずは、google workspaceのプラットフォームを活用するために、
どのような構成が採用できるのかを教えてほしい。

 すると、「採用可能なシステム構成案についてご説明します」といって、GeminiのCanvasに「Google Workspaceを活用した評価面談システム構成案(スプレッドシート一元管理方式)」なるドキュメントを作ってくれました。GASのアプリの作り方のイメージが全くなかったのでこの資料でイメージが理解できたのですが、そこから先、どうなっていくのか全くわかりませんでした。

geminiはこのようなシステムを開発することが可能ですか。
何ができて何ができないのかを教えてほしい。

 それに対しては「要件を整理して、設計して、ドキュメントやコードを書くことはができるけれど、環境へのデプロイやGoogle Workspaceの操作などはできないので、指示は出すから自分でやってくれ」という回答でした。

 では要件整理からということで、私が事前にメモしておいた要件や、これまで使っていたExcelのシートなどをアップロードすると、いろいろ仕様をまとめてくれました。テーブル設計も示してきたのですが、それはちょっと気に入らなかったので、Geminiが示した書式で、私が直してアップロードしました。要件や仕様のやりとりが30往復くらい続いて、その都度、Canvasの中のテキストの仕様書がバージョンアップされていきます。要件に関する質問もとても適切なものに思えました。優秀なSEとやりとりしているような感覚でとても気持ちがよかったです。

 その後、デプロイの仕方も相談し、Geminiが提案するようにGoogle Drive上のマイドライブに「評価入力プロトタイプ」というフォルダを作ってそこにコードを格納することにしました。ここまでだいたい半日くらいです。

 翌日、Code.gsとIndex.htmlの内容をGeminiが作ってくれたので、そのコードをマイドライブの中のファイルにコピーして、Geminiの指示の通りにデプロイしてみます。何度かコードを修正してデプロイしましたが、動かないこともありました。状況を報告すると、ログやブラウザのコンソールにエラーメッセージを表示するように訂正したコードを作ってくれたので、そのコードを実行し、エラーメッセージを伝えるとGeminiがコードを修正してくれました。優れたエンジニアとslackのチャットでやりとりしてプログラムをデバッグしているようなそんな感覚です。

 プロトタイプ作成の進め方は、初めてプログラムを作るときのように、表示動作ができるところまで実装し、稼働が確認できたら次は更新動作ができるところまで実装し、そこまで確認できると複数の評価シートが見れるポータルのhtmlを追加して権限によってはポータルが表示されるように、といった具合に徐々に実装していきます。

 最低限使えるな、というところまで3日でできましたが、Geminiと向き合っていた時間は15時間くらいだと思います。コードを修正してデプロイした回数は50回くらいでした。評価入力画面は以下のようなイメージです。すごいと思いました。

Geminiで作ったアプリ
 

 Geminiはさらに、評価シートを提出したかどうかのステータスによって入力の制限をつけましょう、とグイグイと提案してきて、その実装を始めました。しかし、このあたりから様子がおかしくなってしまいます。過去に直したはずのコードに何度も先祖帰りしてしまう、いわゆるデグレードがたびたび発生するようになります。それを指摘すると、申し訳なさそうに謝って、全てやり直すと言ってコードを作り直します。全てやり直さずに指摘の部分だけ直してほしいな、と思いながらも、Geminiの修正を待つと、こちらを直すとあちらが壊れるという状態がしばらく続きます。そこから30回くらいのコード修正とデプロイは全然進捗しなくなってしまい、ついには全く動作しなくなりましたし、何をどう指示しても治らなくなってしまいました。そのたびにすごく申し訳なさそうに謝るんですよね。なんだか私がGeminiをいじめているんじゃないだろうかという気分になりました。

 Geminiが何を作ろうとしているのか分からなくなってきましたので、何が最新の仕様だと思っているの?と聞いてみると最後に提出したコードを最新仕様と思っているとの回答でした。コードが仕様だという回答そのものちょっと嫌だなと思ったのですが、人間にとってはドキュメントの仕様を正としますが、AIにとっては人間のドキュメントを正としなければいけない理由はないですよね。とはいえバグったコードを正とされてはたまらないので、何時何分のコードに戻してくれと伝えましたが、そのとおりには戻りませんでした。ここからは自分でコードを以前のバージョンに復帰し修正することにしました。

 そのようないきさつでGeminiの出力したコードを読み始めてみると、動いてはいるけれど、この作りはいただけないな、と思えるところが多々ありました。データはSpreadに格納するのですが、キー項目であるそれぞれデータのIDをタイムスタンプ+ログイン者の氏名で作っていました。これは単純にSpreadの行でよいので書き直しました。そのほか、通らないはずの分岐があるので気持ち悪いので削除しました。ソースコードはコメントまで丁寧に記述してキレイに見えるけれど、ちゃんと見ないと信用できないな、と思いました。

 書き直したコードを最新仕様としてほしいのだが、どうすればいい?とGeminiに聞いたところ、チャットに張ってほしいということだったので、そうしました。とりあえず、チャレンジしたのはここまでです。ここから先、私が修正したコードを正の仕様として、ここからさらなる機能追加ができるのか、あきらめてここからは自力で実装するのがよいのか、そこはまだ試していません。

 私はGoogle App Scriptについては全く経験がなかったのですが、Geminiの支援のおかげである程度のアプリを作成することができました。完全にGeminiの力でゴールにたどり着くまでは行かないまでも、ここまででも十分にすごいことだなと思いました。しかしちょっと複雑になってくるとワーキングメモリ不足なのか頻繁にデグレが発生し始めて、ごめんなさいループに入ってしまい自力で復帰できなくなってしまうので、まるで繊細な新人君を相手にしているような難しさもあると思いました。今のところのGemini2.5Proの印象はこんなところです。