FIVETEESIXONE

high で wide な友人の結婚祝いにアプリを作った話


日曜日に、よちよち.rb で仲良くなった @highwide の結婚式があった。

よちよち.rb ではメンバーの結婚祝いに何かプログラムを開発するという風習があって、これまで自分が知っている限りでも、お祝いのメッセージを添えた Web アプリや Ruboty 製の bot を作って送っていて、受け取った方も喜んでくれていたと思う。

その中でも中心的に活躍していた highwide さんの結婚祝いということもあったので、何か開発してサプライズで送るというのは当然の成り行きで、今回はフリースタイルのラップ好きな highwide さんのために、「Rhymechan」という、お祝いメッセージを登録すると、そのメッセージと韻を踏める単語を探してくれる web アプリを作った。

2016-10-24-an-web-app-for-high-and-wide-1.png

これ、もともと highwide さんが作っていた rhyby という Rails アプリを fork したものだったりする。実は今回はこのアプリが完成するまでに結構紆余曲折を経ていて、その経緯を追うのも (それを知らない本人的にも) 面白いかな、と思うのでその辺りの話からしていくことにする。

Copland になった highwide OS

今回の計画がスタートしたのは結構前のことで、半年前には ta1kt0me さんの発案で「何かやろー!」ってことになっていた。そのときの案は「30日でできる! OS自作入門」という本を読んで「highwide OS」を作ろう!というものだった。

で、idobata に読書部屋を作って読み始めて、週1で2ヶ月くらいは読んでたのかな。この企画自体はとても面白くて、普段触らないような、VRAM に直接書き込んだりするコードをアセンブラや C の低級なコードで書きながら学んでいくものだったのだが、正直、読み進めるにしたがって、

「これを最後まで読んでも、応用して面白いものを作るというのはちょっと難しいんじゃないかな…」

という気持ちが強くなってきた。その性質上、完成したとしても簡単に渡せるものでもない (稼働させるのに一手間かかる) というのも難点だった。

こうして、highwide OS は残念ながら Copland のように日の目を見ぬプロジェクトとなってしまった。

韻を踏むプログラムは書けるか?

ということで、ここまで OS 本を読んできていたが、一旦それは忘れてピボットすることにした。

これまでは誰かが考えてくれたアイデアに乗っかっているだけだったが、今度は自分でも何かアイデアを考えてみようと思い、「何か面白いネタはないかなー」と考えてみる。

個人的な話になってしまうが、僕は「サプライズ」というものがすごく苦手で、それはきっと良しも悪しも自分の想定していない状況が発生することに対して過剰なストレスを感じてしまう性格によると思う。そんな僕がサプライズを考えるなんてどうかしてるかもな、と思いつつも、逆にそんな自分でもされて嬉しいことは何かな、と考えたとき、それはつまり普段から他人にされたら嬉しいと思っていることなんじゃないかな、という思いに至った。

そして、それを今回の「プログラマー仲間」という関係性のなかで考えたとき、嬉しいことってのは、

  • OSS として公開したプログラムに誰かが contribute してアップグレードしてくれる
  • OSS として公開したプログラムにスターをつけてくれる

とかじゃないかな、と。

ちょうどその時期に、highwide さんが 「TokyuRuby 会議 10」の LT で登壇して話した内容がかなり面白かった。

韻を踏むプログラムは書けるか」という内容で、何か言葉を入力すると、Mecab で形態素解析して、Elasticsearch を使って大量のはてなキーワードの中から「韻を踏める単語」を見つけてくれる、という Rails アプリの紹介だった。

さっきの、サプライズで嬉しいものは何だろう?という気持ちもあったので、「あ、これを拡張して、お祝いメッセージを登録すれば韻を踏めるフレーズを探してくれるのは面白そうだな」と感じて提案すると、「いいね」という反応で、これで進めよーってことになった。

ただ、友人が OSS として公開したものとはいえ、さすがに完全に勝手にいじるのはどうじゃろか、という意見もあったので、

2016-10-24-an-web-app-for-high-and-wide-2.png

と、我ながらしれっとライセンスだけ確認させてもらった。

このとき、先の LT スライドの中でも触れられている「rhymer」という gem の作者の suzuki86 さんにもメッセージをもらいたい、というアイデアがすでに浮かんでいた。どうやればこのアプリを面白いものにできるかはまだ全然未知ではあったものの、こういう「思いがけない人からのメッセージ」という意外性のあるサプライズのアイデアがパッと出てくるということは、これはきっと今からは予想もつかない面白いものができるに違いない、ということはわりと確信としてあった。

Rhymechan

というわけでやることが決まった。

もともと、「rhyby」という名前で公開されていたのだが、まずはそれをオリジナルな名前にしよう、ってことで決まったのが「Rhymechan」というもの。

