hubot で雑談したり、FAQ に答えてもらう
TL;DR
https://github.com/Qooh0/myhubot
script ディレクトリ以下に hubot + Slack で DoCoMo の雑談API と FAQ API に対応したスクリプトを置きました
■ hubot を触る
https://hubot.github.com/docs/
上記に書いてあるとおりにインストールすればOK
npm install -g yo generator-hubot
を実行
その後
mkdir myhubot cd myhubot yo hubot
で入力していきます。
adapter を聞かれたら、 slack と入力します。
■ hubot を実行する
簡単なのは、実行スクリプトを書くことです。
[2015-09-06 19:04:36] % cat start-el.sh #!/bin/zsh cd src/myhubot export PORT=10001 export HUBOT_SLACK_TOKEN=wwwwww export DOCOMO_API_KEY='xxxxxx' export DOCOMO_CLIENT_SECRET='sample' export DOCOMO_CLIENT_ID='id_xxxxxx' ./bin/hubot --adapter slack
こうすると、 node.js では環境変数にアクセスできるので process.env.DOCOMO_API_KEY
で設定を取得することができます。
■ ライブラリを追加したい場合
npm install —save <package>
で追加することができます
Rails プロジェクトの実行環境を作る
これからしばらく Rails についての blog を更新していきます。
そのための下準備として、Ruby の実行環境を作り方を記載していきます。
■ プロジェクトの実行環境を作成する
昔は、実行環境を構築するまでが一苦労でしたが、今は誰かが用意してくれたやつを実行すればよいだけになっていることが多くて楽ですよね。今回のプロジェクトでは、 Ansible + Vagrant で作成していくことになりました、私が…。
■ なぜ Ansible か?
- Client に特別なアプリを入れる必要がない
- 特殊な DSL を覚える必要がない
■ なぜ Docker ではないのか?
- なにか問題が発生した時に、ある程度開発者個人で対応できる必要があるが、そこまでコストを掛けられないのではないか?
- 新しく人が入ってくるたびに、 Docker について学んでもらう必要があるが、そこまでコストを掛けられないのではないか? と判断したため
■ Ansible でやっていること
- OS のインストール
- 必要なライブラリのインストール
- bashrc などへの書き込み、 ソフトリンクの作成など環境設定
- プロジェクトのコードの Git clone
- DB へのデータ投入
■ Ruby の実行環境について
Ruby の実行環境は Vagrant 内に rbenv —global で設定しています。
専用の VirtualBox なので、グローバルで設定したほうが良いという判断です。
ansible で設定しています。
Ubuntu 用は Galaxy.ansible.com で公開中です。
https://galaxy.ansible.com/list#/roles/2698
■ gem のインストールについて
開発環境を作成するときに ansible から bundler を グローバル環境に gem install しています。
bundler 以外のインストールについて気にするときは、Rails new した時に —path を指定するのを忘れないようにします。
一回、path を設定すると .bundler/config にインストール場所が保存されます。
この場合、Gemfile を更新した場合は次回から bundle install で OK です。
■ どこまで書くか問題
こういう環境設定の話って、どこまで書くか毎回悩みますわ…。
昔ながらの Private 関数の宣言、見にくくない?
■ その昔
Ruby には このような書き方しか許されてなかった…
class Hoge def fuga end def jack end private: def sage end def age end end
■ 今
しかし、時代は変わった
class Hoge private def sample end end
def の前に private ってかけるようになった
今までだと、図の左のような作りになる
Public メソッド内で使用されているprivateメソッドが遠くに宣言されていて、ちょっと見にくい.
vimmer の :vsp / :sp 使えばいいじゃん的な発想 滅びろ! は、ちょっと…。
そんなわけで、private を def の前に書けるようになったんだから、
昔の書き方にとらわれず、private を近くに書いてもいいんじゃないでしょうか?
……だめかな?
YAPC Asia 2015 に参加してきた
YAPC::Asia に参加してきました。
一晩寝て、強く印象に残っているのは
- HTTP/2時代のウェブサイト設計
- Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜
- Profiling & Optimizing in Go
- Adventures in Refactoring
です。
この中のいくつかは資料が公開されていますし、受賞もしているので blog されていることが多いと思います。
そこで Adventures in Refactoring
で紹介されていた gem について書こうと思います。
scientist
https://github.com/github/scientist
Ruby のリファクタリングツール。
2つのメソッド(新・旧)をテストできる。
たとえば A, B と2つのメソッドがあったとする
A : 既存の実装
B : 新しい実装
Github では、scientist を使って A, B のパフォーマンスを計測する。
ということをしているとのこと。
良いリファクタリングと悪いリファクタリングについてや
リファクタリングする理由など、改めて考えさせられましたた。
資料が公開されたら、チームで話しあおうと思っています。
YAPC::Asia 長年お疲れ様でした。
今までで 2回しか参加したことないけど、寂しさを感じますね。
// Perl6 だいぶ面白そうなので、ちょっと魅力を感じてます。
IP Address かどうかの Validator (ruby, rspec)
IP Address は IPv4 と IPv6 があるのは御存知の通り。
RSpec とかでバリデーションしたいときに、どちらかであることをチェックしたいことがあります。
ユーザーの IP Address とかを DB に保存するときの Validation として使います。
StackOverFlow などで検索しても、このやり方が紹介されていなかったので記載しておきます。
ただ、昔からやってる rubist には普通なのではなかろうか…
IP_ADDRESS_VALIDATE = Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)
SICP 問題 2.5
どのように解いたかは、下記のリンクに記載しました。
https://gist.github.com/Qooh0/172078ef015bfd4b8612
ここにハマった
(car x) を作成するときは、2 ^ a を調べればいいので、偶数かどうかを調べればよかった。
(cdr x) も作成するときは、奇数かどうかを調べていけばいいと思った。
しかし、頭の良い皆さんならわかると思いますが、奇数かどうかを調べるのでは正しくない。
なぜなら、 (* 2 3) は 6 になる。つまり、偶数になります。
これに気づくのに時間がかかった…
そのため、回答の car と cdr では、実装方法が異なっている。
両方とも cdr の実装でとくのが正しいはず。
やー、失敗した。
Ansible で疑問に思ってたことを聞いてみた
昨日、@usaturn さんに Ansible について聞く機会があったので、お話を聞かせていただいた。
Q. Ansible って、結構使ってますか?
A. 普通に使ってます。
Q. Ansible + Vagrant の場合、ユーザーはどうしていますか?vagrant ユーザーを使用していますか?
A. Vagrantは使っていません。Ansibleを利用する際のユーザは、共用ユーザを使っています。
Q. Galaxy に良い Role がないのですが、どうしていますか?
A. 適当に playbook を書いています。
そもそも Ansible を使う人の多くは、簡単に使用したくて使っている人が多いように見えます。
Q. 設定ファイルとか jinja2 で書いていますか?
A. そこまでやりたいのですが、できていないのが現状です。