LoginSignup
3
1

More than 3 years have passed since last update.

マルコフ連鎖botをGoで作った話(後編)

Last updated at Posted at 2019-09-25

はじめに

今回は前編で作ったコードをCircleCIを用いて定期実行する際の設定や、その時に用いるDockerコンテナの設定などを説明していきたいと思います。

やること

  • Go言語を使ってマルコフ連鎖をするロジックを作る (前編)
  • マルコフ連鎖に使うデータは自分のTwitterアカウントのツイートにする (前編)
  • 1時間おきにツイートできるように定期実行する機構を作る (この記事)

定期実行を行う機構について

今回は定期実行を行うためにCircleCIを用いました。
理由としては、

  • カスタムDockerイメージが使える(Mecabなどを用いる関係で実行環境を事前に作成しておきたかったため)
  • workflowによって実行された結果が管理しやすい

といったものが挙げられます。

Dockerfileの作成〜DockerHubへのPush

まずCircleCIで用いるDockerコンテナを生成するDockerfileを作成します。
使う用途はこのBotを運用することだけなので、コンテナ生成時に依存パッケージのダウンロードを行って環境変数を設定し、実行ファイルをgitからcloneしてくるところまで行っています。
このDockerfileが以下になります。

Dockerfile
FROM golang:latest

RUN apt update
RUN apt -y install sudo
RUN sudo apt install -y mecab libmecab-dev mecab-ipadic-utf8 git

ENV GO111MODULE on
ENV CGO_LDFLAGS -L/usr/lib/x86_64-linux-gnu -lmecab -lstdc++
ENV CGO_CFLAGS -I/usr/include

RUN git clone https://github.com/cotton392/ctn_ai.git

このDockerfileを使ってDockerコンテナを作成した後、コンテナをDockerHubへPushして準備完了です。

CircleCI側の設定

次は前項で作成したDockerコンテナを用いて、前回作ったプログラムをCircleCIで1時間ごとに定期実行するように設定していきたいと思います。
CircleCIで定期実行を行うために今回はCircle-CI 2.0のcron triggerを利用しました。
また、push時にgit pullした後go buildするようにも設定します。
これらを行うようにするためのconfig.ymlは以下のようになります。

config.yml
version: 2
jobs:
  tweet:
    docker:
      - image: hystyl243/ctn_ai-container:1.0.0

    working_directory: /go/ctn_ai
    steps:
      - checkout
      - run: go run main.go


workflows:
  version: 2
  tweet_workflow:
    triggers:
      - schedule:
          cron: "0 * * * *"
          filters:
            branches:
              only:
                - master
    jobs:
      - tweet

  push_workflow:
    jobs:
      - tweet

また、Twitter APIで使用するトークンはCircleCIのプロジェクト内で環境変数を定義してそれを利用しています。

これでマルコフ連鎖Botの完成です!

最後に

今回の一連の記事では、Go言語でマルコフ連鎖Botを作成する手順を紹介しました。
この記事がマルコフ連鎖のロジックの理解や、Go言語で作られたプログラムをCircleCIで定期実行する方法の理解などに役立てれば幸いです。
また、今回紹介したコードは全てこのGitHubリポジトリに置いてありますので良ければ参考にしていただけると幸いです。

それでは、ここまで読んでいただきありがとうございました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1