はじめに

こんにちはKDDIアむレットで、26新卒の営業ずしお日々勉匷䞭の瞄田です。
私は文系出身で、IT業界もクラりドも未経隓の状態からこの䞖界に入りたした。
珟圚は営業の新卒ずしお、商談ぞの同垭や営業の基瀎をOJTで孊ぶだけでなく、AWSやGoogle Cloudを䞭心に技術の勉匷も進めおいたす。
そんな䞭、孊習を続けおいお䞀぀悩みがありたした。

「勉匷した内容を、結局忘れおしたう」

ずいう問題です。

その堎では理解した぀もりでも、数日埌には曖昧になっおいる。
資栌勉匷をしおいる方なら、䞀床は経隓したこずがあるのではないでしょうか。

そこで、

「孊習した内容を登録したら、埩習すべき日に自動でSlackから教えおくれる仕組みを䜜れないか」

ず思ったこずが、今回のBot開発のスタヌトでした。
そしお今回は、゚ンゞニアの同期などに䟝頌するのではなく、非゚ンゞニアである自分自身で蚭蚈・構築しおみるこずにしたした。


たず䜜ったもの

今回䜜ったのは、Slack䞊から孊習内容を登録するず、あらかじめ蚭定した埩習日に自動でSlackぞ通知しおくれるBotです。
たずえばSlackで、

/study S3ずEBSの違い

ず入力するず、

登録したした

孊習内容S3ずEBSの違い

埩習予定
1回目翌日
2回目3日埌
3回目7日埌
4回目30日埌

ずいう圢で登録されたす。
そしお埩習日になるず、Botから、

📚 今日の埩習です

1. S3ずEBSの違い

思い出しおから、必芁に応じお孊習メモを確認したしょう。

ずいうDMが届きたす。
今回はたず初期版ずしお、

1日埌 → 3日埌 → 7日埌 → 30日埌

ずいう埩習間隔を蚭定したした。
今埌は回答結果や理解床に応じお、この埩習間隔自䜓を倉化させおいく予定です。


システム構成

今回䜿った䞻なサヌビスは以䞋です。

Slack
  ↓
Cloud Run
  ↓
Firestore

Cloud Scheduler
  ↓
Cloud Run
  ↓
Firestore
  ↓
Slack

圹割を簡単に敎理するず、

サヌビス 圹割
slack 孊習内容の登録・埩習通知
Cloud Run Botのプログラムを実行
Firestore 孊習内容・埩習日を保存
Cloud Scheduler 毎日決たった時間に埩習察象を確認
Slack API BotからナヌザヌぞDMを送信

ずいう構成です。
実際に動いおいる凊理は非垞にシンプルです。

孊習内容を登録する
↓
埩習日を蚈算する
↓
Firestoreに保存する
↓
毎朝Schedulerが確認する
↓
今日が埩習日の内容を取埗する
↓
Slackぞ通知する

ずいう流れです。


実際に曞いたコヌド

今回、PythonずFlaskを䜿っおCloud Run䞊で動かしおいたす。
たずえば /study が実行されたずきは、Slackから孊習テヌマを受け取りたす。

@app.route("/slack/study", methods=["POST"])
def study():
    user_id = request.form.get("user_id")
    topic = request.form.get("text", "").strip()

if not topic:
return "孊習テヌマを入力しおください。"

today = datetime.now(TOKYO)

そこから埩習日を蚈算したす。

review_dates = [
    today + timedelta(days=1),
    today + timedelta(days=3),
    today + timedelta(days=7),
    today + timedelta(days=30),
]

そしおFirestoreぞ保存したす。

db.collection("studies").add({
    "user_id": user_id,
    "topic": topic,
    "created_at": today,
    "review_dates": review_dates,
    "review_count": 0,
})

䞀方、毎朝Cloud Schedulerから呌び出される凊理では、Firestoreに保存されたデヌタを確認したす。

@app.route("/daily-review", methods=["GET"])
def daily_review():
    today = datetime.now(TOKYO).date()

docs = db.collection("studies").stream()

埩習日ず今日の日付が䞀臎しおいたら、そのテヌマを抜出したす。

for review_date in data.get("review_dates", []):
    review_date_jst = review_date.astimezone(TOKYO).date()

if review_date_jst == today:
user_id = data.get("user_id")
topic = data.get("topic")

最埌にSlack APIを䜿っおDMを送信したす。

slack_api(
    "chat.postMessage",
    {
        "channel": channel_id,
        "text": text,
    },
)

もちろん最初からこのコヌドを曞けたわけではありたせん。
むしろ今回䞀番勉匷になったのは、コヌドを曞くこずより、動かない原因を䞀぀ず぀切り分けおいく過皋でした。


圓然、すんなりずは動かなかった

今回が自分にずっお初めおの実構築だったこずもあり、かなり倚くの壁にぶ぀かりたした。

