#はじめに
- マルコフ連鎖botをGoで作った話(前編)
- マルコフ連鎖botをGoで作った話(後編)
今回は前編で作ったコードをCircleCIを用いて定期実行する際の設定や、その時に用いるDockerコンテナの設定などを説明していきたいと思います。
#やること
- Go言語を使ってマルコフ連鎖をするロジックを作る (前編)
- マルコフ連鎖に使うデータは自分のTwitterアカウントのツイートにする (前編)
- 1時間おきにツイートできるように定期実行する機構を作る (この記事)
#定期実行を行う機構について
今回は定期実行を行うためにCircleCIを用いました。
理由としては、
- カスタムDockerイメージが使える(Mecabなどを用いる関係で実行環境を事前に作成しておきたかったため)
- workflowによって実行された結果が管理しやすい
といったものが挙げられます。
#Dockerfileの作成〜DockerHubへのPush
まずCircleCIで用いるDockerコンテナを生成するDockerfileを作成します。
使う用途はこのBotを運用することだけなので、コンテナ生成時に依存パッケージのダウンロードを行って環境変数を設定し、実行ファイルをgitからcloneしてくるところまで行っています。
この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
は以下のようになります。
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リポジトリに置いてありますので良ければ参考にしていただけると幸いです。
それでは、ここまで読んでいただきありがとうございました。