クックパッドでジョブズも成仏する開発Tips発表したったwww


＜この記事は[自社のブログにも転載しました](http://curiosity.co.jp/archives/37)＞

クックパッドさんが月イチで行っている[第5回potatotips（ポテトチップス）という開発Tips共有会](https://potatotips.connpass.com/event/5362/)が開かれたので参加させてもらい、『ジョブズも成仏するTips考えたったwww』という2chのスレタイみたいなタイトルで発表させてもらいました。

[発表時の資料はSlideShareに上げてます](http://www.slideshare.net/YoshinoriImajo/tipswww)が解説編を書いておきます。

![cookpad.jpg](https://qiita-image-store.s3.amazonaws.com/0/16400/497dff0a-104b-c510-ca92-5b0a163aae97.jpeg "cookpad.jpg")

私も前に参加した[potatotips第3回目](http://qiita.com/yimajo/items/254c7cebab7864678246)はYahoo!Japanさんで開催してましたが、今回はクックパッド社開催で、会場は会社のエントランス部分がキッチンと発表会場のスペースにつながっていました。この写真で見てわかるようにキッチンから発表を眺めるというアットホームな光景ですね。


# ジョブズ成仏（じょうぶつ）の発端

![スクリーンショット 2014-03-13 1.02.53.png](https://qiita-image-store.s3.amazonaws.com/0/16400/a6ee602b-24fd-bbb9-217a-a5fb540bd9b1.png "スクリーンショット 2014-03-13 1.02.53.png")

「ジョブズが通った」はなし。私は[はてな社のインターンの方のブログ](http://cocodrips.hateblo.jp/entry/2013/09/07/221309)で読んだことがあっただけで[cockscomb](https://twitter.com/cockscomb)さんが実際に発言したのを聞いたわけでもなかったので半信半疑だったのですが、発表中、会場にいらしたはてな関係者[ninjinkun](https://twitter.com/ninjinkun)さんが「それcockscombが言ってるだけだよ！」と発言されてたので、どうやらこの事はひた隠しにすべき事実らしい、という手応えを感じました。

# ジョブズが成仏（じょうぶつ）していない?

うちのXcodeの場合はクラッシュするというよりシミュレータで動作させようとすると1/2ぐらいの確率でXcodeがフリーズします。人に聞くとスニペットを使ってるとクラッシュするという人も居るので各々の環境によって違っているんじゃないかと思います。とにかく成仏してない感じにもジョブズの独自性を感じます。

# Xcodeがフリーズするとやっかい

Xcodeがクラッシュするとクラッシュレポートを送るかどうかのダイアログが出た後に再起動するかを選ぶことが出来ます。フリーズする場合、終了が出来なくなるので強制終了させないといけなくなり結構厄介です。具体的にはOSXの上にあるリンゴマークをクリックして「強制終了」からXcodeを選択するので面倒ですね。

# ジョブズに成仏（じょうぶつ）してもらってXcodeを再起動する

成仏してないのであれば成仏してもらうべきですし、Xcodeもそれに伴って再起動すべきでしょう。では成仏させる方法とは？色々考えた結果、神社などで手をパンパン！とたたく柏手（かしわで）という日本古来の方法がベストではないかという結論にたどり着きました。

そもそも柏手（かしわで）とは、神に近い対象に感謝や喜びを表すためでもあるようで、日本の禅や仏にも詳しいジョブズに成仏していただくのにベストなソリューションではないでしょうか？

![スクリーンショット 2014-03-13 1.45.41.png](https://qiita-image-store.s3.amazonaws.com/0/16400/3e241bad-64a6-7c12-3d1b-af0c39bb27d1.png "スクリーンショット 2014-03-13 1.45.41.png")

つまり、

Xcodeがフリーズ
↓
柏手（かしわで）を2回叩く
↓
ジョブズが成仏（Xcodeが再起動）

となります。この時点で会場にいた大半が「言葉の意味は分かったが何を言ってるかわからない」という感想を持って一体感が生まれていたので、この文章を読んでいる方が何を言っているかわからないと思うのは無理もないと思います（実は資料を作ってて気にならなかったのですが今思うと話の順番が良くなかった気がします）。


# 柏手（かしわで）をMacが認識する方法

本題です。Xcodeを使う開発者が柏手（かしわで）を打って成仏させることをMacが認識しXcodeの再起動を行うには音声認識かジェスチャー認識が必要になります。

MacにはiClapperというアプリが有り、これが柏手（かしわで）の音を認識することがわかりました。

![スクリーンショット 2014-03-13 2.19.57.png](https://qiita-image-store.s3.amazonaws.com/0/16400/5017ab32-f44a-b96f-0c6b-8c4513fa0fe1.png "スクリーンショット 2014-03-13 2.19.57.png")

このアプリでは、音声認識により任意のアプリやAppleScriptを起動でき、システム音声やGrowlにより視覚的な通知も行います。

![iClapper](http://a5.mzstatic.com/jp/r30/Purple/v4/ef/c9/fd/efc9fd03-c6eb-a5de-b0be-c9e70f22aa7f/screen800x500.jpeg)


Xcode再起動用のAppleScriptは次のような感じです。

```
if application "Xcode" is running then
	tell application "Xcode" to quit
	say "Kill xcode"
	delay 1
end if

say "Boot Xcode"
tell application "Xcode" to activate
```

ターミナル経由でないスクリプトの進捗はわかりづらいので、sayを使うことで指定した文字列をシステム音声により喋らせるすることが出来ます。上記の例ではすでにXcodeが起動している状態なら"Kill xcode"と発音し、そのあとに"Boot Xcode"の発音とともに起動します。

## AppleScriptについて

tell application "<#アプリ名#>"でアプリケーションを指定し、 その後に続くto activateでウインドウを前面に起動出来るようです。

アプリケーションの終了はtell application "<#アプリ名#>" to quitになります。

AppleScript Language Guide
https://developer.apple.com/library/mac/documentation/applescript/conceptual/applescriptlangguide/reference/aslr_cmds.html


# iClapperの設定

![スクリーンショット 2014-03-13 2.41.05.png](https://qiita-image-store.s3.amazonaws.com/0/16400/bd073a41-e76f-29d8-237c-45a91d3243e7.png "スクリーンショット 2014-03-13 2.41.05.png")

DoubleClapのチェックボックスをオンにして任意のAppleScriptを指定します。また音声をあらかじめ学習させることができるので、自分の環境で何度か柏手（かしわで）を打っておきましょう。

# デモ

会場では発表の最後に実際に柏手（かしわで）での成仏デモを行いました。失敗すると発表者である私がただ元気に手を叩いただけになってしまうので緊張しましたが無事成功しました。緊張感の中での成功だったため、会場のみなさんによる拍手喝采になりXcodeが再起動を繰り返すというアクシデントも有りましたが皆もジョブズの成仏を体験できて何よりです。

音声認識は場所による影響を受けやすいため、会場でうまくいかないだろうと思いあらかじめ撮っておいた成仏動画を公開します。再生時間は53秒程度です。

http://www.youtube.com/watch?v=8eKdCh0QykQ

# 雑感

- 参加者ほぼ発表者というのは前でデモをする気持ちがわかってるので緊張感があって面白い
- 当然だけど参加者クックパッド在籍の方が多く技術的にとんがっている感じだけど直に話すとちゃんとした人たちなので若いエンジニアには良き先輩/上司になるのではないかという気がした

クックパッド社ではエンジニアを募集しているようです