1年目研修で出会った2人がTwilioハッカソンに参加して優勝した話とそこから得た学び

この記事はSDPFクラウド/サーバー 仮想サーバーチームの宮岸(@daiking1756)とCOTOHA Call Center開発チームの立木の共同執筆です。 二人共エンジニアではあるのですが、普段は全く違うチームで開発をしています。

この記事では、普通に働いていたら交わることのない私たちが、一緒にハッカソンに参加したことで得た学びと知見を共有します。

はじめに

私たちが今回参加したのはTwilioハッカソン2022です。 その名の通り、Twilioを使った作品を作るハッカソンです。 今回のテーマは - Twilioを使って、ちょっと仕事を楽にしよう -でした。 当日はエンジニアを中心に30名ほどが参加しておりました。

宮岸は学生時代からハッカソンが好きで、 このTwilioハッカソンも以前から参加してみたかったものの1つでした。 今回2人でTwilioハッカソンに参加したきっかけは後述します。

まずは「ハッカソン」や「Twilio」について、用語の説明と2人の経験を載せておきます。

ハッカソンについて

そもそもハッカソンって何?という方向けに、説明を載せておきます。

ハッカソンは、ハック(hack)とマラソン(marathon)を組み合わせた造語とされ、 プログラマーや設計者などのソフトウェア開発の関係者が、 短期間に集中的に開発作業を行うイベントを指します。 https://www.nic.ad.jp/ja/basics/terms/hackathon.html

エンジニア界隈ではある程度知名度があると思いますが、語源は意外と知られていないかもしれないですね。

そして宮岸と立木のハッカソン歴は下記のとおりです。

  • 宮岸: 学生時代からハッカソンに参加するのが好きだった
  • 立木: 学生時代に1度だけハッカソンに参加して以来(人生では2回目)

Twilioについて

Twilioは電話やSMS・ビデオ・チャット・SNSなど世の中にある様々なコミュニケーションチャネルをWeb・モバイルアプリケーションとつなぐ「クラウドコミュニケーションAPI」です。 https://cloudapi.kddi-web.com/availability

一言でいうと、APIから電話を掛けたりSMSを送ったりできるサービスです。 また、それ以外にもビデオチャットやグループ通話など、コミュニケーションに関する様々な機能が提供されています。

気になる宮岸と立木のTwilio歴は下記のとおりです。

  • 宮岸: できることは何となく理解していたけど、使ったことは無かった
  • 立木: 業務で数ヶ月使っているけど、本格的に学んだことはなかった

Twilioハッカソンに参加したきっかけ

1年目研修の中で グループリフレクション(ぐるり)という、3、4人組での振り返り会があります。 ぐるりに立木は参加者として、宮岸は3年目社員ファシリテーター役として参加していました。 立木が「業務でTwilioを触っている」と話していたため、 宮岸が「Twilioハッカソンってのがあるけど、よかったら一緒に出てみない?」と声を掛け、 今回2人でTwilioハッカソンに参加するきっかけとなりました。

また、各々の参加のモチベーションとしては下記のとおりです。

  • 宮岸:
    • ハッカソンに参加するのは好きで、前からTwilioハッカソンにも出てみたかった
    • 宮岸自身がハッカソンに参加して良いカルチャーショックをたくさん受けたので、立木さんにも体験してみて欲しかった
  • 立木:
    • 業務でTwilio使っていて、知識を深めたい状態だった
    • ハッカソンに出て外部のエンジニアと交流してみたかった

ハッカソン当日の流れ

当日の細かい流れは割愛しますがざっくりと書いておくと下記の通りです。

  • サポート技術インプット(Twilio / kintone / obniz / LINE)
  • アイデア発散とチームアップ
  • ハッカソンタイム
  • 成果発表

サポート技術インプットの時間で各サービスが実現可能なことの説明を聞いた後は、さっそく開発する作品のアイデアを練る「アイデア発散」の時間です。 1つのスプレッドシートを参加者全員で一斉にワイワイ編集するスタイルです。 30人でワイワイやるのはお祭り感があって楽しかったです。 具体的な流れは下記の通りです。

  • ステップ1: 最近感じた課題を一言で書く(10分間で150個埋まった)
    • 例: 「チャットに気づかない時がある」
  • ステップ2: 他の人が書いた課題に対して一言でコメントする(共感/発散/解決策)
    • 例: 「一定時間経過したら電話で通知」(10分間でステップ1の150個の課題に対してコメントが付いた)
  • ステップ3: ステップ1とステップ2を見て何か思いつくアイデアを各自が記入する(10分間で約200個のアイデアが生まれた)
    • 例: 「リアクションが一定時間無いユーザにチャットの内容を自動音声で連絡するサービス」

