プロジェクト

全般

プロフィール

RHEL系に藍ちゃん(自動アシスタント)をインストール

藍ちゃん はmisskeyのマスコット兼アシスタントシステムです。
https://藍.moe

藍ちゃんアカウントを介して次のような事が出来るようになります。

  • 実用的なもの
    リマインダー
    タイマー
    チャート
    サーバ監視
    PING
    カスタム絵文字の追加監視・報告
  • ささやかなもの
    挨拶
    占い
    誕生日おしらせ
    新しいアカウントへのようこそ
    サイコロを振る
    数当てゲーム
    会話に反応する
    単語を覚える
    リバーシの対戦相手になれる

ほかにも色々な事が出来ます(github参照)

導入前準備

  • コンパイル環境の導入
  • 解析エンジンの導入
  • フォントの導入
  • 藍ちゃん用アカウントの作成

コンパイル環境の導入

必要に応じてパッケージを導入します。
「gcc-c++」「libiconv」が必要と明記されていますが、必要に応じて追加します。

解析エンジンの導入

解析エンジンは「MeCab」が指定されています。
単語を覚える機能を使用しない場合は不要とのことですが、ここではフル機能を使うため導入します。

  • 下記からMeCab本体を取得します
    https://taku910.github.io/mecab/#install-unix
    wget --content-disposition 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE'
    ※URLは執筆時点のものなので、実際に確認すること
    
  • 展開する
    tar xzf mecab-0.996.tar.gz
    
  • コンパイルおよびインストール
    cd mecab-0.996/
    ./configure --with-charset=utf8
    make
    make check
    ==================
    All 3 tests passed
    ==================
    
    make install
    cd ../
    
    • configureにutf-8を指定しないとShiftJISでの入力が必要になるらしい
      誤ってその状態にした場合、make cleanしてやり直さないとmake出来なくなる
  • MeCab 用の辞書をインストール
    下記から推奨のIPA辞書を導入します
    https://taku910.github.io/mecab/#install-unix
    wget --content-disposition 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM'
    ※URLは執筆時点のものなので、実際に確認すること
    
  • 展開する
    tar xzf mecab-ipadic-2.7.0-20070801.tar.gz 
    
  • コンパイルおよびインストール
    cd mecab-ipadic-2.7.0-20070801/
    ./configure --with-charset=utf8
    make
    make install
    cd ../
    
    • configureにutf-8を指定しないとShiftJISでの入力が必要になるらしい
      誤ってその状態にした場合、make cleanしてやり直さないとmake出来なくなる

フォントの導入

  • 辞書ファイルの取得
    ここでは下記より「IPAexフォント」のうち「IPAexゴシック」を入手しておきます
    https://moji.or.jp/ipafont/ipafontdownload/
    wget https://moji.or.jp/wp-content/ipafont/IPAexfont/ipaexg00401.zip
    
  • 展開する
    unzip -q ipaexg00401.zip 
    
  • 必要な名前にリネームコピーします
    cp -p ipaexg00401/ipaexg.ttf font.ttf
    

藍ちゃん用アカウントの作成

  • misskeyにアカウントを作成します。
    「ai」(@ai)が望ましいとの事。あらかじめアイコンを設定しておくと良いでしょう

インストール

設定とビルド

