こんにちは、SCSK株式会社 中村です。
先月、SCSKのパートナー企業様との合同の勉強会に参加してきました。趣旨としては互いの若手エンジニアの交流・共同作業を通じたGoogle Cloudに対する知見深化や、生成AIを活用したアプリデプロイの学習です。
勉強会の中でGoogle Cloud + Geminiを使ったアプリ開発を体験し、開発手法の新時代を見たと感じていますのでそちらを中心に活動の内容をご紹介できればと思います。
勉強会の概要
参加者の構成
勉強会は弊社メンバー10名、パートナー様メンバー10名の20名+講師陣という体制で開催され、
参加メンバーは両社のメンバーが均等に割り振られる形で5名1組となり、計4組でワークショップを行いました。
参加者のスキルは日ごろから業務でGoogle Cloudを利用している方から、私のようにオンプレしか経験したことのない人まで様々でしたが
比較的Google Cloudスキルの浅いメンバーが中心となっています。チームごとに課題が出題され最終的に発表を行います。
課題内容
課題はチームにより異なりますが、私のチームは上記内容の課題でした。
インプットデータとなる履歴書と、ベースとなる超簡易的なスキルマップ作成アプリは運営側で用意してくれています。
ベースとなるアプリはユースケースに沿った出力を行わないので、私たちはユースケースに沿うように
Google Cloudと生成AIを使ってアプリを改修していくということが活動の主となります。
活動を始めるにあたって
ここからはどのように学習を進めていったかをポイントに絞ってご紹介したいと思います。
まず、今回の勉強会の中で私たちが利用したGoogle Cloudのサービスは以下の通りです。
| サービス名 | 説明 |
| Cloud SQL | Google Cloudが提供するフルマネージドのリレーショナルデータベースです。 今回はスキルマップの検索結果を履歴として保存するため利用します。 (しかし結果として履歴機能はほぼ使わない形となりました。) |
| Cloud Run | Google Cloud上でコンテナ化されたアプリをインフラの管理無しに実行できるサービスです。 今回作成するスキルマップ作成アプリをデプロイしたり、改修するために使います。 |
| Cloud Load Balancing | Google Cloudが提供するネットワークの負荷分散を行うサービスです。 構成が寂しいこともあり、実際の業務システムで作る構成を想定して用意。(無くてもいい) 今回は単一のアプリのため負荷分散の機能は利用しません。 |
| Cloud Storage | Google Cloudが提供するストレージサービスです。 インプットデータとなる履歴書の生データや、生成したスキルマップを格納するためのストレージです。 |
| Secret Manager | APIキー、証明書、パスワードといった秘密情報を安全に管理するためのサービスです。 デプロイ時にCloud SQLのIDとパスワードを直打ちしないためにSecret Managerに登録して、そこからIDとパスワードを取得する形にします。 |
| Gemini | 今回のアプリ開発の肝となる生成AI。バージョンは2.5フラッシュ版を利用しています。 ほぼ全てのアプリの改修をこのGeminiに担ってもらいます。 |
事前準備
①VPCネットワークの作成
コンソール左側のナビゲーションメニューから「VPCネットワーク」を選択し、「+VPCネットワークを作成」のメニューを押下します。
ネットワーク名、サブネット名、リージョン、IPv4範囲を決めてVPCを作成します。その他の項目はデフォルトで大丈夫です。
作成後のネットワーク名やサブネット名は次で使います。
簡易的な機能のみを利用するためEnterpriseエディション、シングルゾーンの料金体系が安い構成で作成します。
細かい設定は運営側で用意された資料を元に設定を行います。(赤枠のような値となるように設定します。)
オンプレ環境しか経験したことのない自分にとってはGUIで設定項目を決めるだけで約30分ほどでSQLサーバが作れてしまうというだけで既に驚きです。

SQLの作成が完了したら、作成したSQLを選択して「ユーザ」と「データベース」を新たに作成します。
”postgres”という名前のものはデフォルトで存在するものですので、追加で任意のユーザとデータベースを作成します。