最初にあった機能はほんとにシンプルに入力した文から単語を検索するというもので、データを永続化する機構もなかったので、

  • とりあえず Rails 5.0 にアップデート
  • テストを書いてちょいとリファクタリング
  • メッセージのデータベースへの登録
  • メッセージのフレーズごとに韻を踏める単語を表示してくれる

ところあたりまでを一気に完成させた。

その後、それっぽいグラフィティなフォントとかを使ってデザインをあてたら、何となく見栄えがするものになってきた。

でも、ずっと、「ほんとにこれ面白いのかな…。これだけじゃつまんなくねーかな…」という思いがあって、例えば、

  • 登録されたメッセージを解析してそれから一遍のリリックを作ってくれる

などの案を考えたが、ぶっちゃけそれを仕上げるのは難しくて諦めてしまった。

Swaggers on The Meetups

そんなこんなでちょっと悩んでいたのと、拡張の方向が定まらずコードに contribute しにくい状況が続いていたので、ちょうど1ヶ月前くらいになった時点で、よちよち.rb 主催者の yucao24hours さんにお願いして、「これまで開発に参加していなかったメンバーにも参加してもらう rhymechan ハッカソン的なミートアップ」を開催してもらった。

ここで全然自分では思いつかなかった方向性が生まれることになる。

自分としては、ライム候補の取得の非同期化だとかいくつか改善したいことがあったので、その辺りをミートアップでは進めていければいいかな、と漠然と考えていたんだけど、画面をプロジェクターに写して眺めていたとき、「メッセージを送った人のアバターが表示されるといいのでは」という意見が出た。

それは確かにその通りだね、ということで、Extreme Fish Bowl 形式で画像のアップロードや表示する機能の実装を進めていくことになった。

その一方で、「載せる画像には何を使おうか?」という話が出るのも自然な流れで、そしてそのとき参加者の伊勢海老先生がおもむろに取り出したるは黒いキャップとグラサンのラッパー変身セットであった。もともとそれは「トップ画像が適当に拾ったもので微妙なので自分たちで写真撮って差し替えればいいんじゃ?」って話題が出たことがあったのを覚えていて小道具を持ってきてくれていたのだ。僕は忘れていました…

かくしてペアプロは突然ラッパー写真撮影会へと変貌を遂げた。最初はただそれらのグッズを身につけて写真を撮るだけだったのだが、bonbon さんがポーズを取って秋葉原に VERBAL が降臨した瞬間を皮切りに、伊勢海老先生をスタイリスト兼撮影監督として、ラッパーのポージングを研究しながら bling bling でマジに swag な写真を撮る方にシフトしていくことになった。

僕は、2pac のポーズをコソコソ画像検索しているところを見られるなど恥ずかしい思いをしながらも、最終的にギャングスタラップ全盛の世代らしい写真を撮っていただいた。

2016-10-24-an-web-app-for-high-and-wide-3.png

で、この企画がめちゃめちゃ面白く、「是非他のみんなの写真も撮りたい!」ということになって、後日また勉強会とは名ばかりの撮影会を行うことになるのだが、ミートアップを開催していなかったらこのアイデアが生まれることもなかったのは間違いないので、いやーほんとやってよかったな、会って話してるとやっぱりマジックが起きるな、素敵だね、ありがとう、なんてことを考えつつ、撮影の間中ひたすらみんなで爆笑していたように思う。ぜひ成果物を見ていただきたい。

highwide さんごめんね、もしかしたら一番楽しませてもらったのは僕たちの方だったかも。

感謝しよう、今ここでの出会い

こうして無事に Rhymechan は完成し、ta1kt0me さんが送ってくれた QR コードの電報も無事に披露宴会場に届けられた。

2016-10-24-an-web-app-for-high-and-wide-4.png

ちょっと苦労したのはデプロイする先で、index のサイズがかなり大きかったので Heroku を利用することができず、EC2 でも t2.micro 程度では快適に動作しなかったので、結局暫定的に僕の自宅の Ubuntu Server で動かしていたのをそのまま本番利用することにした。幸い、早い段階で docker-compose up だけで起動するようにしていたので、Linux さえ動けばデプロイ自体は別にどこでも簡単にできたと思う。

適当な運用の自宅サーバーなのでちょっとだけ不安はあったものの、こうして Rhymechan はいよいよ highwide さんの目に触れることになった。

2016-10-24-an-web-app-for-high-and-wide-5.png

間違いなく、最高の誉め言葉ですね。ありがとう!そして本当におめでとう!

※前述の TokyuRuby 会議 10 で highwide さんがラップしてくれたのを shokola さんが撮影してくれていたので、その様子をフィーチャーして Rhymechan の PV も作りました。一応2次会でも上映させてもらえてよかった。当日急なお願いでしたがありがとうございました。