自己紹介
はじめまして、2024/04から令和トラベルにて旅行アプリ「NEWT (ニュート)」の開発をしているRickです。
2021年にiOSエンジニアとしてサイバーエージェントに入社し、内定者時代の10ヶ月間を合わせると約4年弱をABEMAで過ごしました。大規模組織で優秀なメンバーに囲まれながら、”2022年のサッカーW杯”・”新プラン「ABEMA de DAZN」の提供”といったさまざまなビックイベントを中心に、多くの価値を社会に届けることができて幸せに思っています!改めて、前職で関わっていただいた皆様に感謝申し上げます。
転職において考えていたこと
1. スタートアップで挑戦すると決心
自分がやるべき社会貢献の軸
社会に貢献をするやり方は無数に存在する中で、以下のように考えるようになりました。
- 自分だからこそ届けられる価値・貢献の仕方ってどんなものだろうか
- 社会が抱えるどういう課題を解決して、どういった価値を届けられるといま以上にワクワクするだろうか
また、会社のミッションを自分事化し、高いモチベーションを持って働くために、次の条件で転職先を探していました。
Must
- 会社のミッションと自分のWILLがなるべく重なる
- カスタマー・社会の課題から逆算して、最適なプロダクトを提供することに妥協していない組織であること
Better
- 私自身が、そのサービスのカスタマーである
技術的な推進を幅広くリードできる環境
前職では様々なことに挑戦させてもらいました。
- 広告・課金・動画といったさまざまなドメイン
- iOSだけではなくAndroid・tvOSプラットフォームの開発
- Kotlin Multiplatform Mobileを使ったアプリの開発
多くのことを経験してきた一方、数年培ってきた知識や考えが凝り固まってないか、他の組織でも汎用的に通用するものなのかと考えるようになりました。また、それらをさらに発展・応用させることで別のサービスにも貢献したいと思い始めました。
そのため、より柔軟かつ広範囲に渡って、自分が主体となって技術的な検証や実行を行える / 行わないといけない環境を求めていました。内発的な成長はもちろん重要ですが、こうした環境起因で得られる成長や達成感は計り知れません。実際、入社後にどんなことをやったのかは後述します。
また、普段はiOSアプリの開発をしていますが、誰かの暮らしや社会をよりよくする為のプロセスにおいて、いま現在自分が一番得意なものを選んでいるに過ぎません。(そのために技術を正しく使うことは必要だと考えています。)
この先「この課題を解決したい!」と思い立った際に、それに対してより広く貢献する為のスキル幅と確かな自信を獲得したいと思い、幅広くチャレンジできそうなスタートアップ規模の会社に興味を持ち始めました。
2. 「旅」は人生を豊かにし、多くのきっかけを与えてくれると実感
私が人生で初めて海外旅行に行ったのは、メルボルン、2022年の9月でした。それも初の一人旅。何もかもが新鮮で、未知の体験でした。そんな中、とある繋がりから訪れたホストファミリーの玄関をくぐり抜け「靴は脱がなくて良いんだな〜」なんて思っていた矢先に言われた一言に衝撃を受けました。
“日本では遠慮することが礼儀正しいとされるかもしれないけど、ここでは違う。遠慮せず、正直に伝えることが礼儀だからそうしてね!”
初対面の方々の家に泊まるから色々気を遣わないとな、と思っていた中で言われた言葉でした。大袈裟ではなく、一瞬時が止まり人生をリスタートしたかのような感覚を得ました。
また、2024年の年始には、アムステルダムでライフステージを前進させました 🎉
非日常な空間・時の流れはそれだけで他には変えられない特別な価値があります。「旅」が生み出す時間・出来事・出会いに対して何を思うかで、価値観がアップデートされ、人生はより豊かなものへと変化していくんだなと実感しました。
そして、実際にそういった感覚を経験している・良く海外旅行に行く私だからこそ届けられる価値があると考えました。
(2023/01~2024/03に訪れた国 / 都市 : 🇸🇬シンガポール・🇰🇷ソウル・🇹🇼台北・🇺🇸サンフランシスコ・🇺🇸シアトル・🇨🇦バンクーバー・🇺🇸ラスベガス・🇬🇧ロンドン・🇮🇪ダブリン・🇳🇱アムステルダム・🇦🇺メルボルン・🇦🇺パース)
3. グローバルな環境で生活する・働くことへの憧れ
大学卒業直後から思い描いていた、「いつか海外に住んでみたい」というぼんやりとした憧れを捨てきれずにいました。私は、新たなモノ・人に出会いによって、今まで自分が培ってきた価値観を再構築していく瞬間・プロセスに高揚感を感じます。また、この感覚を最も得やすいのが、海外で新しい文化に触れることだと思っています。
国境や言語を超えて人が繋がった先には、壮大な可能性があります。それは、その当事者間での思い出として残るだけでなく、社会に広く展開される何かになることもあります。グローバルにサービスを展開している企業は、これと近い想い/Missionを持つ会社が多いと私は考えています。
そのため、LinkedInを利用して、いくつかのグローバル企業への転職も模索していました。
4. より多くの人に「旅行による人生の転機・思い出」を提供するなら令和トラベル/NEWTだと決心
人生における価値観を変える”きっかけ”を多くの人に提供する立場になりたい。そこで生まれた「人 x モノ」・「人 x 人」の出会いがより社会をも豊かにすると考えるようになりました。
そんな中思い出したのがNEWT。実は、2023年にシンガポールに旅行した際にお世話になっていました。
興味が増す中で、代表の起業時のブログを読み、当時の起業理由が自分の想いと重なました。
その時点でNEWTはグローバルへの展開はしていませんが、近い将来世界で広く愛されるサービスになるだろうと信じることができました。そして、自分もその一員としてその挑戦に関われるとしたらこの上ないなと考え、Joinを決めました。
入社してみてどうか
カルチャーマッチ
面接に進む前から、秘密保持契約を結んでSlackに入れてもらい、いくつかの会議に出席させてもらって、実際に社内の雰囲気・コミュニケーションスタイルを見ることができていたので全く違和感がありませんでした。
他にも、弊社ではPP (※ 令和トラベルでは、業務委託・副業のメンバーをプロパートナー(PP)と呼んでいます)からスタートして、現在フルタイムとして働いているメンバーも多く、こういった流れはミスマッチを防ぐ上で双方にとって有効なものだと思います。
急拡大する組織において、「なぜやるのか」に対してこだわり抜く姿勢
以下のようにWhy・How・Whatを定義した場合、NEWTでは「Why」を最も重要視しています。
- Why : イシューは何か? なぜ解決すべきなのか? Missionとの繋がりは?
- How : イシューを解決するための要件はどうなるか? 最小単位で解決しようとするとどういうUXになり得るか?
- What : 具体的な仕様はどうなるか? 実装を含む、リリースまでのタスクは何が必要か?
PMを含むプロダクト組織における人数増加に伴い、メンバー間でやり方・進め方が違う場面に遭遇することはどの組織でも少なくないでしょう。NEWTでも例外ではありません。
そこで、機能の充実度が、他社の旅行サービスと比べても最低限揃ってきたタイミングである今だからこそ、カスタマーが抱える潜在的イシューに徹底的に向き合う必要があると考えています。
実際、リリースを急いで本質的なイシューを見誤りそうになった場合に、「改めて今回の施策で解決したいイシューってなんだっけ?そのイシューの大きさってどれくらいだっけ?」のような会話をよく目にします。その結果、「生成AIを利用する必要があるね」となることもありますし、はたまた「こんなに小さい工数で実現できるんじゃない?」となることもあります。
とはいえ、多様な考え方が集うことはとても強みです。Diversity, Inclusion and Belonging Promise を制定しているので、興味があればそちらもご一読ください。入社前に話を聞く中で、”こうした多様性を受け入れた上での試行錯誤の結果、グローバルで多くの旅行渡航者に愛されるサービスになれるのではないか”と信じることができたのも、入社を決意した理由の一つです。
オープンなコミュニケーション
パブリックチャンネル・プライベートチャンネル・DMの使用率が週毎に算出され、パブリックな場でのコミュニケーションが促されています。組織の規模やメンバー構成に応じて良し悪しはあるので、必ずしもパブリックにコミュニケーションをすることが良いわけではありません。
しかし、弊社では「OWNERSHIP」というValueを掲げており、数多くのイシューに対して全員が「問題解決の当事者」として取り組むことが求められています。
そうして生み出される成果が、カスタマーが感じる価値を最大化させると考えているためです。このValueを体現するために、オープンなコミュニケーションは実際とてもポジティブに働いていると感じています。
“品質”が”スピード”をつくる
「“品質”が”スピード”をつくる」という考え方に、強く感銘を受けました。
過去の開発だと、「品質も大事、とはいえスピードも大切なので両方享受できるように工夫する」というように別軸で考えることがほとんどでした。あくまで別で考えているので、一方を得るために片方が犠牲になってしまうこともありました。
NEWTでは、カスタマーにとっての価値の一つである「よりスマートな旅行体験をするために必要な機能の、拡充スピード」を享受するために、「品質がスピードを作り出す」という考え方がベースとなっています。実際、その考えがベースにある故、スピード感があると感じています。
これは、品質を向上し続けるための仕組みが常に検討・運用されている結果です。詳しくは以下の記事をご覧ください。
直近の自身の取り組みとして、GraphQL用ライブラリのapollo-iosによって自動生成されたFragment・OperationをUnitTestで使いやすい形で再構築し、品質保証のための準備を行いました。絶賛、不具合が起きやすい・起きていた箇所のテストを書いているところです。
旅行は多い人だと年に数回行く方もいますが、実際のところ数年に一回、という方がほとんどです。そんな貴重な体験を最大限素敵なものにしてもらうために、最高の品質をカスタマーに届ける必要があり、それを保証する必要があります。その結果得られたカスタマーからの嬉しいお言葉からは、この上ない幸せ・やりがいを感じられます。
入社して何してる?
入社後の2ヶ月間でやったことを書いてみます。機能開発を継続的に行いながら、いくつかの技術的な内容も実施しました。NEWT iOSチームの取り組みが垣間見えれば幸いです。
機能開発
既存機能のブラッシュアップ・新機能の開発を行いました。NEWTはBFFの構成を取っているため、アプリエンジニアとしてはとてもスピーディーに開発ができています。その分バックエンド側に負荷がかかっていることは確かですが、全体最適はできていると思います。
また、施策自体はプロダクトチームだけでなく、ツアー造成チーム・カスタマーサポートチームからの課題や提案から生まれることもあり、まさにワンチームな会社だと感じています。
ホテルトップ画面に、「注目のエリア」セクションを追加
元々、ホテルトップ画面には、「人気のエリア」セクションしか存在していませんでした。もちろんこのセクションでは一部のエリアしか載せておらず、これでは「これだけのエリアしか対応してないの?」という誤解を与えてしまう可能性がありました。
そこで「注目のエリア」として、より幅広くエリアを掲載することで、 ”海外旅行に行きたいが、目的地がまだ完全には決まってないカスタマー” が、行きたいと思える目的地を見つけやすくなる状態をつくりました。
また、フリーワード検索において、どんなエリア名で検索したら良いのかを想起しやすくなり、そこからの能動的な目的地探索も活性化すると考えました。
目的地を、エリアごとに階層化
ツアーの目的地検索では、既に対応されていた内容ですが、ホテル側での対応を行いました。
元々は、都市のChipがエリア毎に分割されておらず、同じ階層にありました。対応エリアが急激に増加する中で、その状態だと視認性は下がる一方です。その状況を改善すべく、エリア毎に区切って表示することで目的地を見つけやすくしています。
クリエイティブのリニューアル
先日、『NEWT』ローンチ2周年という節目で、クリエイティブのリニューアルを行ました。弊社デザイナーが何度もプロトタイピングを重ねて試行錯誤した結果、「POP&WIND」という新しいクリエィティブテーマが誕生しました 🎉 私もこれに伴う一部実装を担当しました。
NEWTでは、クリエイティブの最新トレンドを強く意識しており、今回のリニューアルにおいてもその要素が随所に現れています。
とても素敵なデザインになっているので、沢山アプリを触って愛していただけると嬉しいです。
詳しくはこちらの記事をご覧ください。
ポイント詳細画面
NEWTでは、既存で存在していた通常ポイントに加えて、期間限定ポイントの提供を開始しました。
通常ポイントは、旅行毎に有効期限が伸びるのに対して、期間限定ポイントはそのポイント毎に期限が固定されます。この2者は、他のサービスでもよく見られますが、期限に対する仕様は多種多様です。
それぞれに対して、別画面を提供する案もありましたが、海外旅行というドメイン上、予約の頻度が高くないことが想定できます。そのため、まずは最小の工数・複雑性で要件を満たすための仕様で実現しています。
技術的な取り組み
パスポート読み込みOCRに利用しているFrameworkの置き換え
元々MRZScannerを利用していたのですが、年間約20万円と決して安くないコストがかかっていたので、Apple標準のVision Frameworkに置き換えました。
詳しくはこちらのスライドをご覧ください。
apollo-iosで自動生成されたFragment・Operationのコードを、Test・XcodePreviewsで扱いやすくしたコードを再生成
GraphQLの特性上、不要に思える再生成ですが、目まぐるしいサービスの進化において、高いメンテナンス性とリスク管理を両取りするために行いました。詳しい説明は別の機会に詳しくお話できればと思います。
今回のiOSDCでは採択とはなりませんでしたが、別の機会でお話しできればと思います。
Swift6対応
SE-0362で導入された-enable-upcoming-featureフラグを利用することで、Swift6の正式リリースを待たずに、いくつかの機能を有効にすることができます。主にConcurrency周りの対応を先行して完了させました。
ExistentialAny対応
Swift6.0ではデフォルトでの有効化は見送られましたが、遠くない将来で必要になる対応です。スーパーアプリを目指して今後も多くの機能追加が予測されるため、早めに対応するに越したことはありません。
TCA migration
直近、1.7へのmigrationを試みました。ObservableStateマクロ対応は安定性の問題でPendingとなりましたが、そこで得たパフォーマンス問題に関する知見を、別の機会で共有できればと思います。
Swift Macros導入
ボイラープレートを減らすのにとても有効な手段です。まずは簡単なマクロから導入しました。Swift6で更なる安定化が見込まれる予定なので、今後拡充予定です。
最後に宣伝
いかがでしたか?私のように、旅好きなメンバーが多い会社ではありますが、もちろんそうでない方も大歓迎です!スタートアップの事業グロースにコミットしたい、社会やカスタマーに価値提供できるプロダクトに携わりたい、など令和トラベルにジョインする理由はさまざまです。旅行が好きかどうかに関わらず、弊社のミッションやビジョン、テクノロジーで実現しようとしている世界観に少しでも興味を持っていただけたら、ぜひ一度お話させてください!
絶賛、会社としてのフェーズ・人数ともに急激に変化しています。そんな中、多様なバックグラウンドを持つメンバーが集まってプロダクトを進化させようとしているため、正直カオスに見える瞬間が垣間見える場面も少なくありません。しかし、そういう状況下で終わりなきミッションの達成を追い続ける過程では、何にも変えられない経験や成長が得られると思います。
皆さんも、NEWTを操縦する一員として、共に世界を旅しませんか? 🌍
この記事を読んで令和トラベル・NEWTに少しでも興味をお持ちいただけましたら、ご連絡お待ちしています!
さらに、定期的に令和トラベルの技術や組織に関する情報発信を開催予定です。connpass にてメンバー登録して最新情報をお見逃しなく!
それでは次回のブログもお楽しみに!Have a nice trip!!