5.1さらうどん

@giginetの技術ブログ。ゲーム開発、iOS開発、その他いろいろ

クックパッド株式会社を退職して、LINE株式会社に入社しました

こんにちは、@giginetです。 先日、新卒以来7年3ヶ月勤続したクックパッド株式会社を退職しました。

このエントリは5年半振りの当ブログの更新になるのですが、いわゆる退職エントリというやつです🇨🇳👨‍🍳🍗

でっ誰?

クックパッドでやったこと

クックパッドでは、新卒入社後、最初1年はプレミアムサービスのグロースを行う事業を経験した後、その後丸6年は、モバイル基盤部という、全社のモバイルアプリの開発環境改善や、組織開発を行うチームで、全社横断的なiOSアプリの基盤開発をしてきました。

例えば、認証、決済、ロギング、A/Bテスト基盤といった、アプリ開発の基幹となるOSS・社内ライブラリ開発のほか、継続的デリバリー実現のためのCIやテスト、リリースフローの構築といった役割です。 その他、社内iOSエンジニアのメンタリングや、面接や書類選考など、モバイルエンジニアの採用にも携わっていました。

長いこといたので、全て書くとキリがないのですが、大きな仕事としては以下のようなものが挙げられます。

  • レシピ検索の『クックパッド』アプリの開発環境改善とビルド高速化
    • 6年間継続してメンテしていた
    • 後半はモジュール分離やビルド環境改善にフォーカスした、通称「霞が関」プロジェクトを主導(後述)
  • 記述しやすい行動ログ基盤の導入と汎化
  • クックパッドマート』や『cookpadLive』といった、新規サービスの開発支援や、社内ライブラリ、開発基盤の整備
  • 全アプリのサブミット自動化と、毎週のアプリリリースフロー自動化
  • オンプレのmacOS CIクラスタをフルPaaS(Bitrise)化
  • 登壇、執筆、面接官、メンタリングなど組織開発と採用

やりきった!もうゴールしてもいいよね

アーキテクチャとモジュール分離

霞が関」プロジェクト。社内の政治的問題も解決していくぞ、とアイロニカルな意図を込めた名称でした

特にその中でも、後半の2~3年間は、事業の柱となっているレシピアプリである、クックパッドアプリの大規模なリアーキテクチャと、ビルド時間高速化を主導しました。

2019年当初のクックパッドアプリは、旧来から続く負債や、依然まだ25%残るObjective-C、計24万行に達するコードベースから来るビルド時間が事業上の大きな問題になっていました。当時の様子は、以下の講演記事をご覧ください。

そこで様々な問題を改善するため、「霞が関プロジェクト*1を立ち上げ、ObjCの撲滅や、クリーンアーキテクチャの整備、ビルド待ち時間の削減に着手しました。

ビルド時間の改善のアプローチとして、Appleの主導するSwiftコンパイラの性能が支配的な要因であるフルビルドを効率化するのは早々に諦め、大きなアプリを複数のモジュールに分割し、Sandboxアプリと呼ばれるミニアプリのみを使って開発可能にするマルチモジュール化を推進しました。

すなわち、開発時に一部だけ簡単にビルドして起動できるようにするということです。

中層にあるFeature Moduleの1つだけしかビルドしなきゃ早くなるんじゃね?という考えで生み出されたアーキテクチャ。通称「親の顔より見た図」。

詳しいアーキテクチャの説明は、過去の講演資料や、ブログ記事に譲りますが、 今では*2、アプリ全体が30個程度のモジュールに分かれ、ほとんどの機能開発がミニアプリのみを使って開発できるようになりました 🎉

アプリ全体のビルドには、一部のデザインを調整した程度の修正で、差分ビルドに十数秒を要していましたが、ミニアプリを使った開発では、ほんの3秒程度で起動できるようになります。

Sandboxアプリの実行の様子。機能毎にアプリが分かれているため、ビルドが爆速になり、画面の頭出しも容易になった

また、モジュール化により、一部の画面だけSwiftUIを取り入れたり、Xcode Previewを使うなど、Appleが提唱する標準のワークフローに乗ることができるようになりましたし、モジュール間の依存関係が整理され、機能間を疎結合に保ち、開発することができるようになりました。

この取り組みは、iOS開発界隈にも影響を与えられたと思います。近年のカンファレンスでは、多くの組織によるアプリのアーキテクチャや、マルチモジュール化の話題が多く取り沙汰されるようになり、クックパッドの取り組みを先進的だと評価してもらえたり、メルカリさんのイベントなど、様々な場所で発信の機会をいただきました。ありがたいことです。 前掲のモジュール分離図は、界隈では「親の顔より見た図」と親しまれるようになり、自身の仕事によりプレゼンスを確立できたのが何より嬉しかった!もっと親の顔見て。