misskey構築時にmisskeyユーザに作ったものとして作業します。

  • ユーザの変更と場所の確認
    su -s /bin/bash - misskey
    pwd
    /home/misskey
    
  • リポジトリからソースを取得
    git clone https://github.com/syuilo/ai
    
  • APIキーの取得
    先ほど作成した藍ちゃんアカウントの以下から取得
    設定→その他の設定→API→アクセストークンの発行
    名前「ai」
    権限「適宜必要そうなもの」
    表示されたIDをコピーする事
  • Mecabのパス確認
    which mecab
    /usr/local/bin/mecab
    パスをコピーしておく事
    
  • 設定ファイルの作成
    cd ai/
    vi config.json
    ------------------------------
    {
        "host": "https://misskeyのURL",
        "i": "アクセストークンID",
        "master": "管理者アカウント名",
        "notingEnabled": false,
        "keywordEnabled": true,
        "chartEnabled": false,
        "reversiEnabled": true,
        "serverMonitoring": true,
        "checkEmojisEnabled": true,
        "checkEmojisAtOnce": true,
        "mecab": "/usr/local/bin/mecab",
        "mecabDic": "/usr/local/lib/mecab/dic/ipadic",
        "memoryDir": "/home/misskey/ai" 
    }
    
    • リファレンス
      {
              "host": "https:// + あなたのインスタンスのURL (末尾の / は除く)",
              "i": "藍として動かしたいアカウントのアクセストークン",
              "master": "管理者のユーザー名(オプション)",
              "notingEnabled": "ランダムにノートを投稿する機能を無効にする場合は false を入れる",
              "keywordEnabled": "キーワードを覚える機能 (MeCab が必要) を有効にする場合は true を入れる (無効にする場合は false)",
              "chartEnabled": "チャート機能を無効化する場合は false を入れてください",
              "reversiEnabled": "藍とリバーシで対局できる機能を有効にする場合は true を入れる (無効にする場合は false)",
              "serverMonitoring": "サーバー監視の機能を有効にする場合は true を入れる (無効にする場合は false)",
              "checkEmojisEnabled": "カスタム絵文字チェック機能を有効にする場合は true を入れる (無効にする場合は false)",
              "checkEmojisAtOnce": "カスタム絵文字チェック機能で投稿をまとめる場合は true を入れる (まとめない場合は false)",
              "mecab": "MeCab のインストールパス (ソースからインストールした場合、大体は /usr/local/bin/mecab)",
              "mecabDic": "MeCab の辞書ファイルパス (オプション)",
              "memoryDir": "memory.jsonの保存先(オプション、デフォルトは'.'(レポジトリのルートです))" 
      }
      
  • 先ほど取得したフォントのコピー
    exit
    cp font.ttf /home/misskey/ai
    chown misskey.misskey /home/misskey/ai/font.ttf
    chmod 664 /home/misskey/ai/font.ttf
    su -s /bin/bash - misskey
    cd ai/
    
  • 必要なパッケージをインストールする
    npm install
    ------------------------------
    長期サポートがないパッケージは警告が出るがとりあえず無視する。
    inflightは明確にサポートしてないというかメモリリークがあるから使うなと言われるがどうしたものか……
    
  • ビルドする
    後述の宣言エラーが沢山出るのは仕様 とのことで、実際にはビルド出来ている
    npm run build
    ------------------------------
    Found 36 errors in 15 files.
    
    Errors  Files
         8  src/ai.ts:46
           2  src/config.ts:22
           2  src/index.ts:68
           1  src/message.ts:67
           1  src/module.ts:7
           8  src/modules/chart/index.ts:60
           1  src/modules/check-custom-emojis/index.ts:11
           1  src/modules/emoji-react/index.ts:13
           1  src/modules/guessing-game/index.ts:10
           1  src/modules/kazutori/index.ts:28
           2  src/modules/keyword/index.ts:18
           1  src/modules/poll/index.ts:107
           2  src/modules/reminder/index.ts:14
           4  src/modules/reversi/back.ts:27
           1  src/modules/server/index.ts:12
    

動作確認

  • テスト実行する
    npm start
    ------------------------------
    14:40:10 [AiOS]: Ai am now running!
    
  • misskey上で次のメッセージを送る
    フォローして送るとやりやすいかも
    @ai ping
    ------------------------------
    PONGと帰ってきて♥がつけばOK
    
  • テスト実行を終了する
    ctrl+c
    exit
    

自動起動設定

  • 次のユニット設定を作成する
    参考
    vi /etc/systemd/system/ai-chan.service
    ------------------------------
    [Unit]
    Description=Misskey ai-chan daemon
    
    [Service]
    Type=simple
    User=misskey
    Environment="NODE_ENV=production" 
    ExecStart=/usr/bin/npm start
    WorkingDirectory=/home/misskey/ai
    TimeoutSec=60
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=misskey
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
  • systemdをリロードする
    systemctl daemon-reload
    
  • 自動起動を設定し起動する
    systemctl enable --now ai-chan
    
  • 起動状態を確認する
    systemctl status ai-chan
    

以上でmisskey上で藍ちゃんが誕生しました!