短期間のハッカソンで突き詰めた、
チーム開発の経験から見えたもの

永瀬 拓也

自己紹介をお願いします。

2022年4月に新卒として入社した永瀬拓也です。現在はLINEコンテンツプラットフォーム開発チームに所属し、LINEアプリのホームタブの開発を担当しているチームでiOSのクライアント開発を担当しています。

チーム配属後はUTSという社内向けのログ集計システムや、LINEアプリのホームタブ、トークタブ上部に表示されるスマートチャンネルの修正や仕様変更などのタスクを担当しています。

LINEのインターンシップに参加した経緯を教えてください。

2020年の夏に開催された技術職のハッカソンコースに参加しました。当時は就職活動が目前に迫るなか、自分がどんな企業に行きたいのかを漠然と考えるようになった時期でした。インターンシップ先の企業を探すうえで意識していた点は2つです。1つは、自分が普段使っているサービスの開発に携われること。もう1つはそのサービスの開発工程や使われる技術、現場のエンジニアの方々や雰囲気をしっかりと感じたいと思っていたため、2週間から1ヶ月くらいのある程度長めの期間で参加できること。技術職のインターンシップは当時、就業型とハッカソン形式のコースの併願が可能だったため双方に応募し、選考過程のなかでハッカソンコースに合格し、参加することになりました。

また、当時からLINEのエンジニアに対して非常にレベルが高い印象を持っていて、自分の技術を磨くために多くの優秀なエンジニアの方々から直接話を聞き、知見を深めたいと思ったことも応募した大きな理由でした。

インターンシップの選考ではコーディングテストと面接を受けました。面接ではコーディングテストの実装意図や、これまでの開発経験や開発の考え方など現場における実際の技術力を問うような内容についてしっかりと聞かれました。LINEのエンジニアのものづくりに対する考え方が伝わり、とても印象に残っています。

インターンシップではどのようなことに取り組みましたか?

僕が参加したハッカソンコースでは2週間の期間中、最初の数日間はオリエンテーション、その後の期間で実際のチーム開発を行いました。ハッカソンのテーマは「メッセンジャーアプリを開発する」といったLINEらしいテーマでした。それに加えて、LINEにない付加価値となる機能を開発するというお題も与えられ、学びたい技術の希望や経験から3チームに分かれて開発に臨みました。

機能要件ごとにNormal(今回の参加者であれば、問題なくクリア出来るレベル )・Nightmare(2週間で正しく実装を完了させるにはそれなりの覚悟が必要なレベル)・Hell(突き詰め始めると終わりがない、文字通り地獄のようなレベル)の3段階で難易度が定められていました。競争形式ではないものの、どのチームも自発的に高難易度の実装にチャレンジしていました。より詳細な内容はこちらの記事でも紹介されていますので、興味がある方はぜひご覧ください。

開発は5名のチームで行いました。最初にどのようなものをつくるかのコンセプト設計や企画から行い、そこからサーバー側、クライアント側の開発に分かれて役割分担をしていきました。僕自身は企画の領域にも興味を持っていたので、コンセプト設計段階から積極的に意見を出し、他のメンバーの意見をまとめ、どんなものをつくっていくかを詰めていきました。開発フェーズでは経験があったクライアント開発のメイン担当として携わりました。僕たちのチームは難易度Hellまでは届きませんでしたが、Normal要件をクリアしてNightmareへのステップアップを目標に掲げて、Nightmare要件のなかでできるものはしっかり潰していくように進めていたと思います。

iOSのネイティブクライアント開発を行い、大きなこだわりを持って実装したポイントはリアルタイムで無制限にいいね!が押せる「無限にいいねがもらえるSNS」機能でした。Load Balancerを利用した複数台のサーバー構成はNormalからNightmareへのステップアップのなかでも特に難しい部分でしたが、最終的には無限いいね機能の他にLINEアカウントでのログイン機能、独自IDによる友だち検索と個人チャット機能、グループチャット機能、トークルーム・友だち削除機能までを実装することができました。

インターンシップ期間中に感じたこと、得られた経験を教えてください。

僕のチームではクライアント側の開発をするうえでSwiftを使用しようという話になったのですが、実は僕自身にSwiftの経験がほとんどない状態でした。なので、期間中前半の数日は毎晩Swiftの基礎知識をつけるために必死に勉強しました。最低限追いつけた実感はありましたが、もともと経験のあったObjective-Cとの違いで戸惑うことも多く、もう少し基礎を広く固めておくべきだったと思っています。

また、2020年はコロナ禍になったばかりの年で、今までに経験のなかったオンラインでの参加となりました。全員オンラインかつ初対面のメンバー同士でのチーム制作はすごく難しくて、ちょっとしたことでも声をかけづらいことがコミュニケーションにおけるハードルになっていました。チームメンバーのタスク管理はカンバンボードを使いながら行っていましたが、どうしても細かい進捗をとらえるのが難しくて…。少しでも開発がスムーズに進むよう、期間中はZoomを常時接続して、話すタイミングではなくても何かあったときに少しでも声をかけやすいように心がけていましたね。

