できること
この記事では、次のことができるようになります。
- pdfのページを取得
- slack APIを使った投稿
- botの定期的な実行
経緯
B4M2が卒論や修論で慌ただしくなってきました。1月末が締切なので、今月中には大枠を完成させ、来月は発表準備や細かい修正に当てたいところです。ところが、論文というのはコード以上に書くのが面倒です。なかなか進みません。
そこで、日々の進捗を勝手に報告するslackbotを作りました。同期に進捗を公開することで「お前論文書いてないじゃないか」「bot作っている暇があれば論文書け」とお尻を叩いてもらおうという寸法です。また、Monthly Hack参加者の過半数がB4M2であるため、何かネタを作ろうと思ってやってみました。決して現実逃避ではありません。
という記事を書いて、公開するタイミングを逃して今に至ります。正直、旬が過ぎた記事ですがせっかく書いたので公開します。
システムの全体像
何をもって進捗とするか。色々と基準はあると思いますが、今回は論文のページ数を進捗とします。つまり、このようなシステムを作りました。
- 論文のページ数を取得する
- slackbotを作る
- プログラムを定期的(毎日0時)に実行する
各ステップの詳細を説明していきます。
pdfのページ数を取得する
論文はLaTeXで書いています。毎回pdfで出力して作業を終えているため、出力したpdfのページ数=進捗ということです。このあとslackに投稿することを考えると、コマンドでページ数を取得したいところ。調べたら、やはりありました。
qpdf --show-npages <PATH_TO_PDF>
Ubuntu14.04で試しましたが、apt-getなどなしで使えたので、最初からインストールされているようです。
slackbotを作る
api.slack.com公式サイトに載っているAPIの使い方を参考にコードを書きました。githubにアップしてダウンロードできるようにしてあります。
https://github.com/dhgrs/shinchoku_bot/blob/master/shinchoku.shgithub.com
ダウンロードしたら、<WEBHOOKURL>と<PATH_TO_PDF>の部分にそれぞれslackのWEBHOOKURLとPDFのパスを入力してください。<>は必要ありません。
入力が済んだら、試しに実行してみましょう。shinchoku.shをダウンロードしたディレクトリで次のように実行します。
./shinchoku.sh
正しく動いていれば、botが投稿します。テスト時は自分だけのチャンネルを作ってそこで試すと、他のユーザーの迷惑にならないのでおすすめです。上記プログラムの#randomを投稿したいチャンネルに変えるだけで実現できます。
botを定期的に実行する
毎日24時にこのbotを実行してみます。プログラムの定期実行はcronが便利です。下記コマンドで、定期実行の予定が書き込まれているcrontabを編集可能です。
crontab -e
crontabの書き方はすでに多くのサイトがあるので、そちらを参考にしてください。例えばこちら。今回は以下の1行を追記しました。
00 00 * * * path/to/shinchoku.sh