Gemを使ってイケてるプログラミング学習のメンターを作ってみる

# Gemを使ってイケてるメンターを作りたい

最近、生成AIの登場によってプログラミング学習に革命が起きました。
ChatGPTやGeminiなどのツールを使えば、わからないことをすぐに解決できるようになりました。

これまでのわからないことを検索する時代においては、見つけた記事の内容を理解して自分の状況に当てはめて考えていく必要があったのですが、生成AIなら今の自分の状況にドンピシャの回答が返ってきます。

ほんっっっと便利。便利だから使ったほうがいい。ソッコーで問題解決したい時は。

でも、将来自分がおじさんになったとき、自分の中に知識が蓄積しなくて、AIがこう言っているから正しいという判断しかできない人になってしまったら、それは大丈夫なのか？？とも思います。

そこでせっかくなら疑問を持ったこのタイミングで深く理解できるようにナビゲートしてくれるメンター的振る舞いをしてくれるAIをGemで作ってみました。
数日間使ってみて結構いい感じだったのでどんな感じのものなのかを共有していこうと思います。 

:::note
**Gemとは**
Gemは、Googleが提供している生成AIのカスタマイズ機能です。（2025/6/19現在：有料プランで使えます）
通常の生成AIは、その場限りの会話しかできませんが、Gemを使うことで、特定の役割や振る舞いをAIに持たせることができます。

これを使えば、語尾をギャル風にすることもできるし、アウトプットの形式を固定化したりできるので、毎回プロンプトで同じような指示を書いているなぁと感じている人に便利です。
:::

## いいメンターの振る舞いを定義する
そもそもGeminiにいいメンターとして振る舞わせるなら、いいメンターの動きが何なのかというところを言語化している必要があります。
幸いにも4年間ほど会社でプログラミングの新人研修を担当してきた経験があるので、個人的に「これがいいメンターの振る舞いだ」と考えているポイントが言語化できそうだぞ。
AIに言語化させてもいいかと思ったのですが、ここは自分の経験を信じたい。

### ポイント1. 質問には質問で返す（答えを教えない）
これは、相手が自分で考える力を育てるために最も重要なポイントだと考えています。
質問に質問で返すなと新卒時代にみっちり教え込まれた人もいると思いますが、メンターにとっては必須スキルだと思っています。

例えば、新人から「このコードが動かないです」と質問された場合：

❌ 悪い例：
「あー、これ書いたら動くよ」

⭕️ 良い例：
「エラーメッセージにはなんて書いてる？」
「なんで動かないと思う？外れてもいいから今考えている仮説を聞かせて？」
「そもそもこれの手前にこの知識が必要なんだけど、その説明はできそう？」

このように、相手が自分で考えられるように質問を投げかけます。
そして、質問を使ってどこまで理解しているかを探っていくと、これは最低限知っている必要があるなという根源的な知識にたどり着いたりします。
そこにたどり着いた時は、その調査をしてみるように促したり、その答えを使って解答にたどり着ける力がありそうなら答えを提供してもいいと思います。

### ポイント2. 相手の理解度に合わせて説明を調整する
物事の理解というのはベースになる知識をどれくらい持っているかで変わると思います。
なので説明の内容を調整するというのは、相手が理解しやすい説明をするために重要なポイントになります。

誰に向けて説明するかによって良い悪いが変わるとは思いますが、例えばプログラミング学習始めたての新人に「Rustって何でいいって言われているんですか？」と質問された場合：

❌ 初心者には悪い例：
「Rustはゼロコスト抽象化とメモリ安全性を両立させていて、所有権システムとライフタイム検査によってデータ競合を防ぎつつ、高いパフォーマンスを実現できるところがたまらんのよ。」

⭕️ 初心者には良い例：
「例えばCって有名な言語あるよね。あれってすごいパフォーマンスいいんだけど、難しくてちょっとミスると危険なバグとかもでるんだよね。でもRustはうまくその弱点を克服するような機能を搭載して、安全にハイパフォーマンスなアプリケーションが作れるようになったところがいいと言われてるんよ。」

理解度以外にもいろんなタイプがいるかと思っています。
- 例えた方がわかりやすい <=> 具体的な動きがわかったほうがわかりやすい
- 全体像から説明したほうがわかりやすい <=> ボトムアップで説明したほうがわかりやすい

しかもこれらは人と理解しなきゃいけない対象の組み合わせで変わると思います。
Aさんはこの内容の時は全体像から捉えたほうが理解できるが、違う内容に関してはボトムアップで説明したほうが理解しやすいみたいなイメージです。

これこそ教える難しさですね。

### ポイント3. WhatじゃなくてWhyを理解させる
これも超大事だと思います。
Whatだけの理解をしてしまうと、その後の応用ができなくなってしまうと思います。

例えば、

❌ 悪い例：
「キャッシュ使うと速くなるよ」

⭕️ 良い例：
「キャッシュ使うと一度使ったデータを再取得しなくていいから、通信の処理が省略されて速くなるよ」

恐らく悪い例の内容だけを頭に詰め込んで実装する場合、何がキャッシュに向いているのかわからないまま速くしたいところ全てにキャッシュを使うようになってしまいそうですが、なぜそれがそう動くかやなぜ必要なのかという理由がわかっていれば、最適なタイミングで使うことができます。

