BDD -煩悩駆動開発-
10年以上ぶりの書き初めした pic.twitter.com/miGH68XhC1
— 残高ゼロ円 (@kimihito_) 2014, 1月 3
煩悩駆動開発(Bonnoh Driven Development) とは、プログラムの開発手法の一種で、ポエム駆動開発から派生したものである。
煩悩とは何か
煩悩(ぼんのう、梵: क्लेश , kleśa, クレーシャ、巴: kilesa, キレーサ、英: Kleshas)とは、仏教の教義の一つで、身心を乱し悩ませ智慧を妨げる心の働き(汚れ)を言う。 煩悩 - Wikipedia
他者への怒りや嫉妬、欲望を指す言葉として使われることが多い。
煩悩の中身については 百八煩悩 が詳しい。
煩悩駆動開発とは
自身が持つ、怒りや嫉妬、欲望により開発を進めるプログラム開発手法の1つ。自身の持つ煩悩を解消することを目的とし開発を行うため、完成したプロダクトがいったいなんのために使われるものなのかという真意が抜け落ちてしまうことがある。
また、開発者個人ではなく、複数の開発者が持つ共通の煩悩の解消を目的とし、開発を行うことがある。
普段の開発や創作活動に起こる、「ついカッとなってやった、今は反省している」も煩悩駆動開発の一種とも言える。
つまり開発のすべては煩悩に始まり、そしてまた新たな煩悩を生まれることで、自身の煩悩と向き合い、ある一定の者は悟りを開く。
よくあげられる例として、
などを媒介として開眼するパターンがあり、その際、完全な開眼に至らなかったものは、片方を忌み嫌う強大な煩悩を生み出してしまうこととなる。
(書いてみたけど飽きた。。)
参考
ポエム駆動開発によるWEBサービスの作り方 pplog誕生ものがたり - pblog
pplog.net の作り方 ( ˘ω˘) ゆるふわ development on GitHub // Speaker Deck
チーム開発での悩み
1つのプロジェクトで、複数人で開発することがあって、そこでとても迷うというか、「なんだかなー」と思うところがあるのでそこの整理も兼ねて書いておく。
-
- なぜ:個別での連絡事項は @飛ばすだけでその人にのふぃけーしょんいくようにしたい。
- どうする: Slack、HipChat、idobataに乗り換えの提案。
オンラインでの会話はhangoutにしたい
毎朝それぞれのスケジュールの把握をしたい
- なぜ:今連絡しても大丈夫なのかを把握する。
- どうする:チャットで今日はこんな感じでやっていきますーってのを書き記していく。
もうちょっと文章化を進めたい
- なぜ:議事録とかがチャットのログを追ったりすると、脱線とかあった場合の把握の仕方がちょっと面倒くさいって感じ。
- どうする:Google Docsでもいいけど、何か議事録的なものを記録として残す。その議事録のフォーマットは固定。(1.何を話すのか 2. 何がどうなっていつまでに誰がどうするのか(5W1H形式での記載)
3.チャットのログをコピペみたいな)
コードの管理:bitbucketとかそういうの使いたい。
- なぜ:手元のローカルのマシンにコードがあるとマシンが壊れるとコードがなくなるおそれがある。今何をしてるのかがコードベースでわかる気がする。
- どうする:bitbucketにリポジトリはあるので、そこで管理する方法でいけたらいいなあ。
チーム開発入門的なもので参考になる記事とか、こういう風にやってますよってのをなんか共有できればなぁと思います。
TODO: あとで記事とか調べたり、提案してみたりする。
エントリ系
文章化
何が叶えばいいか。
- なんの話をしたか / なにが決まったのかがすぐわかる。
- テンプレートエンジンがあってそこに当てはめていく感じ。
ツールや手法一覧
デザインドックの話だったり、(今はやってるか知らないけども)Googleのサービス存続するかの判断方法について · Issue #1 · riywo/makeandplay 実は昔に自分が提案していた事案。
Rebuild: 52: TLDR Driven Development (Naoya Ito)のドキュメントから先に書きますよって件。
チャット
何ができればいいか
- @でその人に連絡いく
- 1つのチャットツールで、大体の行動の範囲を把握できる。 - 外部サービスとの連携が多く、hookで通知が流れてくる。
ツール系
ビデオ会議系
コード管理
- GitHub
- Bitbucket
TableViewを動かないようにする
tech-memo • TitaniumでTableViewをスクロール禁止にする http://t.co/kdJOTx7qmu
— No more 映画泥棒 (@kimihito_) 2014, 8月 1
1つの要素に複数のイベントをつける
jQuery の on() と off() を理解する - tacamy.blog
on() のひとつ目の引数を、スペース区切りで複数指定することで、どのイベントが発生しても同じ処理をさせることができます。
$('.foo').on('click blur', function(){...});
joinsとmerge
参考にしたリンクだけ
ActiveRecord4でこんなSQLクエリどう書くの? Merge編 - TIM Labs
Rails で十分に活用されていなくてもったいない ActiveRecord::Relation のメソッド TOP 10 - 杉風呂2.0 - A Lifelog -
Rails - ActiveRecord で merge メソッドの引数に order メソッドを含んだ Relation を渡すと ORDER BY のテーブルが変わってしまう - Qiita
Rails - mergeメソッド使ってます? - Qiita
counter_culture
has_manyの数を数えるやつ(投稿に対してのコメント数とか)、馬鹿正直にクエリ(って言うんだっけ)を投げると処理に時間がかかる。いい方法ないかなと思ったら、counter_cacheってのがあるらしい。
Rails order by results count of has_many association - Stack Overflow
Active Record Associations — Ruby on Rails Guides
でもこのcounter_cache、ぐぐってみると、デッドロックとかいうのが出たりとかするらしい。
で、そこら辺をうまくやるのがcouter_cultureってやつらしい。
件数のキャッシュをcounter_cacheじゃなくてcounter_cultureで - リア充爆発日記
Railsのcounter_cacheを使ったらdeadlockが頻発した - Qiita
なんかカウントに不整合が出たりするって書いてあったりするけど、そこら辺は僕よりもっと頭のいい人がうまく解説してくれると思います。