結果、30分で約200個のアイデアが生まれました。 その中から宮岸のアイデアが上位に選出され、そのアイデアに共感してくれたメンバーも立木と他に2名集まりました。 こうして計4名の「チームtwelve」が誕生しました。

※ ぐるりのチーム番号が12だったことと、Twilioとスペルが似ていることがチーム名の由来です。

裏話ですが、今回は2人で申し込みしたため、「事前にこういうもの開発しようねー」というアイデアを持って参加しました。 しかし、アイデア発散をしている間に楽しくなってしまい、結局事前に練っていたアイデアとは全然違う作品を開発しました。

続いて、実際に開発に取り組む「ハッカソンタイム」です。私たちのチームではまず、メンバーで作業分担を決めました。 今回は、メンバーの経験や希望を踏まえて、

  • リーダー: 1人(宮岸)
  • 開発: 2人(立木)
  • 発表資料作成: 1人

という形にしました。 開発と同時に発表資料作成をすることで、4人の認識を合わせながら開発を進めることができる、はずでした。。。 詳細は後述します。

開発の流れについては、最初に各機能を実装するパーツ(関数)を作り、その後一気につなぎ合わせる方法を取りました。 機能の結合を始めるタイミングが遅れたため、全てのパーツ(関数)をつなぎ合わせることはできませんでしたが、最低限の機能+αが動く作品を作ることはできました。 こちらも詳しくは後述します。

作った作品について(やさしい呼び出しくん)の概要

私たちは「やさしい呼び出しくん」という作品を開発しました。 作品の概要は下記の通りです。

障害対応などの急ぎの要件で複数人をメンションした際に、反応が無い人には自動で電話を掛けてくれるアプリケーション。 これで人の呼び出しではなく、急ぎの用件に集中できます。

今回のハッカソンで開発された作品はProtopediaというサービスに登録することになっています。 詳細はそちらに情報をまとめておりますので、リンク情報を載せておきます。 protopedia.net

作品の構成と処理の流れ

制限時間の関係で最後までは完成しませんでしたが、今回開発した作品のシステム構成図は以下の通りです。

AWSのLambda上でServerless Frameworkを使い、Expressを動かしています。 今回参加したハッカソンではスポンサーにTwilio・kintoneが参加しているため、電話の発信とSMSの送信にはTwilioを、データベースはkintoneを使用しました。 また、Slackからのメンションとリアクションの情報を取得するためにSlack APIを、遅延処理を行うためにAWSのSQSを使用しています。

システムの処理の流れは以下のようになっています。

  1. Slackで特定のワードが先頭に付いたメンションを含むメッセージを投稿する(例:「!やさしい呼び出しくん @A-san @B-san 〇〇のシステムがダウンしているようです。急ぎで対応お願いします。」)
  2. SlackのEvents APIを使用し、特定のチャンネルのメッセージ投稿を検知し、Lambdaにリクエストを投げる
  3. メンション付きの投稿である場合は、メンション元・メンション先の情報や日時などの投稿の情報をkintoneに保存する
  4. 投稿にリアクションがあった場合はSlackのEvents APIを使用し、Lambdaにリクエストを投げ、kintoneのステータス情報を更新する
  5. SQSでn分後、リアクションをしていない方全員に対してTwilioから発信する処理を実行
  6. 電話に応答できなかった方には、TwilioからSMSを送信する

今回はSQSを使った遅延処理まではできず、投稿後すぐにTwilioから発信する仕様になりました。 最終的には期限までに完成させることができ、ローカル環境ではありますが発表会でデモを行うことができました。

審査の結果・・・

審査の結果、やさしい呼び出しくんが最優秀賞を頂くことができました! リアルタイムデモが成功したこと、テーマに沿った作品だったことと、Twilioの様々な機能を活用していたことが「Twilioハッカソン」としては評価されたようです。 またチームとしては、諦める機能と諦めない機能を合意して、途中から発表を意識した開発できたことが良かったと思います。

参加して気づいたこと、思ったこと、学び

時間の制約のある中での開発の難しさ

今回ハッカソンに参加してみて、時間の制約のある中での開発は難しいと感じました。

具体的には、メンバー間で実装箇所の認識に齟齬があり、2人が同じ部分を実装してしまうということが起こりました。 この問題を解決するために、リーダーと開発メンバー2人で話し合い、同じ機能を2人で分担して実装していたところを、それぞれが別の機能を実装するように変更しました。