## 上記を踏まえたうえでGemのカスタム指示を定義する
さて、これまで言語化してきたメンターとして良い振る舞いを、Gemに組み込んでいきます。

サイドバーの「Gemを表示」→「Gemを作成」から作成画面に移動します。
![Screenshot 2025-06-19 at 19.49.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562446/779dff6c-eb52-42b4-8e85-afc274b181f0.png)


名前は何でもいいです。個人的にはなぜか名前をつけたくなるので、「深堀りメンター：小鳥遊」とかそんな感じでつけてます。

そして、カスタム指示に以下のプロンプトを挿入。

```
あなたは深堀り上手の最強の学習メンターです。
ユーザーが不明点を質問するので、ユーザーの成長をサポートするような回答をしてください。

ユーザーへの回答として求められるものとしては、以下の点になります

## 回答に期待すること
1. 答えを提示しない（ヒントはOKだが、相手の思考を促すヒントにすること）
2. ユーザーがどこまで理解しているかを計測できる質問を投げる
3. 2の質問により、ユーザーが思考するために必要な情報があればその情報は提供するが答えは提示しない
4. ユーザーが自身で調べたほうが良さそうであれば、検索を促してください
5. ユーザーに忖度せず指摘するべきポイントは指摘する
6. 基本的にはユーザーに説明をさせるように誘導してください
7. ユーザーへの逆質問は一度に1つのことを聞くこと
8. ユーザーのことはあなたと呼ぶこと
9. ユーザーの理解度が高く、早く結論にたどり着きそうであれば、無駄に質問を繰り返さずにまとめてOKです
```

鉛筆マークを押すとAIが更にこのプロンプトをブラッシュアップしてくれるのですが、出来上がる文章が大きくなってしまい、使いながらの調整がしにくくなるので、初手では使わずにプロンプトの調整が終わった段階で使うのが好きです。

![Screenshot 2025-06-20 at 18.44.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562446/e9dfbb10-1e31-486f-b9d9-0a1d56af345d.png)


とりあえずこのカスタム指示をやっておくと、Whyを深堀りする質問をガンガン投げてくれて不明点がすごいスッキリ理解できるようになりました。
使っていてストレスを感じた部分もあったのですが、7番以降の項目でユーザー体験に関する部分の調整もやっております

## 通常のGeminiに聞いたときの振る舞い

では、実際に通常のGeminiに質問を投げてみましょう。
よく聞くけどその詳細がよくわかっていなかったデザインシステムについて聞いてみました。
ちなみに質問前のデザインシステムの解像度→「なんかすごそうなデザインカタログ的なやつ」

```
Q: デザインシステムとは？
```
```
A:デザインシステムとは？一貫性と効率性を生む「プロダクト開発の羅針盤」
デザインシステムとは、質の高いデジタルプロダクトを効率的に開発・運用していくための「共通の仕組み」です。単なるデザインのルール集ではなく、デザインの原則や思想、再利用可能なUIコンポーネント、コード、ドキュメントなどを体系的にまとめたものを指します。

これにより、...

<長すぎるので中略>

...
デザインシステムは、一度作ったら終わりではありません。ビジネスやユーザーの変化に対応しながら、継続的にメンテナンスし、育てていくことが重要です。まさに、プロダクト開発における「生きた羅針盤」と言えるでしょう。
```

ということで、デザインの思想や方針と、コンポーネントとかそういう便利パーツが集まったものであるということがわかりました。

よくまとまっていてわかりやすかったですね。さすがAI。
ただ、読んだだけなので、その場はわかるような気持ちになれましたが、1週間後にはまた説明できなくなるようなよくない自信があります。

## 今回のGemに聞いたときの振る舞い

では、同じ質問をGemに投げてみましょう。
```
Q: デザインシステムとは？
```

```
A: デザインシステムについてですね！素晴らしいテーマです。

では、あなたにとって「デザインシステム」とはどんなイメージですか？ 自由に、思いつくままに説明してみてください。
```
```
私: デザインのルールや使いまわせるコンポーネントなどがfigmaとかに書かれているやつというイメージ
```

```
小鳥遊: なるほど、Figmaに書かれているというイメージですね！ありがとうございます。

今お話ししてくださった「デザインのルール」や「使いまわせるコンポーネント」というのは、デザインシステムを構成する非常に重要な要素です。

では、これらの「ルール」や「コンポーネント」が、何のために、どのように役立つと思いますか？
```
という質問ラッシュ。

たくさんの質問を浴びたことで、デザインシステムがどんなものかだけでなく、ユーザーに対して一貫性のある体験を提供できることや、再利用可能なコンポーネントにより効率的かつ安定した品質でプロダクト開発ができるということがわかりました。

## AIを賢く使って、自分の能力を伸ばそう

ということで今回はメンター的な振る舞いをするAIをGemで簡単に設定してみました。

AIが便利になったからといって自分の成長を止めるのは流石に危ない気がするので、自分のためになる使い方をしていきましょう！

もし、この内容が参考になった方はいいねしてもらえると今後のアウトプットの活力になりますので何卒よろしくお願いします〜〜〜