【初心者でもできた】MBTI×GPTで適職診断ボットを1日で作ってみた【Streamlit】

最近よく目にする「ChatGPT × 診断系のサービス」。  
いつか自分でも、**AIを活用したサービスをつくってみたい**なと思っていました。

とはいえ、PythonやOpenAIのAPIは初心者。  
でも、「まずはやってみよう！」という気持ちで、今回初めて **“診断ボット” の開発にチャレンジ**してみました。

---

目標は「**とりあえず1日で動くものを作る！**」こと。  
将来的には、地元の中小企業にも使ってもらえるようなサービスづくりにつなげたいと思っています。  
今回のプロトタイプも、その第一歩です。

---

この記事では、MBTI（性格診断）タイプを選ぶと、  
- タイプの特性  
- 向いている職業  
- ChatGPTが考える「なぜ向いているか」理由  

を返してくれる診断ボットの**MVP（最小構成）** を作った記録を紹介します。

Python初心者でもできたので、「これなら自分にもできそう」と思ってもらえたらうれしいです。
## 完成したもの

今回作ったのは、**MBTI（16タイプ）を選ぶと、性格の特性・向いている職業・その理由をAIが返してくれる診断ボット**です。

Streamlit というツールを使って、**Webブラウザ上で動くアプリ**として作成しました。

![スクリーンショット 2025-05-29 21.28.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760795/0997794c-a20a-43c2-b736-53a07b1988ab.png)
![スクリーンショット 2025-05-29 21.28.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760795/d70966ca-91ad-4fb6-90d2-7f0c7a9b94e2.png)


（スクリーンショットをここに貼る）

例えば「ENTP」を選ぶと：

- アイデア豊富、柔軟、社交的　という特性が表示され、
- 「データアナリスト」などの職業が提示され、
- ChatGPTが「なぜその職業が向いているのか」を説明してくれます

初学者の自分でも「形になるんだ！」と実感できた、すごくいい経験になりました。

## 使用した技術・ライブラリ

今回は「とにかく動くものを最短で作る」ことを目的に、以下の技術を使いました。

- **Python 3.13**：メインのプログラミング言語
- **Streamlit**：簡単にWebアプリが作れるPythonライブラリ
- **OpenAI API**：ChatGPTの診断理由を取得するために使用
- **dotenv**：APIキーなどの機密情報を `.env` ファイルで安全に管理
- **仮想環境（venv）**：ライブラリのバージョン管理のために使用

特に **Streamlit** は初心者にも扱いやすくて、ローカルでブラウザにアプリが出てくるのが感動的でした…！

## 開発の流れ

ここからは、今回の診断ボットをどんな手順で作ったかを紹介します。  
自分が実際にやった順番なので、初心者の方でもそのまま真似できると思います！

### ① プロジェクトフォルダ作成＆仮想環境セットアップ
```bash
mkdir mbti-assistant
cd mbti-assistant
python3 -m venv .venv
source .venv/bin/activate
```
### ② 必要ライブラリのインストール
```bash
pip install streamlit openai python-dotenv
```
### ③ .envファイル作成（APIキーを設定）
```bash
cat << 'EOF' > .env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

### ④ MBTI特性辞書定義 (mbti_traits.py)
```bash
cat << 'EOF' > mbti_traits.py
mbti_trait_dict = {
    "INTJ": ["戦略的", "計画的", "独立志向"],
    "ENTP": ["アイデア豊富", "柔軟", "社交的"],
    "ISFJ": ["誠実", "協力的", "慎重"],
    "ENFP": ["情熱的", "創造的", "人と関わるのが得意"],
    # 他のタイプも必要に応じて追加
}
```

### ⑤ GPT理由生成モジュール作成 (gpt_reason.py)
```bash
cat << 'EOF' > gpt_reason.py
import os
import openai
from dotenv import load_dotenv
load_dotenv()

