Monthly Hacker's Blog

プログラミングや機械学習の記事を中心に書きます。

修論(卒論)の進捗を確認するslackbot「進捗どうですかbot」を作った

できること

この記事では、次のことができるようになります。

  • pdfのページを取得
  • slack APIを使った投稿
  • botの定期的な実行

経緯

B4M2が卒論や修論で慌ただしくなってきました。1月末が締切なので、今月中には大枠を完成させ、来月は発表準備や細かい修正に当てたいところです。ところが、論文というのはコード以上に書くのが面倒です。なかなか進みません。
そこで、日々の進捗を勝手に報告するslackbotを作りました。同期に進捗を公開することで「お前論文書いてないじゃないか」「bot作っている暇があれば論文書け」とお尻を叩いてもらおうという寸法です。また、Monthly Hack参加者の過半数がB4M2であるため、何かネタを作ろうと思ってやってみました。決して現実逃避ではありません。

という記事を書いて、公開するタイミングを逃して今に至ります。正直、旬が過ぎた記事ですがせっかく書いたので公開します。

システムの全体像

何をもって進捗とするか。色々と基準はあると思いますが、今回は論文のページ数を進捗とします。つまり、このようなシステムを作りました。

  1. 論文のページ数を取得する
  2. slackbotを作る
  3. プログラムを定期的(毎日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