はんこ画像生成botのソースコードを公開します
サークルのslackで動かしているはんこをつくるbotです。
こんな感じに受け取った文字列をはんこ画像にして返します。
たまにこのブログ上でも登場していたのですが、折角なのでソースを公開しておきます。
gist.github.com
全体は2つのrubyのスクリプトで構成されています。
はんこ画像を生成するmakehanko.rbとslackと通信して文字列を受け取ったりはんこ画像を投稿したりするhanyu_hanko.rbです。
つまり、makehanko.rbだけで独立したはんこ画像生成機として使うことができます。
makehanko.rbの使い方
画像に文字をいれるためにrmagickというライブラリ(gem)に依存しています。
これはimagemagickというツールをrubyから扱うためのラッパーのようなものなので、まずimagemagickのインストールが必要です。
私が動かしている環境(debian 8)ではaptitudeでわりとさらっとできた気がしますが、環境によってはこれが結構面倒だったような気がします。
次にrmagickというgemを入れるのですが、私はbundlerという支援ソフトを使っています。
bundlerの使い方は適当に調べて下さい。
最後に、同じ階層にfontsというディレクトリを作って、ここにipaexm_tate.ttfを突っ込んで……と言おうと思ったのですが、このフォント(IPAex明朝を縦書き字形に変更したフォントです)、フォント名からIPAを消していないのでライセンス上公開できないんですよね……
作り方は
旧字フォントをつくった - すずしめにっき
で触れているので、興味のあるかたは作ってみて下さい。
作るのが面倒というかたは、適当なフリーフォントをfonts/hoge.ttfにいれてhoge.ttfを使うようにコードを修正して下さい。
(気が向いたら再配布できるように名称を変えたフォントをアップロードします……)
準備ができたら、
$ bundle exec ruby makehanko.rb 任意の文字列
で使うことができます。
既知のバグとして円記号(バックスラッシュ)が空白になってしまうことがあります。
どうもrmagickのエスケープ文字の絡みなのですが、よくわかりません。
hanyu_hanko.rbの使い方
このスクリプトがやることは、slackの投稿を監視し、正規表現に合う文字列が投稿されると、そこから抽出した文字列を引数としてmakehanko.rbを起動、生成した画像をgyazoにアップロードしてそのURLをslackに投稿、です。
slackのAPIで画像を直接アップロードすることもできるのですが、ユーザー名・アイコンを変更することができなくてbotらしくならないので、外部サービスにアップロードします。
Gyazoはスクリーンショットを共有するための便利サービスですが、APIが公開されていて画像を手軽にアップロードできるのでアップローダー代わりに使っています。
ただ本来のスクショ機能も便利なので最近依存しています。
ちなみに私はNota.Incでバイトをしていないので回し者ではないです。
さて、このスクリプトは"slack"と"gyazo"というgemに依存しているのでまずはそれをbundlerで入れます。
また、環境変数でSlackとGyazoのトークンを指定します。名前はソースを見て下さい(外部に公開しないならばソースを編集して直書きしても構いません)。
それと/home/hoge/と書いているあたりを実際にmakehanko.rbを置いているディレクトリにあわせて修正して下さい。
あとは普通に
$ bundle exec ruby hanyu_hanko.rb
で起動するだけです。
なお、もとのhanyu.rbには他にもいろいろ機能があるのですが、はんこ機能だけ抜き出したのでhanyu_hanko.rbという名前になっています。
これを永続的に動かすためには、もちろん常時起動しているコンピュータが必要になります。
私の場合はサークルのサーバーで動かしていますが、自宅のPCが常時起動している場合や、自宅サーバーがある場合はそれで良いでしょう。
無い場合は、さくらあたりで賃貸サーバーなりVPSを借りるなり、いまどき流行りのAmazonなんとかとかへろく(?)とかと契約すればいいのかもしれません(よくわかりません)。
もしくは京大マイコンクラブに入会すればよいでしょう。
サーバーからログアウトしても動かし続けるためには、tmuxを使うのがお手軽です(tmux上で起動→Ctrl+Dで抜けるだけ)。
私も最初の内はそうしていたのですが、このbotは結構な頻度で落ちるので、落ちる度にいちいち起動するのは面倒でした。
今はnode.jsのforeverというツールを使っています。こいつを使うと落ちても勝手に再起動してくれる(?)ので便利です。
foreverはnode.jsのパッケージなので、
- nvmを入れる。
- nvmでnode.jsを入れる。
- npmでforeverを入れる。
という手順になります。
あとは
$ forever start -c bundle exec ruby hanyu_hanko.rb
です。