BDD -煩悩駆動開発-

煩悩駆動開発(Bonnoh Driven Development) とは、プログラムの開発手法の一種で、ポエム駆動開発から派生したものである。

煩悩とは何か

煩悩(ぼんのう、梵: क्लेश , kleśa, クレーシャ、巴: kilesa, キレーサ、英: Kleshas)とは、仏教の教義の一つで、身心を乱し悩ませ智慧を妨げる心の働き(汚れ)を言う。 煩悩 - Wikipedia

他者への怒りや嫉妬、欲望を指す言葉として使われることが多い。

煩悩の中身については 百八煩悩 が詳しい。

煩悩駆動開発とは

自身が持つ、怒りや嫉妬、欲望により開発を進めるプログラム開発手法の1つ。自身の持つ煩悩を解消することを目的とし開発を行うため、完成したプロダクトがいったいなんのために使われるものなのかという真意が抜け落ちてしまうことがある。

また、開発者個人ではなく、複数の開発者が持つ共通の煩悩の解消を目的とし、開発を行うことがある。

普段の開発や創作活動に起こる、「ついカッとなってやった、今は反省している」も煩悩駆動開発の一種とも言える。

つまり開発のすべては煩悩に始まり、そしてまた新たな煩悩を生まれることで、自身の煩悩と向き合い、ある一定の者は悟りを開く。

よくあげられる例として、

などを媒介として開眼するパターンがあり、その際、完全な開眼に至らなかったものは、片方を忌み嫌う強大な煩悩を生み出してしまうこととなる。

(書いてみたけど飽きた。。)

参考

ビヘイビア駆動開発 - Wikipedia

PDD|yocifico|note

ポエム駆動開発によるWEBサービスの作り方 pplog誕生ものがたり - pblog

pplog.net の作り方 ( ˘ω˘) ゆるふわ development on GitHub // Speaker Deck

チーム開発での悩み

1つのプロジェクトで、複数人で開発することがあって、そこでとても迷うというか、「なんだかなー」と思うところがあるのでそこの整理も兼ねて書いておく。

  • チャットツールSkypeから変えたい。

    • なぜ:個別での連絡事項は @飛ばすだけでその人にのふぃけーしょんいくようにしたい。
    • どうする: Slack、HipChat、idobataに乗り換えの提案。
  • オンラインでの会話はhangoutにしたい

    • なぜ:Skype、画面共有を複数人では弱い。
    • どうする:ハングアウトに乗り換える。
  • 毎朝それぞれのスケジュールの把握をしたい

    • なぜ:今連絡しても大丈夫なのかを把握する。
    • どうする:チャットで今日はこんな感じでやっていきますーってのを書き記していく。
  • もうちょっと文章化を進めたい

    • なぜ:議事録とかがチャットのログを追ったりすると、脱線とかあった場合の把握の仕方がちょっと面倒くさいって感じ。
    • どうする:Google Docsでもいいけど、何か議事録的なものを記録として残す。その議事録のフォーマットは固定。(1.何を話すのか 2. 何がどうなっていつまでに誰がどうするのか(5W1H形式での記載)3.チャットのログをコピペ みたいな)
  • コードの管理:bitbucketとかそういうの使いたい。

    • なぜ:手元のローカルのマシンにコードがあるとマシンが壊れるとコードがなくなるおそれがある。今何をしてるのかがコードベースでわかる気がする。
    • どうする:bitbucketにリポジトリはあるので、そこで管理する方法でいけたらいいなあ。

チーム開発入門的なもので参考になる記事とか、こういう風にやってますよってのをなんか共有できればなぁと思います。

TODO: あとで記事とか調べたり、提案してみたりする。

エントリ系

文章化

何が叶えばいいか。

  • なんの話をしたか / なにが決まったのかがすぐわかる。
  • テンプレートエンジンがあってそこに当てはめていく感じ。

ツールや手法一覧

チャット

何ができればいいか

  • @でその人に連絡いく
  • 1つのチャットツールで、大体の行動の範囲を把握できる。  - 外部サービスとの連携が多く、hookで通知が流れてくる。

ツール

ビデオ会議系

コード管理

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

Railsのincludeとjoinの違い。 / チュパカブラの勉強日記

ASCIIcasts - “Episode 215 - Advanced Queries in Rails 3”

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

magnusvk/counter_culture

なんかカウントに不整合が出たりするって書いてあったりするけど、そこら辺は僕よりもっと頭のいい人がうまく解説してくれると思います。