④作業ディレクトリの作成
Google Cloud管理画面からCloud Shellを立ち上げてホームディレクトリ直下に作業用のフォルダを作成します。
Cloud ShellはGoogle Cloudで利用できるブラウザベースのコマンドラインです。
$ mkdir cloud-run-app
作成したディレクトリの中に、運営側で用意してもらった簡易スキルマップ作成アプリの資材を格納します。
■資材一覧
| 資材名 | 説明 |
| Dockerfile | コンテナイメージをビルドするためのファイル |
| main.py | スキルマップ作成アプリの本体となるPythonファイル (SQLサーバのIPアドレスやdb名は自分が作成したものに書き換えます) |
| requirements.txt | DockerfileがPythonパッケージをインストールするためのリスト |
| templates(フォルダ) | |
| →history.html | スキルマップ作成アプリにて質問履歴を表示するための設定ファイル |
| →index.html | スキルマップ作成アプリの表示構成を決める設定ファイル |
初期スキルマップの確認
現状のスキルマップがどのようなものか確認するために用意されたアプリのデプロイを行います。
$ cd cloud-run-app $ $ gcloud run deploy [cloud-run-app] --region asia-northeast1 --network=[vpc] --subnet=[subnet] --vpc-egress=private-ranges-only --port 8080 --set-secrets SQL_USER=SQL_USER:latest,SQL_PASSWORD=SQL_PASSWORD:latest
デプロイのコマンドを実行するとソースコードの場所を確認されることがありますが
最初にcdでソースファイルが格納されている場所に移動済みですのでそのまま何も入力せずにEnterを押してもらって大丈夫です。
(チームの別のメンバーは何も聞かれずにデプロイ完了したりすることもあるみたいで、ここら辺の違いはよく分かりませんでした)
デプロイが無事完了すると、作成されたURLがプロンプト内に表示されます。

デプロイが完了したら、Cloud Runから「サービス」を選択するとリストの中に先ほどデプロイした[cloud-run-app]の名前のアプリがあると思いますので選択します。開いた画面にURLが記載されていると思いますので、そちらをクリックするとデプロイしたアプリを開くことが出来ます。
上の図が運営側で用意してくれたスキルマップ作成アプリです。(※表示されている氏名や経歴は架空の社員を想定したものです。)
簡素な作りで、年齢の表記の仕方もバラバラだったりするのでここら辺の体裁も整えたいですね
スキルマップを作成したい人のチェックボックスにチェックを入れてページ下部にあるスキルマップ作成のボタンを押下するとExcel形式のスキルマップが作成されます。

上記が初期状態のスキルマップです。
スキル項目について、チェックボックスで選択した人がどれくらいのレベル感なのかをGeminiが◎、〇、△、-といった記号で判断して入力してくれています。しかしこれだけではなぜ〇なのか、なぜ△なのかという根拠が分かりません。
インプットデータの履歴書には保有する資格なども記載があるため、そちらもレベル感を主張する材料として出力できるとよいです。
といった具合に色々改良の余地がありそうなので、これをGeminiで改良していきます。
アプリの改修をGeminiでやってみる
必要な準備ができたので、ここからはGeminiを使ってスキルマップ作成アプリを改修していきます。
Cloud Shellにてアプリ資材を配置しているフォルダに移動してGeminiを起動します。
Geminiの起動は任意の場所で”gemini”と打つだけです。簡単!
$ cd cloud-run-app
$
$ gemini
対話式のアプリ改修
さっそくGeminiにアプリの改修を依頼してみます。
試しに出力されるスキルマップについて、一人ひとりシートを分けて結果を出力することが可能か聞いてみました。


いかがでしょうか?
私は「スキルマップを出力する人が複数選択されている場合、一人ひとりシートを分けて結果を出力することは可能ですか?」とだけ質問しただけなのですが、
Geminiは自分でフォルダ内のmain.pyの中身を確認して、改善案を2つ提示してくれました。また、案②のほうが見やすいという意見をこちらに伝えた上で案②に変更しますか?と提案してくれました。非常に優秀な営業マンのようです。
特に懸念はないためGeminiの提案通り案②への変更で進めます。

