0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-05-29

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

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


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


この記事では、MBTI(性格診断)タイプを選ぶと、

  • タイプの特性
  • 向いている職業
  • ChatGPTが考える「なぜ向いているか」理由

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

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

完成したもの

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

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

スクリーンショット 2025-05-29 21.28.11.png
スクリーンショット 2025-05-29 21.28.34.png

(スクリーンショットをここに貼る)

例えば「ENTP」を選ぶと:

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

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

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

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

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

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

開発の流れ

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

① プロジェクトフォルダ作成&仮想環境セットアップ

mkdir mbti-assistant
cd mbti-assistant
python3 -m venv .venv
source .venv/bin/activate

② 必要ライブラリのインストール

pip install streamlit openai python-dotenv

③ .envファイル作成(APIキーを設定)

cat << 'EOF' > .env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

④ MBTI特性辞書定義 (mbti_traits.py)

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

⑤ GPT理由生成モジュール作成 (gpt_reason.py)

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)

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)

⑦ アプリ起動

streamlit run app.py

詰まったところと解決法

❶ OpenAI APIが動かない?

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

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以降で仕様変更されており、昔の書き方が使えないことが原因でした。


✅ 解決方法

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

pip install openai==0.28

❷ .env ファイルが読み込まれない?

Streamlit で .env のAPIキーを読み込むには、以下を忘れずに書きます:

from dotenv import load_dotenv
load_dotenv()

.env ファイルがプロジェクトルートにあることを確認

❸ Streamlitコマンドが見つからない?

仮想環境が有効になっていないと streamlit が見つからないことがあります。

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?