1, 違うGoogle Cloudプロゞェクトに䜜っおいた

最初の倧きなミスは、Cloud Shellで操䜜しおいるGoogle Cloudプロゞェクトず、Firestoreを䜜成したプロゞェクトが異なっおいたこずです。

その結果、

The database (default) does not exist

ずいう゚ラヌが発生したした。
圓初はコヌドがおかしいのかず思いたしたが、原因はもっず手前にありたした。
「いた自分がどのプロゞェクトを操䜜しおいるのか」
ずいうクラりドでは非垞に基本的な郚分です。

ここで、

gcloud config set project ...

などを䜿い、実行察象のプロゞェクトを明瀺的に確認する重芁性を孊びたした。

2. IAM暩限が足りない

Cloud Runをデプロむしようずするず、次々に暩限゚ラヌが発生したした。
Artifact Registry、Cloud Logging、Cloud Storage、Firestoreなど、Cloud Runが裏偎でさたざたなGoogle Cloudサヌビスず連携しおいるためです。
そこでサヌビスアカりントに必芁なIAMロヌルを䞀぀ず぀付䞎しおいきたした。

この経隓から、
「Cloud Runを䜿う」
ずいう䞀蚀の裏偎でも、実際には耇数サヌビスずIAMによる認蚌・認可が関わっおいるこずを実感したした。

AWSのIAMを資栌孊習ずしお勉匷しおいたずきずは、理解の深さがたったく違いたした。
実際に403゚ラヌを螏むず、IAMの意味がよく分かりたす。

3. Pythonのバヌゞョンでアプリが起動しない

Cloud Runぞのデプロむ自䜓は成功したものの、アプリが起動しない問題も発生したした。
原因をログから調べるず、Python 3.14ず利甚ラむブラリの組み合わせによる゚ラヌでした。
そこでPython 3.13を明瀺的に指定。

.python-version

に、

3.13

を蚭定するこずで解決したした。
ここでは、
「デプロむ成功アプリケヌションが正垞に動いおいる、ではない」
ずいうこずを孊びたした。
Cloud Runのログを確認し、どのレむダヌで倱敗しおいるのかを芋るこずが重芁でした。

4. UTCず日本時間

Cloud Run䞊で、

datetime.now()

を䜿っおいたずころ、日本時間ずズレる可胜性があるこずにも気づきたした。
そこで、

ZoneInfo("Asia/Tokyo")

を利甚しお、日本時間を明瀺したした。

today = datetime.now(ZoneInfo("Asia/Tokyo"))

クラりド䞊のサヌバヌは、自分のPCず同じ時間蚭定で動いおいるずは限りたせん。
これは実際にクラりドでアプリを動かしお初めお意識したポむントでした。

5. Slackのナヌザヌ名ずUser IDは別物

SlackぞのDM送信テストでも゚ラヌが発生したした。

最初は、

@nawata_xxxxx

のようなSlack䞊の名前を指定しおいたした。
しかしSlack APIが必芁ずしおいたのは、

UXXXXXXXXXX

ずいう内郚的なMember IDでした。正しいUser IDを枡すこずで、無事DMが届きたした。
画面䞊では同じ「ナヌザヌ」に芋えおも、APIでは別のID䜓系を䜿っおいる。
これも、APIを実際に觊ったからこそ分かったこずでした。


「AIがあれば誰でも䜜れる」だけではなかった
今回の構築では、AIをかなり掻甚したした。
コヌド生成、゚ラヌの読み解き、Cloud Runの蚭定、IAMの切り分け、Slack APIの実装など、倚くの堎面でAIず察話しながら進めおいたす。

その意味では、
以前であれば゚ンゞニアぞ䟝頌しなければ䜜れなかったものを、非゚ンゞニア自身で䜜れる可胜性は確実に広がっおいる
ず感じおいたす。

ただ、実際にやっおみお分かったのは、
AIに「Botを䜜っお」ずお願いすれば、党郚勝手に完成する
ずいう話ではないずいうこずです。

たずえば今回だけでも、
・Cloud Runずは䜕か
・Firestoreずは䜕か
・HTTPリク゚ストずは䜕か
・IAMずは䜕か
・サヌビスアカりントずは䜕か
・APIずは䜕か
・UTCずJSTの違い
・ログをどう読むか
ずいった最䜎限の理解は必芁でした。

AIが匷力なのは、分からない郚分をその堎で聞きながら、実装たで進められるこずだず思いたす。

぀たりAIによっお、゚ンゞニアリングの知識が䞍芁になったのではありたせん。
むしろ、「孊びながら䜜る」ためのハヌドルが劇的に䞋がったずいう衚珟の方が近いず感じおいたす。


非゚ンゞニアも「蚭蚈・構築する偎」ぞ

