猿でもわかるAIプログラミングシリーズ 🐵💻 AIと一緒に日記を書く習慣をつくってみよう



## AIと一緒に日記を書く習慣をつくってみよう ✍️📅

---

## 1. はじめに：なぜ「AIと日記」なのか？

「日記をつけようと思っても、三日坊主で終わる」
多くの人が共感する悩みではないでしょうか。

実は、**AIをうまく活用することで、日記を書くハードルをグッと下げる**ことができます。
本記事では、ChatGPT APIを使って「AIと対話しながら日記を書く仕組み」をPythonで作ってみます。

「技術ブログにしてはゆるいテーマだな」と思われるかもしれませんが、
裏では**自然言語処理、API連携、インタラクティブUX設計**など実務にも役立つ技術が詰まっています。

日記だけでなく、社内報告・振り返り・1on1メモ・学習ログなど、さまざまな用途に応用可能です。
**「AIとの共創体験」を日常に持ち込む第一歩**として、ぜひ試してみてください。

---

## 2. 技術スタックと仕組みの概要

### 使用技術：

* Python 3.x
* OpenAI API (GPT-4)
* `streamlit`（対話型UI用）
* `.env`管理（APIキーなど秘匿情報の安全な扱い）

### 全体の流れ：

```
ユーザーが話しかける → AIがうまく促してくれる → 一緒に文章が構成されていく → 最終的に日記として保存
```

AIには次のようなことをやらせます：

* ユーザーの感情や出来事を引き出す質問を投げる
* 話の流れを整える
* 書きかけの日記をうまく補完・要約する

---

## 3. 実装してみよう（コード付き解説）

### 🔧 3.1 環境準備

```bash
pip install openai streamlit python-dotenv
```

`.env`ファイルを作成して、以下を設定しておきます：

```dotenv
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxx
```

### 🧠 3.2 AIとの対話ロジック

```python
# diary_ai.py
import openai
import os
from dotenv import load_dotenv

load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")

def chat_with_ai(conversation_history):
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=conversation_history,
        temperature=0.7,
    )
    return response.choices[0].message["content"]
```

### 💬 3.3 StreamlitでUIを構築

```python
# app.py
import streamlit as st
from diary_ai import chat_with_ai

st.title("📝 AIと一緒に日記を書こう")

if "messages" not in st.session_state:
    st.session_state.messages = [
        {"role": "system", "content": "あなたは親しみやすくて、聞き上手な日記コーチです。今日はどんな一日だったのかを聞いてください。"}
    ]

user_input = st.text_input("あなた：")

if user_input:
    st.session_state.messages.append({"role": "user", "content": user_input})
    ai_reply = chat_with_ai(st.session_state.messages)
    st.session_state.messages.append({"role": "assistant", "content": ai_reply})

for msg in st.session_state.messages[1:]:
    role = "👤" if msg["role"] == "user" else "🤖"
    st.write(f"{role}: {msg['content']}")
```

### 📂 3.4 ログをファイルに保存（オプション）

```python
import datetime

def save_diary(messages):
    diary_text = "\n".join([f"{m['role']}: {m['content']}" for m in messages if m['role'] != 'system'])
    with open(f"diary_{datetime.date.today()}.txt", "w", encoding="utf-8") as f:
        f.write(diary_text)
```

---

## 4. 実務で役立つTIPSと落とし穴

### ✅ TIPS（実務で感じたベストプラクティス）

* **system promptに性格を定義すると会話が自然に**：
  `"あなたは聞き上手な日記コーチです"` のような人格設定は、UXの質を大きく左右します。

* **トピックを分岐させない工夫**：
  質問が広すぎると話が逸れるので、「今日は誰と話した？」など具体的に誘導。

* **Streamlitはプロトタイピングに最適**：
  UIの細かい調整は不要。アイデア検証→社内デモに最適です。

### ⚠️ よくあるエラーと回避法

| 問題                                 | 原因                  | 解決策                               |
| ---------------------------------- | ------------------- | --------------------------------- |
| `openai.error.AuthenticationError` | APIキー不正             | `.env`の読み込みとキーの確認                 |
| 会話が毎回リセットされる                       | `session_state`が未使用 | `st.session_state.messages`で履歴を保持 |
| AIが暴走して話がズレる                       | プロンプト設計ミス           | system promptを具体的に書く              |

---

## 5. 応用：日記→要約→感情分析・日報自動化へ

この仕組みをベースに、以下のような発展が可能です：

* ✨ **日記の要約・トピック抽出**
  「今日は仕事が大変だった」→ `"今日のトピック: 業務負荷"`

* 🧠 **感情スコアの推定**（OpenAI Function Callingで）
  `"ポジティブ: 70%、ネガティブ: 30%"` など自動で出力

* 📧 **SlackやNotionに自動投稿**
  毎日決まった時間にSlackに投稿することで「日報Bot化」

* 🏢 **チームの振り返り共有にも使える**
  各メンバーの日記をもとに、チームのムードや課題を分析

---

## 6. まとめ：AIと習慣化の組み合わせは最強

### ✅ メリット

* 継続が楽になる（質問してくれる）
* 振り返りの質が上がる
* 忘れにくく、共有しやすい

### ❗ デメリット

* 完全自動に頼りすぎると「自分の言葉」が薄れる
* センシティブな内容は取り扱い注意（情報漏洩リスク）

---

## 🚀 さいごに：まずは3日間、AIと話してみよう

習慣は「楽しさ」から生まれます。
AIを相棒にすることで、「書かされる日記」から「書きたくなる日記」へ。

---