はじめに
最近、話題のAIを使って、自分のX(旧Twitter)アカウントを分析してみたい!と思い立ち、触ったこともないDockerを使ってローカル環境にTwitter分析AIを構築することに挑戦しました。
目標は、X(旧Twitter) APIから自分のツイートデータを取得し、Dify.AI というノーコードツールで分析AIを構築することです。
初めてのDocker、初めてのAI構築…。
わからないことだらけで、たくさんのエラーに遭遇しましたが、試行錯誤を繰り返しながら、少しずつ理解を深めていくことができました。
今回は、私の挑戦と学びの記録を、これから同じようにDockerに挑戦する方のために、ガイドブックとしてまとめました。
目次
- 目標とシステム構成
- フェーズ1: Docker環境の準備
- フェーズ2: Twitter APIの準備
- フェーズ3: Docker環境の構築
- フェーズ4: Dify.AIとの連携
- 最後に: 挑戦の先に得たもの
目標とシステム構成
今回の目標は、自分のTwitterアカウントのデータを自動で分析してくれるAIを、自分のパソコン上に作ること。
調べたところシステム構成はこんな感じでいけるかなと。
- X(旧Twitter) API: Xのデータを取得するためのツール
- Docker: アプリケーションを実行するためのコンテナ環境
- PostgreSQL: ツイートデータを保存するためのデータベース
- Dify.AI: データ分析AIを構築するためのノーコードツール
フェーズ1: Docker環境の準備
ステップ1: Docker Desktopのインストール
まずは、Docker環境を構築するために、Docker Desktopをインストールします。
- Docker Desktopのダウンロード: https://www.docker.com/products/docker-desktop にアクセスし、お使いのOS(MacまたはWindows)用のインストーラをダウンロード。
- インストール: ダウンロードしたファイルを実行し、画面の指示に従ってインストールを進めます。
- Dockerの起動: インストールが完了したら、Docker Desktopを起動します。
ステップ2: プロジェクトフォルダの作成
次に、プロジェクト用のフォルダを作成します。
- 任意の場所にフォルダを作成: デスクトップなど、分かりやすい場所に「X-analyzer」という名前のフォルダを作成します。
- フォルダ名は自由に変更可能なのでお好きなフォルダ名にしてください。
- MacでもWindowsでも手順は同じです。
フェーズ2: Twitter APIの準備
- X(旧Twitter) API: のデータを取得するためのツール
APIを使うと、自分のツイートデータを取得することができます。
ステップ3:
- X(旧Twitter) API: のデータを取得するためのツール
Developerアカウントの作成とアプリケーション登録
- X(旧Twitter) API: のデータを取得するためのツール
- Developerサイトへアクセス: https://developer.twitter.com/en/portal/dashboard にアクセスし、「Sign Up」をクリックします。
- Xアカウントでログイン: 既にXアカウントをお持ちの場合は、そちらでログインします。持っていない場合は、新規作成してください。
- 開発者アカウントの申請: 画面の指示に従い、開発者アカウントの申請を行います。
- 申請内容には、X APIをどのような目的で利用したいかを具体的に記述する必要があります。
- 審査があるので、正直に、分析に使いたいと書きましょう。
- メール確認: 登録したメールアドレス宛に確認メールが届くので、メール内のリンクをクリックしてアカウントを有効化します。
- 新規プロジェクトの作成:
- ダッシュボードで「+ Create Project」をクリックします。
- プロジェクト名を入力し(例:
X Data Analysis)、「Next」をクリックします。 - プロジェクト名は自由に設定できます。
- アプリケーションの作成:
- 作成したプロジェクト内で、「+ Add App」をクリックします。
- 「App name」を入力し(例:
Tweet Data Fetcher)、「Next」をクリックします。- アプリケーション名は、わかりやすいものにしてください。
- 「App Description」にアプリの説明を記述します。(任意)
- 「Website URL」には、ダミーのURLを入力しても構いません。
- 利用規約を確認し、「Yes, I agree」を選択して「Create」をクリックします。
- APIキーとアクセストークンの確認:
- 作成したアプリケーションの詳細画面を開きます。
- 「Keys and tokens」タブを選択します。
- ここに表示されている、
API Key、API Key Secret、Access Token、Access Token Secretをメモ帳などに 厳重に保管 してください。- APIキーやアクセストークンは、あなたのアカウントにアクセスするための重要な情報です。他人に教えないようにしましょう。
- アプリの権限設定 (必須):
- アプリケーションの詳細画面の「Permissions」タブを開きます。
- 「Edit」ボタンをクリックし、「Read」と「Write」の権限を付与します。これにより、ツイートの取得と投稿が可能になります。
- 変更を保存します。
フェーズ3: Docker環境の構築
ステップ4: Docker Composeファイルの作成
Docker Composeを使うと、複数のDockerコンテナをまとめて管理できます。
docker-compose.ymlファイルの作成: フェーズ1で作成したX-analyzerフォルダ内に、docker-compose.ymlという名前のファイルを作成し、以下のコードをコピー&ペーストします。
version: "3.9" # Docker Composeのバージョンを指定
services:
twitter-data-fetcher: # データを取得するコンテナの名前
build: . # Dockerfileがある場所を指定 (ここではカレントディレクトリ)
environment: # 環境変数を設定
- API_KEY=YOUR_API_KEY # ステップ3で取得したAPIキーを入力
- API_SECRET=YOUR_API_SECRET # ステップ3で取得したAPIシークレットを入力
- ACCESS_TOKEN=YOUR_ACCESS_TOKEN # ステップ3で取得したアクセストークンを入力
- ACCESS_TOKEN_SECRET=YOUR_ACCESS_TOKEN_SECRET # ステップ3で取得したアクセストークンシークレットを入力
- TWITTER_USERNAME=YOUR_TWITTER_USERNAME # ご自身のTwitterアカウント名を入力
volumes: # コンテナとローカルフォルダを共有する設定
- ./twitter-data:/app/twitter-data # ツイートデータを保存するフォルダを共有
- ./db_data:/var/lib/postgresql/data # データベースのデータを永続化する設定
depends_on: # データベースコンテナが起動してからデータ取得コンテナを起動
- twitter-db
twitter-db: # データベースのコンテナの名前
image: postgres:15-alpine # PostgreSQLのイメージを指定
environment: # データベースの環境変数を設定
- POSTGRES_USER=tweetpilot # データベースのユーザー名
- POSTGRES_PASSWORD=your_password # データベースのパスワード (安全なパスワードに変更してください)
- POSTGRES_DB=tweetpilot # データベースの名前
volumes:
- ./db_data:/var/lib/postgresql/data # データベースのデータを永続化する設定
- Twitter API認証情報の入力:
YOUR_API_KEYなど、YOUR_から始まる部分に、ステップ3で取得したAPIキーとアクセストークンを入力します。 - ユーザー名とパスワードの設定:
YOUR_TWITTER_USERNAMEを、ご自身のTwitterアカウント名に変更します。tweetpilotはデータベースのユーザー名、your_passwordはパスワードです。安全なパスワードに変更してください。
ステップ5: Dockerfileの作成
Dockerfileは、Dockerイメージの構築方法を定義するファイルです。
Dockerfileの作成:twitter-analyzerフォルダ内に、Dockerfileという名前のファイルを作成し、以下のコードをコピー&ペーストします。FROM python:3.9 # Python 3.9のイメージを使う WORKDIR /app # コンテナ内の作業ディレクトリを設定 COPY requirements.txt . # requirements.txtをコンテナにコピー RUN pip install --no-cache-dir -r requirements.txt # 必要なPythonライブラリをインストール COPY . . # カレントディレクトリの全てのファイルをコンテナにコピー ENV PYTHONPATH "${PYTHONPATH}:/app" # PYTHONPATHを設定 CMD ["python", "get_twitter_data_docker.py"] # コンテナ起動時に実行するコマンド
ステップ6: Pythonスクリプトの作成
Pythonスクリプトは、Twitter APIからデータを取得し、PostgreSQLデータベースに保存するためのプログラムです。
get_twitter_data_docker.pyの作成:twitter-analyzerフォルダ内に、get_twitter_data_docker.pyという名前のファイルを作成し、以下のコードをコピー&ペーストします。
import tweepy
import pandas as pd
from datetime import date, timedelta
import psycopg2
import os
# Twitter APIの認証情報を環境変数から取得
api_key = os.getenv("API_KEY")
api_secret = os.getenv("API_SECRET")
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
username = os.getenv("TWITTER_USERNAME")
# 環境変数の取得に失敗した場合のエラー処理
if not all([api_key, api_secret, access_token, access_token_secret, username]):
raise ValueError("Twitter API認証情報が不足しています。環境変数を確認してください。")
# TweepyでAPI認証
auth = tweepy.OAuthHandler(api_key, api_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
# PostgreSQLの接続情報を設定
db_host = "twitter-db" # docker-compose.ymlで指定したデータベースコンテナ名
db_name = "tweetpilot"
db_user = "tweetpilot"
db_password = "your_password" # 安全なパスワードに変更してください
# データベース接続
try:
conn = psycopg2.connect(
host=db_host,
database=db_name,
user=db_user,
password=db_password
)
cur = conn.cursor() # データベースを操作するためのカーソルオブジェクトを作成
except psycopg2.OperationalError as e:
print(f"データベース接続エラー: {e}")
exit(1) # エラーが発生したらスクリプトを終了
# 昨日の日付を取得
yesterday = date.today() - timedelta(days=1)
# 昨日のツイートを取得
tweets = api.user_timeline(
screen_name=username,
count=100, # 最大100件のツイートを取得
include_rts=False, # リツイートは除外
tweet_mode="extended", # ツイート全文を取得
since_id=yesterday.strftime("%Y-%m-%d") # 昨日以降のツイートを取得
)
# ツイートデータの挿入
for tweet in tweets:
try:
cur.execute(
"""
INSERT INTO twitter_data (created_at, tweet_id, text, favorites, retweets)
VALUES (%s, %s, %s, %s, %s)
""",
(tweet.created_at, tweet.id, tweet.full_text, tweet.favorite_count, tweet.retweet_count)
)
except psycopg2.Error as e:
print(f"データ挿入エラー: {e}")
conn.rollback() # エラーが発生したらロールバック
continue # 次のツイート処理へ
conn.commit() # 全ての処理が成功したらデータベースに反映
cur.close() # カーソルを閉じる
conn.close() # データベース接続を閉じる
print("Twitterデータの取得とデータベースへの保存が完了しました。")
- パスワードの確認:
db_passwordに、ステップ4で設定したデータベースのパスワード(your_password) が正しく入力されていることを確認してください。
ステップ7: requirements.txtの作成
requirements.txt は、Pythonスクリプトが依存するライブラリを記述するファイルです。
requirements.txtの作成:twitter-analyzerフォルダ内に、requirements.txtという名前のファイルを作成し、以下のライブラリ名を記述します。tweepy pandas psycopg2-binary
ステップ8: Dockerコンテナのビルドと実行
- ターミナルを開く:
twitter-analyzerフォルダを右クリックし、「ターミナルで開く」(Mac)または「Windows PowerShell で開く」(Windows)を選択します。 - Dockerコンテナのビルドと起動: ターミナルで以下のコマンドを実行します。
docker-compose up -d- 初回実行時は、Dockerイメージのダウンロードとビルドが行われるため、数分かかる場合があります。
-dオプションは、バックグラウンドで実行することを意味します。
- コンテナの確認: 以下のコマンドで、コンテナが起動していることを確認します。
docker pstwitter-data-fetcherとtwitter-dbの2つのコンテナが起動していればOKです。
- データ取得: 上記コマンドの実行が完了すると、データ取得が開始されます。データ取得が完了すると、PostgreSQLデータベースにデータが保存されます。
フェーズ4: Dify.AI との連携
ステップ 9: データベース接続設定
- Dify.AIにログイン: https://dify.ai/jp にアクセスし、アカウントにログインします。
- 新しいアプリケーションを作成:
- アプリケーション名を入力します (例: Twitter分析AI)。
- 説明は任意です。
- 「チャットボット」を選択します。
- 「作成」ボタンをクリックします。
- データ接続設定:
- 左サイドバーから「データ接続」->「接続を作成」をクリックします。
- 接続名を入力し (例: twitter-db), データベースを「PostgreSQL」を選択します。
- 接続設定を入力します。
- ホスト名:
host.docker.internal(Dockerで起動したデータベースにアクセスするための特別なホスト名です) - ポート:
5432(PostgreSQLのデフォルトポート) - データベース名:
tweetpilot - ユーザー名:
tweetpilot - パスワード:
your_password(ステップ4で設定したもの)
- ホスト名:
- 接続のテスト: 「接続テスト」をクリックし、データベースに正常に接続できることを確認します。
ステップ10: アプリケーションの作成
- アプリケーションページへ移動: 左サイドバーから「アプリケーション」に戻ります。
- アプリケーションの作成: 先ほど作成したアプリケーション名をクリックし、アプリケーションの設定画面を開きます。
- データ接続の追加:
- 「データ接続を追加」ボタンをクリックし、先ほど作成したデータ接続を選択します。
- プロンプトの設計:
プロンプトタブで、AIが理解できるような質問例を記述します。- 例えば、以下のように記述します。
## Twitter分析AI このアプリケーションは、あなたのTwitterデータを分析し、フォロワー増加やエンゲージメント向上のヒントを提供します。 ### 使用方法 分析したい内容を質問形式で入力してください。 ### 分析可能な項目 * フォロワー数の推移 * エンゲージメント率 * インプレッション数 * ツイートの時間帯分析 ### 質問例 * 今月のフォロワー増加数は? * エンゲージメント率が高いツイートトップ3は? * どの時間帯のツイートが効果的? - テストと公開:
- 様々な質問を入力してAIの応答を確認し、問題なければアプリケーションを公開します。
最後に: 挑戦の先に得たもの
今回は、残念ながら完成までたどり着けませんでしたが、Dockerを使ったシステム構築の基礎を学ぶことができ、非常に貴重な経験となりました。
次回、もう一度チャレンジして構築目指します。
コメント