初対面のメンバーとオンラインでコミュニケーションを取ることに慣れる機会となり、これは今の業務にも活きています。特に新卒研修のときはインターンシップと同様に初対面同士の同期で開発を行う形式だったため、経験が活きたように思います。タスク管理ツールをはじめとしたオンラインツールの活用も、自分たちでいろいろなサービスを調べながら使い方を学び、実際のワーク内にも導入していったため、良い機会になりました。

アウトプットとしては、期間が短いため実現できなかった機能もあり心残りはありますが、今まで関わったことのない人たちと一緒に個人の能力を活かし、ひとつのものを作り上げられたので、きっと個人開発で同じものはつくれなかっただろうなと思っています。それぞれのメンバーにバックグラウンドがあり、持っている知識や強みは当然違います。そのため、最初のうちは意見のすり合わせや収束に苦労しました。さらにそれらをメンバー同士でしっかり共有し、意見をすり合わせながら役割分担をして、全員の長所を活かしながらひとつのアウトプットに向かっていくことは自分にはとても難しいことでした。チーム開発を経験したことで、複数人が関わる開発における進め方やレビューのもらい方などの解像度も上がり、今の仕事にも活きているように思います。

メンターの先輩からは、大規模サービスの開発者ならではの視点で意見やフィードバックをもらえました。たとえば、チーム開発におけるコードの可読性や再利用性で意識するポイントなどは特に参考になりました。技術領域で経験豊富な先輩方のこれまでの経歴やキャリア、仕事についての考え方などを直接聞けた点も自分にとって有意義だったと感じています。

実際にLINEへの入社を決めたポイントはありますか?

インターンシップの参加を経て最終的に入社を決めたポイントは、やはり多くの人が利用する大規模なサービス開発に携われる点です。LINEアプリは日本でトップレベルでユーザーが多いサービスで、小さな仕様変更でも多くの人に影響を与え、責任の大きな仕事をできると思いました。

インターンシップ期間内に、メンターの先輩方と話す機会がありましたが、みなさん共通してものづくりに対して真剣に、楽しんで取り組んでいる印象を受けました。もともとLINEのエンジニアのレベルの高さはイメージとして持っていましたが、レベルが高いだけでなくものづくりに対する考え方そのものがとても魅力的で、自分も一緒に働きたいと思うようになりました。

エンジニア組織のカルチャーにも魅力を感じていました。実際に上がってきた企画や決められた仕様を実装するだけではなく、自分から意見を出してそこから企画が始まったり、コミュニケーションを取りながら開発していくことができたりする環境で働きたいと強く思っています。そういった環境や雰囲気が当たり前にあることやエンジニアが尊重されていることがインターンシップを通じて確認できて、魅力に感じましたね。

入社後、LINEで働いていてどうですか?

実際に入社してからも大きなギャップはなく、エンジニア観点で提案した意見を企画の方も真摯に考えてくれて、密にコミュニケーションを取りながらより良いものを目指していけている感覚があります。

また、iOSエンジニア同士でも1年目だからと過度に気を遣われるようなこともなく、意見を聞いてもらえ、機会も与えてもらえていると実感しています。LINEのエンジニアはコードレビューも年次や経験関係なくフラットに行うカルチャーがあるのですが、先輩方のコードを見て学ぶことも多いですし、レビューしていくなかでわからなかったことの意図を聞いたり、そこから建設的な意見交換をしたりすることも多く、とても勉強になる良い環境です。

一方で、ユーザーも機能も多いLINEアプリでは、機能追加や1つの修正をするだけでも何層にもわたりコードを辿っていかなければなりません。複雑なものを読み解いていくスキルが求められる点は、LINEならではの難しさで入社後苦労した点でした。改めてどんな実装・設計をするかを考えるのにも時間がかかるため、想像以上に大変な点でしたね。「今問題なく動けばOK」ではなく、「今後の機能追加や修正を考えたときにその変更に耐えうるのか?」「読みづらいコードになっていないか?」といった点を考慮しながら、日頃からコメントやコードの書き方も気にしながら実装をしています。

就職活動におけるアドバイスはありますか?

学生のうちに特定の技術や言語に関わらず、サービス開発業務に携わる経験をたくさんすることは大事だと思います。

また、どこかの企業で長く働く経験は就職をすればできることですが、インターンシップを通じて短期間で複数の会社に関わり、現場の雰囲気を知れるのは学生特有の機会です。僕自身、複数社のインターンシップに参加したことで自分の興味関心領域や働くうえで大事にしたいことが見えてきて、自分の経験としても蓄積されていった実感があります。そういった知見を貯める意味でも、インターンシップなどを通じて学生のうちにサービス開発の経験値を積んでおくと良いかと思っています。

最後にメッセージをお願いします。

LINEという会社そのものやサービス開発に興味がある方であれば、現場のエンジニアの先輩と接したり、同じ職種を目指している同世代の学生と関わるとても良い機会になるはずです。迷っている方はぜひ応募してもらいたいです。