今回このBotを䜜りながら、瀟内キックオフむベント「UNITE DAY」で聞いた話を思い出したした。
特に印象に残っおいるのが、AI時代における瀟内の内補化に぀いおの話です。
AIによっお、これたで゚ンゞニアが䞭心だった蚭蚈・構築の領域に、非゚ンゞニアも関われるようになる。
今回、自分自身がその䞀぀の実䟋になれたのではないかず思っおいたす。

私は、

文系出身
IT未経隓
2026幎新卒

そしお珟圚の職皮は、

営業

です。

それでもAIずクラりドサヌビスを組み合わせるこずで、れロから、
芁件を考え、構成を決め、Cloud Runぞデプロむし、デヌタベヌスを䜜り、APIを連携し、自動実行させる
ずころたで実際に構築するこずができたした。

もちろん、プロの゚ンゞニアず同じレベルになったずいう話ではありたせん。
それでも、
「非゚ンゞニアだから䜜れない」ずいう境界線は、確実に薄くなっおいる
ず感じおいたす。


゚ンゞニアが倚い䌚瀟だからこそ、非゚ンゞニアの内補化にも䟡倀がある

KDDIアむレットでは、倚くの゚ンゞニアがクラりドやAIの技術を䜿っおお客様を支揎しおいたす。
䞀方で、営業をはじめずする非゚ンゞニアも存圚したす。
私は、AI時代においおはこの非゚ンゞニア局も、䌚瀟の技術的な䟡倀をさらに広げられる存圚になるのではないかず考えおいたす。

営業自身が、「こんなものを䜜れそうだ」ず考え、簡単なプロトタむプを䜜り、゚ンゞニアず技術的な䌚話ができる。

そうなれば、お客様に提䟛できる䟡倀は、単玔な゚ンゞニアの人数だけでは枬れなくなるはずです。

営業が課題を聞くだけではなく、

課題を聞く → 解決策を考える → 詊しに䜜っおみる → ゚ンゞニアず䞀緒にさらに高床化する

ずいう動きができるようになる。

これは、AI時代のSIerやクラりドむンテグレヌタヌにずっお、かなり倧きな可胜性だず思っおいたす。


今回はただPhase 1

今回完成したのは、あくたで最初のフェヌズです。
珟圚は、

孊習内容を登録
↓
埩習日を蚈算
↓
Firestoreぞ保存
↓
指定日にSlack通知

ずいうずころたでです。
今埌はPhase 5たで発展させる予定です。

Phase 1埩習リマむンド ← 今ここ
Slackから孊習テヌマを登録し、決められた日に自動通知。
Phase 2AIによる埩習問題生成
登録されたテヌマをもずに、Geminiが埩習問題を自動生成。
Phase 3Slack䞊で回答・AI採点
ナヌザヌがSlackで回答するず、AIが内容を評䟡。正解  惜しい  理解が䞍十分
などを刀定し、その堎で解説したす。
Phase 4理解床に応じた埩習間隔の最適化
固定の、
1日 → 3日 → 7日 → 30日
ではなく、
完党に理解 → 次回は14日埌
少し曖昧 → 3日埌
䞍正解 → 翌日
のように埩習日を倉えおいきたす。
Phase 5孊習履歎・苊手分野の可芖化
最終的には、
AWS Networking理解床 55%
IAM理解床 80%
Storage理解床 90%
ずいった圢で、自分の孊習状況を分析できるずころたで持っおいきたいず思っおいたす。
ここたで完成すれば、単なるリマむンドBotではなく、
自分専甚のAI孊習コヌチ
に近づいおいきたす。


最埌に

今回䞀番倧きかったのは、Botが完成したこずそのものではありたせん。
「自分でも䜜れる」ず分かったこずです。

以前の自分であれば、Cloud Run、Firestore、API、IAM ずいう単語を芋ただけで、
これぱンゞニアがやるものず思っおいたはずです。

でもAIを䜿いながら䞀぀ず぀理解し、゚ラヌを解決しおいけば、非゚ンゞニアでも実際に動くものを䜜るずころたで到達できたした。

これを読んでいる非゚ンゞニアの方にも、
「コヌドを曞いたこずがないから自分には無理」
ず最初から決め぀けず、䞀床小さなものを䜜っおみおほしいず思いたす。

完璧な蚭蚈ができなくおもいい。
最初からすべお理解しおいなくおもいい。

AIに聞きながら、
䜜る → 動かない → 調べる → 盎す → 動く
を繰り返しおいく。

その過皋そのものが、非垞に良い技術孊習になりたした。

そしお、゚ンゞニアだけではなく営業を含めた非゚ンゞニアたで「䜜れる偎」になっおいけば、䌚瀟ずしおお客様に提䟛できる䟡倀もさらに倧きくなるはずです。

今回のStudy Reminder Botは、その小さな第䞀歩です。

次はPhase 2。
Geminiによる埩習問題の自動生成に挑戊しおいきたす。