ハッカソンという時間の短い中で早く作業を進めようとするあまり、このような役割分担やお互いのコミュニケーションが疎かになりがちだと感じました。 役割分担の明確化やお互いの進捗の共有などの意思疎通の重要性を改めて感じました。

また、開発手法についても、パーツ(関数)を後で一気に繋ぎ合わせるのではなく、できた機能から結合させていく方が良かったのではないかと思いました。 そうすれば、機能自体は完成したにも関わらず、作品には組み込めないということが起こらないためです。 実際に、今回パーツが完成していたのにも関わらず、作品に組み込めなかった機能があり、もったいなかったです。

作品のゴールを共有することの大切さ

今回は作品の目指すべき方向性の議論は重要視せずに、開発に着手しました。 ハッカソンの限られた開発時間では、早く手を動かしてどんどん開発を進めたくなってしまうものです。 1人で開発しているのであればそれでもいいのですが、今回はほぼ初対面の4名という即席チームだったので、結果的にこれが裏目に出ました。 必要のない機能を開発しそうになったり、想定していないユースケースに対応しようとしてしまっていたのです。

まだアイデアも生煮えの状態で開発に着手して、作りながら作品の価値を模索していくような状況では、MVP(Minimum Viable Product、顧客のニーズを満たす最小限のプロダクトのこと)を最速で作ることを意識するべきでした。

今になって振り返ると「最初にラフな資料を作って認識を合わせ、MVPができるまではなるべくモブプロ・ペアプロを多めでやっていく方が良かったなー」と思います。

※ 頭の中で移動手段のMVPのメタファーが何度もよぎりました。

この経験は今後ハッカソンに参加するときは勿論、業務での開発やその他のチーム開発など、あらゆるところで活きるものとなりそうです。 知識として理解はしていましたが、百聞は一見にしかず、百見は一体験にしかずという具合に、ハッカソンというある意味本番ではない場で一度体験できたのは非常に有り難いです。

メンバー間でコミュニケーションを取りながら本当に価値があることに時間を使うことが重要と強く感じました。

個別の感想

宮岸の感想

自分がアイデアの発起人ということもあり、ハッカソン中は開発者というよりもユーザ目線で作品のことを考えることを意識していました。 今まで参加したハッカソンで、もしかすると自分が書いたコードは少ないかもしれませんが、

  • 「どういう課題を解決する作品にしたいか」
  • 「ユーザ目線だとどういう機能があると便利か」
  • 「実装コストを考えると何を諦めるべきか」

といったことを2日間で考えることができ、非常に貴重な体験となりました。 たまたま研修で出会った立木さんと一緒にハッカソンに参加して、チームメンバーで足りないところを補いながら高め合い、最優秀賞を受賞できたことは素直に嬉しかったです。 ハッカソンやプロトタイピングが好きな仲間が社内外にもっと増えれば、盛り上がって嬉しいですし、この記事を読んで興味を持つ方がいれば幸いです。

立木の感想

私は社会人として参加するハッカソンでは初めて(人生では2回目)の参加となりましたが、非常に学びのあるハッカソンだったと感じています。 今回他社のハッカソン常連者の方と同じチームで参加し、実装面や使用する技術という点でも新たな学びを得ることができました。 他社のエンジニアの方と交流する機会はあまりなかったため、刺激になりモチベーションを高めることができました。

また、ハッカソンという場を通じて、Twilioやkintone、Slackなど様々なサービスのAPIに触れることができ、勉強になりました。 期間中はドキュメントを見ながら試行錯誤して実装し、結果としてサービスに詳しくなり技術力を高めることができたと感じています。 加えて、限られた時間内にチームで議論し、協力しながら1つのものを完成させるハッカソンは楽しいと改めて思いました。 また機会があればハッカソンに参加したいと考えています。

おわりに

今回はTwilioハッカソン2022に参加して得た学び・知見について紹介しました。 初めて会う方もいる中でのチームマネジメントの難しさ、時間の制約のある中での開発など困難もありましたが、ハッカソンで作品を完成させるまでに数多くのことを学べました。 結果的に、最優秀賞も受賞でき、良い経験になりました。 今後もこの経験を活かし、さらにエンジニアとしてパワーアップしていきたいと考えています!

最後にお知らせですが、NTT Comは一緒に働く仲間を募集中です。詳しくは下にある採用情報を確認していただけると嬉しいです!

© NTT Communications Corporation All Rights Reserved.