ベアプログラミングが無理ならサイレントベアプログラミングを検討しよう

ベアプログラミングは便利ですが意外と使いづらいです。そんな時はサイレントベアプログラミングを検討しましょう。本記事ではベアプログラミングの概要説明から始まり、サイレントベアプログラミングについて書いています。

# どうしてもわからないことがある
コードが動かない。調べても、試しても、考えても一向にわからない。どうしてもわからない……そんな時は誰かに相談すればいいのですが、常に相談できるとは限りません。相談先にも都合があります。えてして相談される人間に限って忙しかったりするものです。

そんな時はどうしますか？

# ベアプログラミングをしましょう
ベアプログラミングをご存知でしょうか？ペア(Pair)ではなく **ベア(Bear)** です。くまさん :bear: です。

「くまさんのぬいぐるみに向かって相談する」という冗談みたいな手法です。詳しい経緯や歴史は [ベアプログラミング（テディベア効果） - 発声練習](http://next49.hatenadiary.jp/entry/20111025/p2) あたりが詳しいでしょう。

よく「人に教えたら自分も理解が深まる」「人に相談しようと思ったら原因がひらめいた」といったことがありますが、これは人に教えたり相談したりする際、ただ一人で黙々と考えるのとは違った頭の使い方をする（そのおかげで今まで見えてなかったことが見える）からだと言われています。

ベアプログラミングは、この美味しい現象を明示的に狙うものです。相手は人ではなくぬいぐるみなので、気軽に行えるというわけです。

# ベアプログラミングは甘くない
しかしこのベアプログラミング、使っている方はわかると思いますが、甘くないのです。

## 不評
ベアプログラミングをすると遅かれ早かれ、こうなります。


:dog: 「何してんだこいつ……」

:cat: 「ぬいぐるみに向かって呟いてる光景が異様すぎて気が散るのですが……」

:pig: 「ブツブツブツブツうるせえんだよ！」

そうです。**周囲からは不評なのです**。周囲の様子などまるで気にしない、カップを落とした音にも振り向かないタイプの人でさえ気にするくらいに、ベアプログラミングは周囲にインパクトを与えます。

もちろん彼らが言っていることは当然です。迷惑がかかるなら行ってはいけません。

## 暗記ゲー
じゃあどうするかというと、自席から離れて、誰もいない場所を探して、そこにぬいぐるみを設置してからベアプログラミングをします。**周囲に誰もいないなら迷惑にはなりません**。

これでめでたしめでたし……ではないです。

そういう場所に限って PC や机が無かったりします。**相談したいことを全て頭の中に入れる** という暗記ゲーが勃発します。悩んでいる問題によっては厳しいこともままあります。やはり自席で、PC が使える場所でやりたいものです。

## 満杯
ならばその PC が使える場所を探しましょう。**会議室（要予約）やミーティングスペース（予約不要）** を確保するのはどうでしょうか。

……おそらくダメでしょう。

まずミーティングスペースですが、オススメしません。というのも、前述したようにベアプログラミングのインパクトが凄まじいからです。普段はそばのスペースで行なわれている打ち合わせが気にならない人でも、**ベアプログラミングになると気になりだす** ことがよくあります。もっともそばに座席のないようなスペースがあれば解決ですが、そんな空間的余裕のあるオフィスはそうは多くないでしょう。

次に会議室ですが **そもそも予約が取れません**。こちらも余裕のあるオフィスならば問題ありませんが、そんなオフィスは稀です。少ない会議室をいかに確保するかという椅子取りゲームが絶えず繰り広げられているはずです。

ましてベアプログラミングは一人です。一人用途のために貴重な会議室を確保することは到底許されません。仮に「会議室は10人で使おうが1人で使おうが同じ『使用』である」「『会議』とは何か。2人以上であるという前提はあなた方の思い込みではないのか」といった主張をしたとしても、苛烈な椅子取りゲーマーには通じません。むしろ自分勝手な人間との烙印を押されることさえあります。

ベアプログラミングはまだまだマイナーなのです。

## 一人ボイスチャット
諦めたらそこで試合終了です。

では **ボイス（あるいはビデオ）チャットを演じる** のはどうでしょうか。自席でヘッドセットを付けて行う人はたまにいます。れっきとした打ち合わせである故に、周囲の人も「まあ仕方ない」と容認している（しなければならない）空気があります。その空気にあやかるのです。

ですが、これには演技力が必要です。我々は俳優ではありません。まして頭の中は悩み事でいっぱいで、ただでさえ演技に気を配る余裕が無いのです。そんな中、あたかも誰かと打ち合わせをしているかのように演じる必要があります。

やってみればわかりますが、難しいです。無理です。**ばれます**。

## もう疲れたよパトラッシュ
ベアプログラミングは諦めるしかないのでしょうか……。

# Silent Bear Programming
いいえ、まだ諦めるのは早いです。少なくとも一つ、盲点を見落としています。

**喋らなければいいのです**。喋らずに、くまさんに相談できればいいのです。

これを **Silent Bear Programming（サイレントベアプログラミング）** と呼びます。なんだかかっこいいですが、長ったらしいので以下 **SBP** と略しますね。

## SBP のやり方
「喋らずにベアプログラミング？どうやるの？」

ごもっともな疑問です。私も最初は見当も付きませんでした。

実はやり方は一つではないのですが、ここでは代表的な方法を一つご紹介します。

## :bear:
突然ですが、くまさんは実は身近なところにいます。

どこに？

ここです → :bear:

そうです、:bear: は `:bear:` と書くことで表示されます。**Emoji** です。**二次元のくまさん**です。

**Slack などモダンチャットを用いている環境** ならば、Emoji は日頃から使っていると思います。Emoji はかなり充実しており、基本的な動物アイコンも網羅されています。ならば `:bear:` があってもおかしくはない……。なぜもっと早く気付かなかったのでしょう。まさに盲点です。

## :bear: さんに相談してみましょう
百聞は一見にしかず、というわけで SBP をデモします。

登場人物

- :rabbit: 私。私はうさぎが好きなので `:rabbit:` をよく使います
- :bear: くまさん。相談相手。

相談：「Python でなぜか ValueError: need more than 1 value to unpack が出る」

- :rabbit:「あのー、すいません。相談したいことがあるんですが」
- :bear:「ええよ。言ってみ？」
- :rabbit:「えっとですね、今書いてる Python のコードでですね、ValueError: need more than 1 value to unpack が出るんですが、原因がわからないんです」
- :bear:「いきなり言語とエラーメッセージだけ言われてもわかるわけないやん」
- :rabbit:「と言いましても、このコードをどこから説明すればいいのかわからなくてですね。コンテキストが複雑なので、出来れば説明することなしに済ませたいなと思っています」
- :bear:「無理やろ。そんなん一般論しか言えへんわ。でもそれくらいわかっとるんやろ？」
- :rabbit:「はい」
- :bear:「本当に？じゃあそのエラーメッセージの意味を説明してみ？」
- :rabbit:「えっと、unpack するのに必要な箱が足りないってことです」
- :bear:「unpack とは？」
- :rabbit:「`a, b = a_method_which_returns_a_tuple()` ← こういうやつです。この右辺値が返してる要素数と、それを受け取る箱の数が合わない、もっというと箱が足りないという意味です」
- :bear:「ふむ。エラーメッセージの意味はわかっているようだね。これで可能性を一つ潰した。それを踏まえて、改めて原因部分のコードを見てみよう……」

……中略……

- :rabbit:「ほら、不可解でしょう？ここでパースしてるデータは split したら必ず 7 個の要素に unpack されるはずなんです。なのにこのエラーが出るんです。100行あるデータのうちの、どこかで。データは全部同じ形式のはずなのに、不可解ですよ……」
- :bear:「はずなのに？」
- :rabbit:「はい？」
- :bear:「君は今、データは全部同じ **はずなのに** と言った」
- :rabbit:「はい、そうですが……あっ！」
- :bear:「わかったかい？」
- :rabbit:「はい。思い込んでいるだけで、実際に試してないということですね。試してみるべきですよね」
- :bear:「そうだ。一行ずつ表示してみたまえ。unpack された tuple の length も出力してやるとよいだろう」

……中略……

- :rabbit:「できました！テストで使ってるデータの一つに余計な delimitor が一個混ざってました……」
- :bear:「めでたしめでたしやな」
- :rabbit:「はい。先生のおかげです」
- :bear:「せやろ」

以上です。 **ぬいぐるみに向かって喋る代わりにタイピングしていく** のが （本記事で紹介している）SBP です。

上記の相談は、終わってみれば何ともしょうもない問題でしたが、私は今まで全く気付けませんでした。:bear: 先生と相談したからこそ見つけることができました。ベアプログラミングと同等の効果が得られました。

重要なのは **私は一切喋っていない** ということです。ただタイピングをしていただけです。誰にも迷惑をかけていません。自席にいながら、堂々とベアプログラミングができたのです。

# SBP を成功させるための TIPS
上記でデモした SBP について、改めてまとめます。

- Emoji を使って一人芝居で相談をする
- 声を出さないため周囲に迷惑がかからない

やり方としてはこれだけです。

「これで本当にベアれるの？」と疑問に思うかもしれません。ベアれます。ただし、**いかにして本来のベアプログラミングに近づけるか**  が大事です。以降では、私が行っている工夫や心がけを紹介したいと思います。

## その1: はっちゃけましょう
一番重要なことです。

**はっちゃけてください。**

**テキストエディタ上での一人芝居を大いに楽しんでください。**

ベアプログラミングは普段使わない頭の使い方を狙うものなので、「考えるな、感じろ」くらいのつもりで、はっちゃけるといいです。そうすると台詞がすらすら浮かんできます。まるで本当に誰かと対話しているかのような錯覚さえ起きます。その過程で、今まで見えてなかった視点が、原因が、ふいに見えたりするものなのです。

## その2: キャラを決めておきましょう
登場人物は基本的に二人です。:bear: 先生と、あとは自分です。

この二人のキャラクター設定はある程度決めておいた方がいいでしょう。その方がテンポがよくなります。どんな設定でも構いません。というより **自分がテンポ良く書けそうな設定** にするといいでしょう。

たとえば私の場合、

- :rabbit: → 私。常に下っ端で、敬語を使う。
- :bear: → 相談相手。複数人いる。その時の気分次第で使い分ける。

私が使う :bear: さんには色んなキャラがいます。上記デモでは登場しませんでしたが **室見さん** もいます。物知りな方なら元ネタはわかるかと思いますが、ライトノベル『[なれる！SE](https://ja.wikipedia.org/wiki/%E3%81%AA%E3%82%8C%E3%82%8B!SE) 』のヒロインです。 **アニメ、マンガ、ラノベのキャラクターは脳内再生しやすいのでオススメです**。

## その3: 入力を省力化しよう
:rabbit: や :bear: を打つのに、いちいち手打ちで `:rabbit:` とか `:bear:` とか打ってたら面倒くさいですよね。タイピングが速いなら問題無いかもしれませんが、そうでなければ省力化するべきでしょう。入力に手間取ると集中できないです。

方法は色々ありますが、私は Windows なので AutoHotkey を使っています。

```ahk
#Hotstring *
#Hotstring O
::r  :::rabbit:「」{Left}
::b  :::bear:「」{Left}
```

上記のようなスクリプトを設定しておくと、 `r  `（アール・スペース・スペース）と打つだけで `:rabbit:「」` と出力されます。キャレットもかぎ括弧の中に入ります。

このおかげでサクサクと会話を進めることができています。

※ちなみにこのような入力省力化は Text Expansion といいます。拙筆ではありますが、ご興味がありましたらどうぞ → [テキストを素早く挿入する手法の一つ Text Expansion についての雑多なまとめ - Qiita](http://qiita.com/sta/items/11dd0dba4b85052b4405)

# FAQ
よくありそうな質問をまとめてみました。

## Q: 私はタイピングが速くないんですが、SBP はできますか？
やってみなければわかりません。

そもそも喋るより速く打てる人は（私含め）そうはいませんので、問題は「今のタイピングスピードで打ってみて、自分に馴染めるかどうか」でしょう。

馴染めればベアプログラミングと同等の効果が発揮されます。私は喋ってベアプログラミングできる時でもあえて SBP するくらいに馴染んでいます。が、これは私がたまたま向いていただけの可能性もあります。

やはり「やってみなければわからない」としか言えません。

## Q: Emoji に対応しているシステムやエディタを使っていないのですが……
自分自身がくまさんを認識できればいいので、たとえば以下のように書いても OK です。

- くまさん「」
- オレ「」

あるいは顔文字を使ってよいでしょう

- (-w-)「くまさんです」
- (^x^)「私です」

## Q: 一人二役を演じるのがしっくり来ません
であれば **ぬいぐるみに向かって喋るように、一方的にまくしたてるやり方** がオススメです。

くまさんの画像、あるいはお気に入りキャラの画像（私の場合は室見さんとか）を開き、そのそばにテキストエディタを置いて、そこに相談内容をガシガシ書いていきましょう。むしろベアプログラミングという意味では、こちらの方が直感的なやり方かもしれません。

ただし **画像を表示しなければならない** ことに注意してください。くまさんであればまだいけないこともないですが、会社で室見さんを表示するのは厳しいものがあります（会社や部署にもよりますが）。

余談: [室見さんがどんなお人なのかリンクを張っておきます](http://nareru-se.dengeki.com/) ← **公式サイトにジャンプします。美少女イラスト注意!!**

## Q: 参考文献はどこ？ググってもヒットしないけど……
~~最近出たばかりの概念なので情報源が少ないのです~~ 嘘です。私の造語だからです。

# おわりに
サイレントベアプログラミングについて紹介しました。

相談したいけどできない、ベアプログラミングもできない……そんな境遇に苦しむエンジニアさんは多数いらっしゃると思っています。みなさまのお力になれれば幸いです。