これはTimee Product Advent Calendar 2024の23日目の記事です。
こんにちは。タイミーでiOSアプリを作っている岐部(@beryu) です。
もうすぐクリスマスですね!月初から我が家のリビングに置いてあるクリスマスツリーもだいぶ見慣れてきました。
さて、今年も例年通りApple社による開発者カンファレンス「WWDC24」が夏に開催されましたね。
弊社の体制としては”iOSチーム”という単位のチームが存在せず、プロダクトを機能領域ごとに分割した職種横断チームで機能開発をしています。そのため、普通に業務をする上ではWWDCで得た知識についてiOSエンジニアが積極的に試したりする場はそれほど多くなく、得た知識を非エンジニアの社員に展開するかどうかも含めて個々人に任せられていました。
今年、初めてそれを社内ハッカソンという形で社内にアウトプットする機会を作ったので、それについてまとめたいと思います。
企画したきっかけ
WWDC開催期間中、弊社のiOSエンジニアは普段通り業務にあたりつつ、スキマ時間でセッションをキャッチアップする日々を送っていました。
そんな中、ふと思いつきでSlackに以下のつぶやきをしたのがことの始まりでした。
この時点で参加者数の見通しは私を含んで4名。小規模なハッカソンを開催するには十分な人数だと判断し、準備に取り掛かりました。
準備
前述した通り、弊社にはiOSチームという組織は無く、プロダクトを機能領域ごとに分割したチームで働いています。
したがって、一介のエンジニアがハッカソン用にリソースを自由に割けるような体制ではなく、ハッカソンに参加する社員が所属するチーム全てから許可を得る必要がありました。
今回のハッカソンは遊びではなく、魅力的なプロダクトを開発するために有効な仕事です。
しかし、万が一文脈を知らない方がこの活動を見て「遊んでいるのでは?」と思われたとしたら、それは誰の得にもならない悲しい誤解なので、そのような事態は必ず防がなければなりません。
この準備フェーズでは、そんな事態を防ぐために出来ることを考えながら動くことにしました。
非エンジニア向けの資料作成
まず、ハッカソンにかけたコストに見合うリターンが得られる論理を明文化しました。
誰かに資料作成を命じられたわけではありませんが、業務に割く時間を削って行う活動ではあるので「納得してもらえる材料があるに越したことはないだろう」という考えで用意しました。
ドキュメントには社外秘の情報を含んでいるので詳細はお見せできないのですが、主に以下のような内容を含めました。
- 目的
- タイミーが今WWDCハッカソンをやる意義
- 期待されるアウトプット
- ハッカソンのレギュレーション(ここ3〜4年のWWDCで発表された技術であれば何でも使って良い)
- ハッカソンで消費するリソース量
iOS Chapterでの相談
弊社にはiOSチームが無い代わりに、各チームのiOSエンジニアが横軸で繋がるコミュニティのような存在として”iOS Chapter”という仮想組織が定義されています。
iOS Chapterでは毎週定例会議を開催しており、その場でハッカソンの開催形式や所要期間について相談しました。
各々が別チームに所属しているのでそれぞれに事情があり、直近での同期形式での開催は現実味が薄いと判断し、以下の枠組みで合意しました。
- 1ヶ月弱の期間中で2営業日を割く
- 任意参加扱いとする
マネージャーとの交渉
エンジニアリングマネージャー陣の定例会議の場で時間を拝借して、上述の資料をひっさげて開催させてほしい旨を交渉しました。
交渉とは言っても、私がこの話題を出した時点でその場が応援ムードになり、特に咎められることもなくスムーズにOKを頂けました。
自部署の全体定例での展開
共に現場で働くエンジニア・デザイナーの皆さんにも納得してもらった上で開催したかったので、対象のメンバーがほぼ全員集まるAll Handsという定例会議でも上述の資料を用いながら告知も兼ねて紹介しました。
ここでのリアクションも”わいわい”という形容がピッタリの、良い盛り上がりを感じるものでした。
ハッカソンの開発期間
参加者は定められた期間中の2営業日を使って、ハッカソンのための調査・開発を行いました。
このタイミングでも参加者はFixさせていなかったので、参加予定だった社員が途中で業務都合で参加できなくなったり、逆にこれまで参加表明していなかった社員が参加してくれたりすることもありました。
あくまで通常業務が優先であることを鑑みてこの形にしたのですが、結果的にはこの形にして良かったなと思っています。
成果発表会
弊社は(私も含め)リモートワークのメンバーが多く所属している事情もあり、成果発表会はオンラインで行いました。
成果物
App Intentsの概要・実装方法の調査報告
発表の場では、WWDC24で発表されたApple Intelligenceとの統合を見据えながらApp Intentsの概要を説明しつつ、iOS版タイミーアプリにApp Intentsを組み込んだ例を実際のソースコードを添えて紹介していました。
タイミーのアプリ内部の構造が深く絡む内容だったのでここでは資料をお見せできないのが残念なのですが、App Intentsの実装の手軽さ、身近さを感じられる発表でした。
Live Activityによるリッチな通知機能の実現
これが私の発表です。
WWDC23で発表されたプッシュ通知経由での利用例を中心に、iOS版タイミーアプリにLive Activityを組み込んだらどんな体験になるかを紹介しました。
実際にデモで使用した動画は以下からご覧頂けます。
※ターミナル画面にはぼかし加工を加えています
パスキーによる認証の導入
現在タイミーで採用している電話番号認証とは別の認証方法として、パスキーを紹介していました。
認証はセキュリティが重要な要素になるので技術的な話題も多い発表で、正直なところ聞くだけでもやや難易度が高い内容でしたが、一方で動作デモの場面ではシンプルでわかりやすいUXに聴衆が感動している様子が印象的でした。
この日の発表の中で唯一、実際に操作できるデモアプリを配布できていたことでも大きなインパクトを残していました。
TipKitによるアプリ内ヒントの提供
WWDC23で発表された、機能のヒントを表示するためのフレームワークの紹介でした。
恥ずかしながら私はTipKitの存在を知らなかったのですが、画面の使い方を教えるようなUIを低い実装コストで実現できる、実用的なフレームワークでした。
動作デモでは、普段の開発で「この画面のUI、少しわかりにくいかもしれないね」と話に挙がっていつつ実装リソースを割くことが出来ないままになっていた箇所に、シンプルなコードでヒントを実装する様子が披露され、目立たない存在ながらその有用性を強く実感できる内容でした。
社内からの反応
成果発表会の最中にGoogle Meetのコメント機能で感想を述べて頂いたり、終了後にアンケートにご協力頂いたりして社内の反応を集めたのですが、非常に好評でした!
例えば、以下のような声が挙がっていました。
- よかったですーで終わらせたくない内容でした
- R&Dみが強い感じかと思ってたんですが、すぐにでも導入できそうな形に仕上がっていてすごい
- iOSを業務で触っていない方がハッカソンに出られるところがスキルとマインドのダブルですごい
- ※App Intentsについて発表したのは普段アナリストとして業務にあたっている社員でした
- 取り組みに再現性持たせたいですね
- 楽しかった!
- 今日発表された機能のリリースはいつですか?
リリースされた機能
嬉しいことに、このハッカソンで披露された成果物のうち実際にリリースされた機能も存在します。
今年タイミーアプリに新設されたものの一つである”バッジ”という機能があります。ワーカー(タイミーを通して働くひと)が働き先で認定されると業務ごとのバッジを獲得でき、そのバッジ情報をもとに更にさらに自分のスキルに合った募集を受けることが出来るようになる機能です。
この機能で獲得したバッジはバッジ一覧という画面で一覧できるのですが、この画面にあるバッジ画像をタップ出来る事に気付けないという声が度々挙がっていた背景があり、そこに今回のハッカソンの成果物の一つだったTipKitを導入することになりました。
この機能はすでにリリースされており、iOS17以上のiPhone上で動作するタイミーアプリでご利用頂けます。
また、他の発表された成果物に用いられていた機能についても実装に向けてPdMと相談し、優先度を付けて日々の開発に用いているバックログに追加しています。
やってみた感想
ハッカソンを実施するきっかけはSlackでの些細なつぶやきでしたが、周囲の応援もあってどんどん話が進んでいきました。賛同した社員が各々の発想と技術力をもって成果物を作成・発表し、非iOSエンジニアの興味を誘いつつ一部はスピーディにリリースまでされるという、理想的なハッカソンになったと感じています。
実施するにあたって社内のステークホルダーと丁寧に条件を握るステップも踏みましたが、その過程が終始ポジティブな空気だったことから、少なくとも弊社はこのような取り組みを快く思う人間性の方が多く所属しているのだと感じられて嬉しくもなりました。
弊社は組織の人数が日々増えているので開発力の高まりを感じる機会が多いですが、今回のように個の力を感じられる機会も非常に魅力的だったなと感じています。
こういった場を作ることを検討されている方にとって、この記事が少しでも参考になっていれば幸いです。