【OpenChat】ローカル環境でBot開発を始めよう！ - 環境構築からサンプルBot実行まで

**このブログ記事は、以下のYouTube動画を参考に作成されました。**

*   **参考動画:** [OpenChat bot framework quick start guide](https://youtu.be/owV3E0mRinI?si=qZ7G54SjDMFoFWTy)

***

## 【OpenChat】ローカル環境でBot開発を始めよう！ - 環境構築からサンプルBot実行まで

この記事では、OpenChatのbotフレームワークを使って、ローカル環境でbot開発を始めるための手順を詳しく解説します。

OpenChatは、Internet Computer上で動作する分散型チャットアプリケーションです。独自のbotフレームワークを提供しており、RustやMotokoなどの言語を使って、チャット内で動作するbotを開発できます。

今回は、以下の流れで環境構築からサンプルbotの実行までを行います。

1.  **事前準備**: 必要なソフトウェアをインストール
2.  **OpenChatのローカル環境構築**: DockerでOpenChatを起動
3.  **OpenChatへのサインアップ**: Passkeyでアカウント作成
4.  **プライベートグループチャットの作成**: bot登録用のチャットを作成
5.  **サンプルbotのインストール**: スクリプトでbotをビルド・デプロイ
6.  **botの登録とインストール**: OpenChat上でbotを登録・利用可能に
7.  **Llamabotとの対話**: サンプルbotと会話

それでは、早速始めましょう！

### 1. 事前準備

以下のソフトウェアをインストールします。

*   **DFX (DFINITY SDK)**:

    以下のコマンドを実行してインストールします。バージョンは動画内で `0.25.1-beta.1` が指定されていましたが、最新版でも問題ない場合があります。

    ```bash
    DFX_VERSION=0.25.1-beta.1 sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"
    ```

    インストール後、以下のコマンドでバージョンを確認し、正しくインストールされていることを確認します。

    ```bash
    dfx --version
    ```

*   **Rust**:

    以下のコマンドを実行してインストールします。

    ```bash
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    ```

    インストール後、以下のコマンドでバージョンを確認します。

    ```bash
    rustc --version
    cargo --version
    ```

    もし`command not found`と表示された場合、ターミナルを再起動するか、以下のコマンドを実行してください。

    ```bash
    source "$HOME/.cargo/env"
    ```

*   **Docker Desktop**:

    [Docker Desktop公式サイト](https://www.docker.com/products/docker-desktop/) から、お使いのOSに合ったDocker Desktopをダウンロードし、インストールします。

### 2. OpenChatのローカル環境構築

Dockerを使って、OpenChatをローカル環境に構築します。

1.  **Dockerイメージのプル**:

    以下のコマンドで、OpenChatのDockerイメージを取得します。

    ```bash
    docker pull --platform linux/amd64 openchatlabs/open-chat:latest
    ```

2.  **Dockerコンテナの実行**:

    以下のコマンドで、Dockerコンテナを起動します。

    ```bash
    docker run --platform linux/amd64 -d -p 5001:80 -p 8080:8080 --name open-chat openchatlabs/open-chat:latest
    ```

    このコマンドを実行すると、以下のポートでOpenChatが利用できるようになります。

    *   **5001番ポート**: OpenChatのウェブサイト
    *   **8080番ポート**: 内部API (DFXが利用)

    `-d` オプションは、コンテナをバックグラウンドで実行するためのものです。`--name open-chat` は、コンテナに `open-chat` という名前を付けています。

### 3. OpenChatへのサインアップ

1.  ブラウザで `http://localhost:5001` にアクセスし、OpenChatのウェブサイトを開きます。
2.  画面中央の「Launch app」ボタンをクリックします。
3.  画面下部の「Guest mode - tap here to sign in」をクリックします。
4.  サインアップ画面で「Sign up with Passkey」を選択します。
5.  画面の指示に従って、Passkeyを作成します。
    *   Touch IDやGoogleパスワードマネージャーなどを利用できます。
6.  ユーザー名を入力し、「Create user」をクリックしてアカウントを作成します。

### 4. プライベートグループチャットの作成

OpenChat上で、botを登録するためのプライベートグループチャットを作成します。

1.  OpenChatの左側メニューにある「＋」アイコンをクリックします。
2.  「New group」を選択します。
3.  グループ名を入力します（例：Test）。
4.  その他のオプションはデフォルトのまま、「Next」をクリックします。
5.  「Create」をクリックしてグループを作成します。

### 5. サンプルbotのインストール

GitHubから `open-chat-bots` リポジトリをクローンし、サンプルbotをインストールします。

1.  **リポジトリのクローン**:

    ```bash
    git clone https://github.com/open-chat-labs/open-chat-bots.git
    ```

2.  **Visual Studio Codeで開く**:

    クローンした `open-chat-bots` ディレクトリをVisual Studio Codeで開きます。

3.  **Llamabotのインストール**:

    Visual Studio Codeのターミナルで、以下のコマンドを実行します。

    ```bash
    cd open-chat-bots/rs/scripts
    ./deploy_llama_bot.sh
    ```

    このコマンドにより以下の処理が行われます。

    *   必要なRustのクレート（ライブラリ）をダウンロード
    *   Llamabotのコードをコンパイル
    *   DFXを使ってLlamabotをローカルのInternet Computerレプリカにデプロイ

    スクリプトの実行が完了すると、ターミナルに `Principal` と `Endpoint` が表示されます。これらは後でbotを登録する際に必要になるので、メモしておきます。

        Name: LlamaBot
        Principal: 3vvic-uwq7k-....-eqe
        Endpoint: http://localhost:4000

4.  **（オプション）Echobotのインストール**:

    同様に、Echobotをインストールする場合は、以下のコマンドを実行します。

    ```bash
    cd open-chat-bots/rs/scripts
    ./deploy_echo_bot.sh
    ```

    こちらも、`Principal` と `Endpoint` をメモしておきます。

### 6. botの登録とインストール

OpenChat上で、作成したbotを登録し、利用できるようにします。

1.  OpenChatで、手順4で作成したプライベートグループチャット（例：Test）を開きます。

2.  メッセージ入力欄に `/register_bot` と入力し、送信します。

3.  **Register a bot** フォームが表示されます。

4.  以下の情報を入力します。

    *   **Test context**: 先ほど作成したグループチャット（例：Test）を選択。
    *   **Principal**: 手順5でメモしたLlamabotの `Principal` を入力。
    *   **Bot name**: OpenChat内で一意となるbotの名前を入力（例：LlamaBot）。
    *   **Bot endpoint**: 手順5でメモしたLlamabotの `Endpoint` を入力（例：`http://localhost:4000`）。
        *   **注意**: `Endpoint` は有効なオリジンである必要があります。
    *   **Bot description**: botの説明を入力。
    *   **Commands**: 今回は `/prompt` を入力。

5.  「Register」をクリックしてbotを登録します。

6.  OpenChatの左側メニューから、「Direct chats」の横にある「＋」アイコンをクリックします。

7.  検索欄に登録したbotの名前（例：LlamaBot）を入力し、表示されたbotを選択します。

8.  「Install bot into group」画面で、botに許可する権限（今回は「send text messages」）を選択し、「Install」をクリックします。

### 7. Llamabotとの対話

インストールしたLlamabotと会話してみましょう。

1.  OpenChatの左側メニューの「Direct chats」に、LlamaBotが表示されているはずです。LlamaBotをクリックして、チャット画面を開きます。
2.  メッセージ入力欄に `/prompt Who are you?` と入力し、送信します。
3.  Llamabotから以下のような応答が返ってきます。

<!---->

    I'm an artificial intelligence model known as a large language model (LLM) or a conversational AI. I was created to assist and provide information to users through text-based conversations...

これで、OpenChatのローカル環境でのbot開発環境の構築と、サンプルbotの実行が完了しました！

### まとめと次のステップ

この記事では、OpenChatのbot開発環境を構築し、サンプルbotを動かすまでの手順を解説しました。

*   DFX, Rust, Docker Desktopのインストール
*   Dockerを使ったOpenChatのローカル環境構築
*   Passkeyを使ったOpenChatへのサインアップ
*   プライベートグループチャットの作成
*   サンプルbot（LlamaBot）のインストールと実行

今後は、`open-chat-bots` リポジトリ内のコードを参考に、独自のbotを開発したり、OpenChatの機能をさらに深く探求したりすることができます。

OpenChatのbot開発を楽しんでください！

***

より深くOpenChatのbot開発を理解し、応用していくためには、以下の点も考慮すると良いでしょう。

**1. より詳細な情報源:**

*   **OpenChat公式ドキュメント:** OpenChatの公式ドキュメントは、より詳細な情報や、様々な機能についての解説を提供しています。特に、bot開発に関するセクションは参考になります。
    *   現時点(2024年5月15日)で、OpenChatの公式ドキュメントは包括的なbot開発ガイドを提供しているわけではありませんが、今後充実していく可能性があります。
    *   [DFINITY Developer Documentation](https://internetcomputer.org/docs/current/developer-docs/ic-overview) でInternet Computerに関する一般的な情報を得ることができます。
*   **`open-chat-bots` リポジトリのREADME:** 今回利用した `open-chat-bots` リポジトリのREADMEには、サンプルボットの概要や、いくつかの設定オプションについての説明があります。
*   **サンプルボットのコード:** `open-chat-bots/rs` ディレクトリ内のRustコードは、実際にどのようにボットが動作しているのかを理解するための最良の情報源です。

**2. 発展的な内容:**

*   **独自のボット開発:**
    *   `open-chat-bots` リポジトリ内のサンプルコードを参考に、独自の機能を備えたボットを開発することができます。
    *   Rustの知識が必要になりますが、`ic-cdk` クレートなどを利用することで、Internet Computer上で動作するCanister（スマートコントラクト）を開発できます。
*   **Motokoでのボット開発:**
    *   OpenChatはMotoko言語でのボット開発もサポートしています。
    *   `open-chat-bots` リポジトリには、Motokoのサンプルボットはまだありません（近日公開予定）。
*   **他のサンプルボットの利用:**
    *   `open-chat-bots` には、LlamaBotやEchobot以外にも、いくつかのサンプルボットがあります（例：Dice bot, Reminder bot）。これらを試してみることで、様々なボットの動作原理を学べます。
*   **OpenChatの他の機能の利用:**
    *   OpenChatには、グループチャット、コミュニティ、暗号通貨の送受信など、様々な機能があります。これらの機能をボットと連携させることで、より高度なアプリケーションを開発できます。
*   **フロントエンドとの連携:**
    *   OpenChatのフロントエンドは、`open-chat/frontend` リポジトリで公開されています。これを参考に、独自のUIを開発したり、既存のUIをカスタマイズしたりできます。

**3. 注意点:**

*   **Internet Computerの知識:** OpenChatはInternet Computer上で動作するため、Internet Computerの基本的な仕組み（Canister、サイクルなど）を理解しておくと、よりスムーズに開発を進められます。
*   **Rustの知識:** サンプルボットの多くはRustで書かれているため、Rustの基本的な文法や概念を理解していると、コードの理解が容易になります。
*   **エラー発生時の対応**: 環境構築やボットの実行中にエラーが発生した場合は、エラーメッセージをよく読み、原因を特定する必要があります。多くの場合、DFXやRustのバージョン、依存関係の問題、またはコード内のtypoなどが原因です。

**4. コミュニティとサポート:**

*   **OpenChatフォーラム/Discord:** OpenChatに関する質問や議論は、公式フォーラムやDiscordチャンネルで行うことができます。
*   **DFINITYフォーラム:** Internet Computerに関する一般的な質問は、DFINITYのフォーラムで質問できます。

上記を総合的に考慮すると、提示した手順はOpenChat bot開発の入門としては十分ですが、より高度な開発や、OpenChatの機能をフルに活用するためには、継続的な学習と情報収集が必要となります。