「モバイルファースト」の達成

僕が新卒で入社した2015年は、まだまだモバイルアプリの黎明期。 当時から社内では「時代はモバイルファーストだ!」と言われてはいたけれど、アプリ版の開発は注力事業ではなかったし、まだまだWebフロントの開発が主流でした。

そこから7年、業界の様子はすっかりと様変わりしました。 今やクックパッドではほとんどの新機能がモバイルアプリに優先的に投入されています。 開発のスケジュールはアプリ版のリリーススケジュールに沿って組まれ、バックエンドの開発課題も、BFF*3化やOpenAPIの導入など、モバイル開発を意識したものに変化しました。

退職時に、「そういえば昔はモバイルファーストとか言ってたなあ」と思い出したけど、いつのまにか当たり前になり、言われることはなくなったとしみじみしております。

自分だけの力と言うつもりはなく、メンバーの協力や、業界の変化といった要因も大きいけれど、ここに至るまでにわりと寄与できたのではないでしょうか。

なんでやめたの?

やりきったから!」というのは大きかったです。 仕事がなくなったかと言えば、他にもSwift ConcurrencyやSwiftUIなどの新しい開発手法の推進、既存ツールの更なる汎化や、通信のGraphQL化、その他無数に積み残した細かなissueの改善など、まだまだやらないとならない課題は無数に残っています。

とはいえ、個人的にはすでに大きい仕事をやりきった気持ちがしており、ここ1年ほどは正直結構ダレていたという感覚は否めません。

働き方の変化もありました。コロナ禍はもちろん、昨年、職場が横浜に移転したことで、チームメンバーが集まりにくくなったり、移転や経営の注力事項の変化などによる社内メンバーの入れ替わりで、空気感の変化も感じました。

長く所属した組織なので、離れがたい気持ちはあるけれど、変化の激しいこの業界、定年まであと30年居続けるということはありえないだろうし、まあここらが潮時なのかなと。

これから何をやるの?

LINE株式会社のディベロッパーエクスペリエンス(DX)開発室でLINEアプリの開発基盤の改善をしていきます。 ObjCの撲滅など、クックパッドではすでに達成できたことをもう一度やっていく必要がある部分もありますが、前職では取り組みきれなかった、ビルドパイプラインの改善や、リモートキャッシュ化など、世界有数の大きなアプリ向けのスケールの大きい問題をなんとかしていければなと思っています。

前職と比べ、開発人員もコードベースの規模も数倍に。 今までは全ての開発者の顔が見えていたけれど、今度は韓国のチームを含め、世界中で1つのアプリを開発しています。 新しい環境でもやっていけるか、それともあまりのデカさに尻尾を巻いて逃げ出すことになるのか、今から楽しみにしています。

新しい職場の感想

まだ入社して1週間ほどですが、早くも小さなことから改善に着手することができて、これからの仕事にわくわくしています。

新しい職場で何より最高なのが裁量労働制になったことです。これは本当に良い。マジで良い。僕の中では、労働の仕方が大きく変わり、パラダイムシフトとも言える変化でした。本当に帰りたいときに帰って良いのか?って心配になって未だに慣れない。

今までは、1日8時間の刑期を全うするために、どうやって乗り越えるかと、グダグダ働くことに無駄なリソースを割いていたけれど、時間を気にしなくて良くなったおかげで、とても集中して働くことができています。やる気が出ない日はさっさと上がってしまえばいいわけだし。

今までのフルフレックス制では、月にあと何時間働かないとと意識するのが何よりも辛かった。 入社前は、裁量労働でちゃんと成果を出せるのか?と懐疑的だったけど、今のところは自分のペースで働けそうで、とても良い変化となっています。

反面、細かなツールの使い勝手や、業務フローに慣れなかったり、前職の方がより洗練されていたなと感じることはもちろんあります。 大きな組織で、多数の人を巻き込んで業務環境を改善していく難しさはとても理解できるので、当事者意識を持っていきたい気持ちはある。

また、今までは裁量があり、わりと自由に業務上の意思決定をできていたけど、新しい職場では、どこに話を通せば良いかわからなかったり、業務把握のためにまだまだ難しいという、転職後特有のもどかしさを早くも感じています。 そもそも、新卒以来初めての転職なので、これはどこに行っても起きていそうな問題だけど・・・・・・。

転職先で前職の不満を言い続けているのも、逆に「前職ではこうだったのに」とか言い続けてるのも、両方ともダサいなあという気持ちがあるので、「まあ両方いいところも悪いところもあるよね」以上では無いかなと思いますし、どちらの会社も「最高!!!」と言えるようになっていきたい。

おわりに

以上、初めての転職エントリでした。