本当に変更していいのか?という最終確認が入るので、「1. Yes,allow once」を選択し、Enterを押下します。

そうして、ものの5分ほどで修正が完了しました。従来のアプリ改修では考えられないスピードです。
そもそも自分でツールを編集するということすらやらなくても変更が完了出来てしまいました。
ただ、これだけではファイルの中身を変えただけなので再度デプロイしてあげる必要があります。
デプロイが10分ほど時間がかかりますが、それを考慮してもとても短い時間ですね。
再デプロイを終えて、改めてCloud Runからアプリを起動、適当に人を選択してファイルを出力してみます。

そして出力されたファイルがこちら。
赤枠の通りしっかり個人ごとにシートが分かれて結果を出力してくれていますね。
もしこれを自分でやろうものなら、pythonのコマンドを調べてコードの追記位置を検討して実装してみて問題があればエラー箇所を特定して、、と修正を完了するために私であれば2人/日はかかってしまうであろうものがGeminiによって5~10分で完了してしまいました。
最終的な成果物
その後のスキルマップの改修については基本的には上記で紹介したようにやりたいことをGeminiに伝えて、
Geminiが提案してくれた内容が要望通りのものであれば承諾して改修を進めることの繰り返しです。
そんな感じで進めて、成果物となるスキルマップの改修に加えて、生成アプリも最終的には以下のような感じに変更しました。


システム構成図
最終的なアプリの構成図は以下の通りです。
Cloud RunのフロントにCLB(Cloud Load Balancing)を配置していますが、勉強会の最後に発表する成果物の資料として
Cloud RunとCloud StorageとGeminiだけだと構成図的にも寂しいなとなったので、
実際の業務システムで作る構成を想定してCLBを追加しました。それ以外は前述した通りの処理の流れとなっています。

さいごに
以上がGoogle CloudとGeminiを使ったアプリ開発体験の紹介となります。
アプリケーションエンジニアの方ではなくとも、自分でバッチやマクロなどを作った経験のある方であれば
Geminiを使った対話式のアプリ開発が、従来の方法とは一線を画すものであることは何となくイメージしてもらえたのではないでしょうか?
ただ、Geminiによる改修がいつも上手くいくかというと上手くいかないことも多いです。
そんな時でもCloud Runの[オブザーバビリティ]>[ログ]というところに大抵エラー出力などが出ていますので、
そのエラーの記述を丸々コピーして、これもGeminiに投げて原因を聞くとほとんどのことは解消してくれました。
他にはほぼ全ての変更をGeminiに任せているので、エラーが解消できなかった時などは本当にどこが悪いのかという検討が自分でつけられなくなってしまうことがありました。そうすると結局Geminiを使って更なる改修を加えるか、前のバージョンに切り戻すことが必要になってきます。
とはいえ、やはり開発経験がない人間でも対話ベースで作りたいアプリが作れるというのは非常に大きな魅力です。
さらにAIによる開発スピードの高速化というのも今回の勉強会で感じた大きなポイントでした。
今後求められるエンジニア像というものは、AIとの協調をベースとしたスキルセットに変化していくであろうし、私たちも変化しなければいけないということを強く感じています。
私自身も自己研鑽としてクラウドや生成AIについて学習して
時代にあったエンジニアとして活躍できるように頑張っていきたいと思います。
(とりあえず初めの一歩としてGoogle Cloud Leaderの資格を取得しました。)
最後までお読みいただき、ありがとうございました。






・名前をクリックすると履歴書の生データが表示されるようにリンクを設定
・年齢の表記方法が”〇歳”と統一されるように修正
・ページの配色をかわいい感じに変更(Geminiにかわいくして。とお願いしたら上記の青ベースになりました。)
・スキルレポートの生成を開始したら進捗率が表示されるように修正
・スキルレポートの生成時間が短縮されるように修正(5~10分ほど→20秒ほどに短縮)