def generate_reason(mbti_type, traits):
    openai.api_key = os.getenv("OPENAI_API_KEY")
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "あなたはプロのキャリアアドバイザーです。"},
            {"role": "user",   "content": f"{mbti_type}型の特性（{', '.join(traits)}）に基づき、向いている職業の理由を200文字以内で説明してください。"}
        ],
        temperature=0.7
    )
    return response.choices[0].message.content
```

### ⑥ Streamlitアプリ本体作成 (app.py)
```bash
cat << 'EOF' > app.py
import os
from dotenv import load_dotenv
load_dotenv()

import streamlit as st
from mbti_traits import mbti_trait_dict
from gpt_reason import generate_reason

st.title("MBTI × 適職診断ボット（MVP）")
selected_type = st.selectbox("あなたのMBTIタイプを選んでください", list(mbti_trait_dict.keys()))

if st.button("診断開始"):
    st.subheader("🔍 診断結果")
    traits = mbti_trait_dict[selected_type]
    st.write("あなたの特性：")
    for t in traits:
        st.write(f"- {t}")

    st.write("向いている職業の一例：")
    st.write("- データアナリスト\n- コンサルタント\n- 研究職")

    with st.spinner("AIが診断理由を考えています..."):
        reason = generate_reason(selected_type, traits)
    st.write("🧠 向いている理由：")
    st.success(reason)
```
### ⑦ アプリ起動
```bash
streamlit run app.py
```

## 詰まったところと解決法

### ❶ OpenAI APIが動かない？

最初に `openai.ChatCompletion.create()` を使ったら、こんなエラーが出ました：

```bash
openai.lib._old_api.APIRemovedInV1
You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0
```

調べてみると、**OpenAIのPythonライブラリがバージョン1.0以降で仕様変更**されており、昔の書き方が使えないことが原因でした。

---

### ✅ 解決方法

今回は手っ取り早く動かすため、**旧バージョンにダウングレード**して対応しました：

```bash
pip install openai==0.28
```
### ❷ .env ファイルが読み込まれない？
Streamlit で .env のAPIキーを読み込むには、以下を忘れずに書きます：
```bash
from dotenv import load_dotenv
load_dotenv()
```
.env ファイルがプロジェクトルートにあることを確認
### ❸ Streamlitコマンドが見つからない？
仮想環境が有効になっていないと streamlit が見つからないことがあります。
```bash
source .venv/bin/activate  # 毎回作業前にこれを実行！
```
## 今後の展望

今回作ったのは、いわば「動くプロトタイプ（MVP）」です。  
ここからさらに発展させていく予定です！

---

### 🔄 今後やってみたいアップデート

- **おすすめ職業をMBTIタイプごとに出し分ける**  
  現状はすべてのタイプで同じ職業が出ますが、  
  タイプに応じて適した職業を動的に出したいです。

- **RAG（Retrieval-Augmented Generation）で根拠を補強**  
  オリジナルの職業データベースを用意して、  
  GPTに「その中から選んでもらう」ようにしたいです。

- **UIのブラッシュアップ**  
  TailwindCSSやNext.jsを使って、見た目も整えたい！

---

### 💡 学習ログ × Qiita連載の構想

このプロジェクトは **「個人開発×学習記録×発信」**の練習にもぴったりでした。

今後は以下のようなテーマで記事を分けて投稿していく予定です：

- MBTI適職診断ボットの構成解説
- OpenAI API（v1.0以降）への対応方法
- RAG構成の設計と実装（初級編）
- StreamlitとFastAPIの使い分け
- デザインを整えるTailwind入門

---

### 🔚 最後にひとこと

「自分にもAIサービスが作れるんだ！」と感じられたのが一番の収穫でした。  
地方で活動することを目指す自分だからこそ、こういった技術で**地域や個人に寄り添うツール**をつくれたらと思っています。

まだまだ改善点はありますが、まずは動くものを作って公開することで  
いろんな人とつながれたら楽しいです！