僕が今までやってきたことは、社内では退職時にアウトプットしてきたのですが、社外の人向けにまとめて書いたことがなかったので、この機会にブログにまとめられて良かったです。 1エントリでは収まらないほど、やってきたこと、語りたいことがあるけれど、そろそろ筆を置こうと思います。

クックパッドには7年もいて、愛着もあるので、今後とも影ながら応援していきたいと思っています。

今後の活躍にご期待ください。やっていくぞ!!!

*1:クックパッドでは、プロジェクト名に都内の地名を付けるのが流行っていた

*2:退職時

*3:Backend for Frontend

try!Swift 2017でApple Watch上でファミコンエミュレータを動かす話をしました

try!Swift活動報告

try!Swiftお疲れ様でした。いろいろあったのでざっくり報告します。

トーク『👾&⌚️』

以前お伝えしたように『👾&⌚️』というタイトルでLTをしました。

内容は、watchOS上でファミコンエミュレータを動作させるという内容です。

👾 & ⌚️ (LT) | try! Swift Tokyo 2017 #tryswiftconf Day2-16 聞き起こし - niwatakoのはてなブログ

去年と違い、今年は皆さん真面目なトークが多い印象で、僕は去年ノリでPokèmonとか言いまくってて、こんなんで良いのかと不安だったんですが、結果として、会期中のトークで一番盛り上がったんじゃないかなと自負しています。 LTらしいLTができてよかったかなあと。

700人近い参加者と、はじめての同時通訳ということで非常に緊張しました。

動画と発表の書き起こしは近いうちに公開されると思います。

ちなみに、今回開発したものは全てオープンソース化してあります。ご興味のある方は動かしてみてください。

fastlanetoolsのcore contributorになりました

TwitterのFabric.ioからGoogleのFirebaseチームに移籍した、モバイル開発向けのユーティリティfastlaneのマージ権を作者の[twitter:@KrauseFx]からいただきました。

スターが14000を超える巨大OSSのメンテナーになるのは初めてなので、日々寄せられるPRやissueの数に圧倒されています。 早速、コードレビューしたりテストを増やしたりしているのですが、ほぼ業務という感じで大変ですね。

ハッカソン

3日目のハッカソンでは、スピーカーをしていた関係で審査側に回っていたため、ハッカソン自体はほぼ何もできませんでした。

とりあえず空き時間でSwiftにcontributionしてみようと試みるも、ビルドだけで半日以上が費やされ、PRを出すところにまで至らなかった。

ビルド待ちの空き時間でまたゲーム作ってたら結構ウケが良かった。

40分で書いた雑コードを貼っておきます。

『Realm入門』の献本をいただきました

他に、久しぶりに再会した知人の[twitter:@yusuga_]さんから献本をいただきました。学ばせていただきます。

やっていく

いろいろな方に名前を覚えていただき、様々なモノをいただいて最高のカンファレンスでした。 特に、トーク後の懇親会では、常に話しかけられ続けて、最高の時を過ごせました。 今後もコミュニティに貢献していければと思っています。

とりあえずハッカソンでは何もできなかったので、近いうちにSwiftにcontributionできるといいなあと考えています。

ゲーム開発についてもっと知りたい方は

久しぶりに著書を紹介しておきます。 2年前の本ですがまだまだ使えています。Swiftではありませんが是非に! (そろそろ新作書きたい)

try!Swift Tokyo 2017で『👾&⌚️』というトークをします

f:id:gigi-net:20170226214728p:plain

TOKYO - try! Swift

3/2, 3/3に行われるtry!Swiftカンファレンスで『👾&⌚️』(GAME AND WATCH)というタイトルでLTをさせていただきます!!! 3/3 18:00からの予定です。トリの1つ前です。

内容はApple Watch + SpriteKitについてです。 僕の仕事は愚か、おそらく皆様の業務に1ミリも役に立たない話だと思うのですが、好きなことをこのような大きな場で話させていただけるのは光栄ですね。 わずか5分話すだけなのですが、おそらく1000人近い参加者の前で、同時通訳付きで話すのは初めての経験なので緊張しています。

Apple Watchでのゲーム開発は以前にwatchOS 2でブロック崩しを作るというトークをしたことがあります。

giginet.hateblo.jp

今回はいろいろパワーアップしてると思うのでご期待ください。

fastlane Meetup Japan

f:id:gigi-net:20170226214949p:plain

try!Swiftとは関係ないのですが、3/1(水)にはfastlane Meetup Japanというイベントでも発表いたします。

fastlane Meetup Japan - connpass

fastlaneは業務で使っていることもあって、最近かなり高頻度でcontributionしていて、それがご縁でcontributorとして話させていただきます。 こちらは業務の話が中心になると思います。

平日の日中という参加しづらい時間帯ですが、fastlane開発者の方も来日する貴重な機会となっておりますので、ご興味のある方は是非。