.vimrc と tender

※本記事は、旧 Tech Talk Blog 内の 「.vimrc と tender (http://www.sixapart.jp/techtalk/2012/02/vimrc_tender.html) はてなブックマーク - .vimrc と tender」 で公開されていた記事を移転しました。

こんにちは。最近は WorkFlowyONE OK ROCK がお気に入りの重田です。

さて本日はエンジニア天国(弊社エンジニアによる社内ミーティング)で私が発表したものをお伝えします。当時は年始でエンジンがかかりませんでしたので、細切れに2つのことを話しました。(こういうときにはドットファイルを晒すのが手っ取り早いです。)

Agenda

  • tender
  • vimrc

tender

tender は @markpasc が作ったスタンドアップミーティングをサポートする IRC ボットです。Perl で作られています。

https://github.com/markpasc/tender

スタンドアップミーティングを皆さんやってますか?私のいる TypePad のチームは毎朝11時付近にスタンドアップミーティングをしています。名前の通り立った状態で前日の状況とか今日の予定とか困っていることとか作業指示とか連絡事項とかをシェアします。7,8名が話して15分くらいで終わる感じです。 そういうミーティングですから基本的には対面で行います。ですが、ときにはリモートで参加する場合もあるでしょう。Skype などのビデオチャットもよいと思いますが、IRC はメモを兼ねる事もできるからToDo を書いておけば便利。ってことでそんなリモートなメンバーのためのツールが tender です。

設定の yaml ファイルにスタンドアップミーティング向けの IRC の情報を記述すれば OK。時間になったら IRC で呼びかけてくれます。

$ cat standup.yaml
server: irc.example.com
nick: tender
password: blehblehbleh
ignore_list:
- logbot
- stabbot
standups:
- id: myteam
team_channel: '#theteam'
standup_channel: '#standup'
schedule: '0 11 * * 1,2,3,4,5'
schedule_tz: Asia/Tokyo
additional_tz: America/Los_Angeles

実行方法は次のようになります。

$ git clone https://github.com/markpasc/tender.git
$ vim startup.yaml
$ perl Standup.pm 

tender は Bot::BasicBot::Pluggable のサブクラスです。standup.yaml にある設定値のほとんどは Bot::BasicBot のオプションです。Bot::BasicBot の POD を見てみるとどんな値が設定できるか分かります。

tender が独自に持つキーは standups です。 自分がメインで利用するチャンネルを team_channel で指定して、スタンドアップミーティングのためのチャンネルを standup_channel で指定します。 cron の時間指定形式で記述された schedule はスタンドアップミーティングの時間を指定します。タイムゾーンが指定できるのでこれらは海外にリモートメンバーがいるときに重宝しますね。この辺りの処理は DateTime::Event::Cron が活躍しています。

実際の動作例は https://github.com/markpasc/tender を見ると IRC ユーザなら分かると思いますが、上記の standup.yaml の設定例を紹介しますと、

まず tender が起動すると #theteam と #standup チャンネルに tender が常駐します。 そして時間になると #theteam に tender が呼びかけます。

11:00 tender: Time for standup! It's in #standup

#startup チャンネルでは tender が待ち構えます。

11:00 tender: Time for standup! Tell me 'start' when everyone's here.
11:00 asawada has joined (~asawada@127.0.0.1)

では、スタンドアップミーティングをはじめましょう。tender に start と告げます。

11:00 shigeta: tender: start

そしたら tender が司会進行してくれます。

11:00 tender: shigeta: your turn

ではシェアしますかね。

11:01 shigeta: 今日は foobar みたいなのでそこそこで切り上げます。
11:01 shigeta: park スクリプトの実行
11:02 shigeta: tender: ark スクリプトの実行
11:02 tender: shigeta: What? ('help' for help)
11:02 shigeta: tender: park スクリプトの実行
11:02 tender: shigeta: Parked.
11:02 shigeta: そんな感じー
11:02 shigeta: tender: next

終わったから次の人へ。#standup チャンネルに参加している人が順番に呼ばれます。

11:02 tender: asawada: your turn

今日は澤田さんがいたから澤田さんの順番になった。でもいないようなのでスキップしちゃえ。tender スキップよろしく。

11:04 shigeta: tender: skip asawada

これで全員終了。

11:04 tender: All done! Standup was 4 minutes.

tender は名司会者なので適当に時間も計測してくれます。 そして #startup チャンネルでスタンドアップミーティングが終わると park を指定した内容がメインのチャンネル #theteam に ToDo が流れてきます。

11:04 tender: Parked topics:
11:04 tender: * スクリプトの実行
11:05 yuji: !!

ということで備忘録的にも便利です。

tender をに依頼するときには

tender: <何かコマンド>

となります。コマンドは https://github.com/markpasc/tender にありますが、start, cancel, next, skip, park, left, when, help, standup があります。 特に日本人にはマッチしないコマンドだと思いますので適当にコマンド追加してカスタマイズするといいですね ;)

罠としては一度起動したら翌日の実行時間が bot-basicbot.sqlite に記録されますので、実験的に何度か起動させたいのにうまく cron として起動しないなーってときはこの sqlite の中を見てみるといいですね。

vimrc

私は vim をメインのエディタに使っています。私の設定はシンプルです。

$ cat ~/.vimrc
syntax on
set shiftwidth=4
set tabstop=4
set expandtab
set autoindent
set ignorecase
set hlsearch
set incsearch
set matchpairs+=<:>

って書くと一瞬で終わりのように見えますが、エンジニア天国ではエディタ宗教戦争談義が行われてそこそこ盛り上がりを見せました。ちなみに Movable Type チームは emacs 派が多く、TypePad チームは vim が 66% で emacs が 33% くらいです。 普段は screen も使っています。.screenrc はそのうちネタに困ったら出します ;p

ということで今年もよろしくお願いします。

Six Apart をフォローしませんか?

次の記事へ

Closure Library が持つアニメーション効果

前の記事へ

パーティーや合コンのお供に、Movable Type