Slack 用の bot を作ってみた
Slack では簡単に bot を作れるようだが、Ruby で実装してみたかったので、 slack api で bot を作ってみた - Qiitaを参考に作ってみる。
必要な Gem をインストール
gem 'slack-api'
Gemfile に追記して、bundle を実行する。
$ bundle Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile: source 'https://rubygems.org' Could not find gem 'slack-api' in any of the gem sources listed in your Gemfile or available on this machine.
あれ…。最初のメッセージは、特に source を指定してないからだろうけど、その下はなんだろう…。
根本的な原因は特定できていないが、source を http で指定したら問題なかった。
最終的な Gemfile
source "http://rubygems.org" gem 'slack-api'
実装
簡易的な実装は下記の様になる。
# -*- coding: utf-8 -*- require 'slack' SLACK_TOKEN = 'ほげほげ' Slack.configure {|config| config.token = SLACK_TOKEN } client = Slack.realtime client.on :hello do puts 'Successfully connected.' end client.on :message do |data| p data if data['text'] == 'test' && data['subtype'] != 'bot_message' params = { token: SLACK_TOKEN, channel: data['channel'], username: "bot test 1", text: "<@#{data['user']}> bot test" } Slack.chat_postMessage params end end client.start
キーワード 2 種類に対してそれぞれのリプライを割り当ててみた図である。
実際に運用する際には、同記事の方が作っている bot の構成などを参考にしていく。 (ベースクラスを作って、それを継承していく形)
作った bot 紹介
Twitter などではなく、会社のチャットで利用している自作の bot についてどんなものがあるのかをまとめてみる。 いろいろ作りたい欲が湧いてきたので、使えそうなものがあれば、実装してみよう。
作ったもの一覧
基本的に Ruby で作っている。
当番通知
週替わりに PC を持ち帰り、緊急時に対応するようになっている(1 年ぐらい続けているけど、1 度ぐらいで基本的に平和)。
その週の担当者への通知を月曜日に行う。
最近対話にも対応するようにした。
数値計測
いろんな数値系を収集してきて、投稿している。月初のみのものもあれば、毎日のものもある。各プロジェクトで利用している。
午後ロー通知
みんな大好き(?)午後のロードショー。
これはなんとなくで、Node.js にしている。公式からゴニョゴニョして取ってきている。今となっては作り直したいぐらいアレでヤバい。
六曜通知
これも Node.js である。
スピリチュアルやね。
会社以外の bot で何をどうするか
何かのデータを受け取って通知とかをいくつかやりたいのでやる予定である。
Slack あたりでやってみよう。
続く。
どっちを買うか
時代の流れなのかわからないけど、今までと違い選択肢があるフォースの覚醒の円盤。
選択肢としては 3 つで、通常版・初回版・プレミアム BOX となっている。
ジャケット的には初回版が良くて、いろいろ特典がついてるという部分ではプレミアム BOX が良い(それでも駄々っ子のフィギュアはいらないけど)。
値段の差もそれなりにある。
どっちにするかをまだ決められてないけど、プレミアム BOX の Amazon 限定の 1 つ目と限定でないやつが売り切れになってるので、念の為に残ってる方の Amazon 限定(↑に貼ったリンク)をポチっておいている。
ついでに Amazon のリンクテストをしている。
メモツールについて考えた
なにかいいものがないかを調べてたので、その条件とこれから使ってみるものについてまとめてみる。
メモツールに求める要件
仕事でドキュメントをまとめたり、議事録を書いたりするのに Atom を使っている。Atom で Markdown のプレビューをしながら書いていると、段々と重くなっていってつらい時がある。そのため、そのようなことがないメモツールを求めていた。
条件をまとめると、この 3 つである。
- Markdown が使える
- いい感じに管理してくれる
- 長文を書いていても重くならない
結論から言うと、Quiver が今回の要件をすべて満たしそう(Demo 版を入れたばっかり)であるが、ブログの下書きなどをする際には Day One 2 が楽そうであるため、この 2 つについて軽くまとめてみる。
Quiver
特徴としては、
- リアルタイムプレビュー
- テーマ
- CSS で調整
- 任意(?)のオンラインストレージで同期可能
である。
リアルタイムプレビュー
下のスクショの通りであるが、ボタンを押すとプレビュー画面が表示されるようになる。
まだ長文を書いていないので、重くなるかどうかはまだわからない。
テーマ
先ほどのスクショや App Store にあるスクショを見ればわかるが、テーマの設定があり、好きな配色にすることも可能である。追加でダウンロードすることで、より好みのものに変えることができる。
CSS で調整
まだ試していないが、CSS で見た目の微調整が可能となっている。
Markdown Cell で文字と文字との間が微妙に気になるので後で調整しておきたい。
テーマのと連動している可能性があるので、テーマ自体も CSS だけで作れるのかもしれない。
任意(?)のオンラインストレージで同期可能
書いているメモのデータの設置場所を任意の場所に変更することができる。
そのため、Finder や Explorer などでアクセスできるタイプのオンラインストレージであればどれでも対応していると思われる。とりあえずメインで利用している Dropbox に置いている。
会社で使うには情報の外部への持ち出しとかが厳し目であるが、オンラインストレージに設置しないで使うのなら問題なく使えそうである。有料系も微妙に申請出さないと使えないけど、まだハードルは低い(気持ち的なもの)。社内で使っている人がいないか調べてみよう。
気になる点
ほぼ文句なしのツールではあるが、強いて上げるとしたら、クリップボードから画像を貼り付けることができないという点ぐらいしか今のところ見つけられてない。
Day One 2
Day One | A simple and elegant journal for iPhone, iPad, and Mac.
ブログの下書き用に採用している(n 時間前から)。
- 日記として使うものであるため時系列で並ぶ
- 位置情報を付加することができ、地図へマッピングできる
- カレンダーで書いた日を確認できる
ここまで書いて疲れたので、細かく紹介しない。
ブログの下書きしつつ、アップロードしたくないものもまとめて管理(誤爆しそうだけど)とかする場合は割りとありなのかもしれないと思い採用した。iPhone 版が無料で使える様になってたのがきっかけ
デザインもよく、機能も充実しているが、
という部分がマイナス要素か。
GitHub Pages に Minecraft Overviewer を設置する時のメモ
前回のお話
Minecraft Overviewer の出力結果が大きすぎて、Heroku にはデプロイできないことが発覚した。
そのため、VPS 以外でどこか無いか探したところ、以前少し触ってから放置していた、GitHub Pages の存在を思い出した。
GitHub Pages というページがあり、自分にあった作り方を選ぶと手順を教えてくれる。
これに従い進めていく。
最初の選択
- User or organization site
- Project site
の 2 種類を選択することが可能である。
前者は <username or organization>.github.io/
となり、
後者は <username or organization>.github.io/<repository>/
となる。
例としては、
あたりがわかりやすいか。https://code.facebook.com/ へ飛ばされるけど。
今回は、Minecraft Overviewer の置き場所にしたいのと、User site も今後利用するかもしれないので、とりあえず後者を選択する。
Generate a site, or start for scratch
いきなり選択肢が出てきたぞ。
まだ何もない状態であるなら前者で、そうでないのなら後者の方がいいのだろうか。
とりあえず両方とも読んでみよう。
Generate a site
手順
- リポジトリの設定を開く
- GitHub Pages の設定で、 Lanuch automatic page generater をポチッとする
- ポチッとしたら、Web 上にあるエディタを使ってコンテンツを追加していく。 (すでにあるファイルはインポートできる?README.md だけか?)
- テーマを選択する
- おしまい
Start for scratch
手順
- 公開用サイト公開用ブランチである gh-pages を作成する
- 任意の作業であるが、このブランチをデフォルトにする(なんでだ)
- index ファイルを追加する
- 追加したファイルをコミットする
- おしまい
どっちを使うのか
ざっと読んだ印象では、今回の場合は Start for scratch の方である。
その結果がコレである。
http://arc680.github.io/arcra/
Minecraft Overviewer を公開するアレコレ
はじめに
(メモとして残しておいたが既に別の方法でなんとかしてます)
以前は VPS 上でマイクラサーバと Web サーバの両方を稼働させていたが、現在では 自宅にある Raspberry Pi 2 でマイクラサーバ、Heroku で Web サーバという風に分けつつある。そのため、Sinatra で Minecraft Overviewer を動かそうとしてみた。
定期的に更新できるようなスクリプトを用意すれば、最新状態を保つことができそうである。
スクリプトで実行するのは、主に 3 つの処理となる。
- マップデータ出力
- ディレクトリ構造調整
- デプロイ
マップデータ出力
cron で各ワールドを n 時間ごとに出力するようにしておく。
$ pyhon hoge.py マップデータのディレクトリ 出力先のディレクトリ
とりあえず適当な場所に出力しておく。
ディレクトリ構造調整
public/ 以下にファイルを設置すれば、http://
ruby - Serving static files with Sinatra - Stack Overflow
生成される html ファイルは基本的に変わることがないだろう(要出典)ことから、一度 views/ に設置すれば特に手を加える必要が無い。
そのため、マップデータの出力先を public/ にしておけばいいので、定期的に実行する予定のスクリプトにはそのパスを指定するようにしておく。
デプロイ
Raspberry Pi 2 を一旦の確認環境として使う
とりあえず今サイトで使っている Gemfiles やサーバを構成するファイルをコピーしてくる。
そして、最低限のパッケージをインストールする。
$ sudo apt-get update $ sudo apt-get install ruby $ gem i bundler $ bundle install
が gem のインストールに失敗する。
$ sudo apt-get install libgmp3-dev
が必要なのかもしれないという情報があったのでインストールしてみたが、これではなかったようである。
Ruby の開発向けパッケージも追加でインストールする。
$ sudo apt-get install ruby2.1-dev
これで gem のインストールができるようになり、Sinatra で Minecraft Overviewer を公開できるようになった。
Heroku へのデプロイ
どうせならということで、Github との連携を試してみる。
(ちゃんとメモしてなかったのでざっくりと)
Github のリポジトリに予め push しておく。
Heroku の Web UI からポチポチっとリポジトリとブランチを選択する。
自動デプロイを有効にする。
これだけのはず。初回は手動デプロイも実施しないとダメかもしれない。
とここまでは割と順調であったが、問題が発生した。
Compiled slug size: 493.4M is too large (max is 300M).
どうやらでかすぎるようだ。
諦めて別の方法を探そう。
Raspberry Pi 2 でマイクラサーバを立てた
最初は初代でやろうとしていたけど、そもそも準備の時点でダメだった。
そのため、Raspberry Pi 2 を購入していた。
MCServer 導入
事前に見つけていた記事によると「普通にサーバを起動させると行けるよ」的な事が書いてあった。その通りにやってみたが、レスポンスがひどく、まともにプレイできそうになかった。
念の為に再度調べてみたところ、MCServer という C++ でできているものがあった。
Raspberry Pi 向けにビルドされているものも配布されており、今回はこれを使うことにした(ソースコードも配布されているので細かく調整してビルドはできるかも)。
この辺りを参考に取得した。
launch MCServer on Raspberry Pi 2 - 虹とトルネード
$ wget https://builds.cuberite.org/job/Cuberite%20Linux%20raspi-armhf%20Master/lastSuccessfulBuild/artifact/Cuberite.tar.gz $ tar xvf Cuberite.tar.gz $ cd Cuberite $ ./Cuberite
で起動する。
MCServer は Web UI でいろいろ設定を変えられる。
変えるためには管理者でログインしないとダメで、最初にその設定をしなければならない。というかしてないと入れなくて何もできない。
vim webadmin.ini
Creative で生成される(?)ので、Survival に変更してワールドごとの設定ファイル以外を削除して再生成する。
これは自分のやり方が悪いだけかもしれないが…。
Minecraft Overviewer 導入
あとは開拓済みのマップをいつでも見られるようにする。
以前、VPS 上で動かしていた時にも使っていた Minecraft Overviewer を今回も使う。
手順は公式に書いてあるとおりで問題…あった。
リポジトリを追加すれば apt-get で入るよ、のようなことを書いてある。
ただ、自分の環境では update の時点で Igr と出てしまいインストールできない状態であった。
そのため、自前でビルドする。
$ git clone git://github.com/overviewer/Minecraft-Overviewer.git $ sudo apt-get install python-imaging python-dev python-numpy $ cd Minecraft-Overviewer $ python setup.py build
ビルドが完了したら、スクリプトを実行しマップを出力する。
$ ./overviewer.py ~/mcserver/world/ ~/output/world/
Overviewer でエラーが出た時の対応方法である。
何もせずに起動するとテクスチャが足りないというエラーが出る。
多分、シングルプレイでやっていると、インストール済みの Minecraft からテクスチャを読むと思われるが、専用サーバを立てている。そのため、そのあたりがごっそりない状態である。
$ wget http://s3.amazonaws.com/Minecraft.Download/versions/1.8/1.8.jar -P ~/.minecraft/versions/1.8/