🎆

Riona-AI-AgentをDockerで動かせなかったけどいろいろ調査した話

2025/01/17に公開

Riona-AI-Agentを動かそうとしたけど上っ面の知識だけで動かそうとしたのでかなり時間がかかってしまった。
結局Dockerで動かすのは難しかったのが、知らなかったことを体系的にまとめてみる

Puppeteer

PuppeteerはヘッドレスChromeを動作させるためのライブラリでNode.jsでできている。つまり、自動テストやWebスクレイピングに利用できる。スクレイピングを行う際はChrome DevTools Protocolを使用することが可能。

ヘッドレスChrome

このヘッドレス”ブラウザ”、というのはGUIのないブラウザで、普通のウェブブラウザとは違い、ダブ、URLバー、ブックマークなどインターフェース機能がない。ヘッドレスブラウザはコマンドラインや自動スクリプトで操作するしかない。

npm

そもそもnpmからわかっていない。今までなんとなく使ってきたが、改めてまとめると、npmはnode.js用のパッケージマネージャー。pythonでいうpip。Rubyでいうgem

package.jsonとは?

package.jsonは、npmを使うプロジェクトの設定ファイル。

  • 依存ライブラリの一覧
    「どのパッケージを、どのバージョンで使っているか」が記載されます。
  • スクリプトの管理
    開発サーバーの起動やテストなどのコマンドをまとめることができます。
  • プロジェクト情報
    プロジェクト名、バージョン、作者、ライセンスなどを記述できます。
    例として、package.jsonの抜粋例は以下の感じ。
コードをコピーする
{
  "name": "my-project",
  "version": "1.0.0",
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

ローカルインストール vs グローバルインストール

pipと違ってローカルインストール、グローバルインストールの考え方がある。

ローカルインストール

プロジェクトフォルダ内にパッケージをインストールする。
例: npm install express

  • メリット:
    • 他のプロジェクトとバージョンの衝突を起こしにくい
    • node_modulesフォルダに保存され、プロジェクトごとに管理できる
  • 用途:
    • プロジェクト依存のライブラリ
    • プロジェクト専用のビルドツールなど

グローバルインストール

システム全体にパッケージをインストール
例: npm install -g eslint

  • メリット:
    • システムのどの場所からでも同じコマンドを利用可能
  • 注意点:
    • 依存関係が複数バージョンで共存できず、バージョン衝突の可能性あり
    • 個々のプロジェクトでのバージョン管理にはあまり向かない

npmの基本コマンド例

  1. プロジェクトを初期化
npm init

→ 対話形式またはnpm init -yで自動生成

  1. パッケージのインストール(ローカル)
npm install express

→ 依存関係としてpackage.jsonに書き込まれ、node_modulesに入る

  1. パッケージのアンインストール
npm uninstall express
  1. パッケージのアップデート
npm update express

5.インストール済みパッケージの一覧表示

npm list
npm list -g

→ -gを付けるとグローバルの一覧表示

動作

結局DockerでChromeを動かすのはライブラリの依存関係的に難しいとPuppeteerのトラシューサイトに書いてあったので、(※ 不足している依存関係と最新の Chrome for Testing パッケージを Dockerfile にインストールすれば動くらしいが、デバッグもめんどくさいし、動けばいいや、と思ったのでやめた)

実行手順

0. Node.js / npm をローカルにインストール

macOS なら Node.js公式サイト から LTS バージョンをダウンロードしてインストールするか、Homebrew (brew install node) で導入します。
node -vnpm -v でバージョンが表示されればOK.

1. MongoDB を Docker で起動

mongodbが動いていないと動作しないのでDockerで動かしておく

$ docker run -d \
  --name local-mongo \
  -p 27017:27017 \
  mongo:5.0

2. Riona-AI-Agent のソースコードを取得

git clone https://github.com/david-patrick-chuks/Riona-AI-Agent.git
cd Riona-AI-Agent

3.env の設定

リポジトリ直下に .env.example があるはずなので、これを .env にコピーし、編集****

cp .env.example .env

以下の必要なログインIDやパスワードを編集する。
(2025/1/16現在、Instagram歯科対応していないためIGusername、IGpassword、MONGODB_URIのみで良い。)
MONGODB_URIはローカルでDocker上で起動しているためローカルのURLを記載。

IGusername=your_instagram_username
IGpassword=your_instagram_password 

Xusername= #Twitter username
Xpassword= #Twitter password

MONGODB_URI=mongodb://localhost:27017/rionaai

4. 依存パッケージのインストール

リポジトリのディレクトリ内 (Riona-AI-Agent/) で:

npm install

これで package.json に記載された必要なパッケージ(Puppeteer含む)がインストールされる。

5. アプリを起動

最後にアプリ本体をローカルで起動:

npm start
package.json 内の "start" スクリプトが実行され、

TypeScript のコンパイル(tsc) → build/index.js の起動 が順に行われる。

Discussion