Interviews/

玉木 英嗣 / クライアント

自己紹介をお願いします
2018年4月に入社しましたAndroidエンジニアの玉木です。就職先としてLINEを選んだのは、いくつかの候補の中でサービスの規模がもっとも大きく、やりがいのある仕事に取り組めるのではないか、エンジニアとして成長できるのではないかと考えたためです。面接が楽しかったことも大きな理由です。面接官から「こういった機能を実現するコードを書いてください」と言われて、ホワイトボードにコードを書いたのですが、そのときに「この条件だとこの問題が発生するけれど、どう対応しますか」などと問われ、それを受けてコードを修正するといったやり取りがありました。ほかの会社では面接でこのようなやり取りをすることはなく、おもしろそうな会社だなと感じました。

配属されたのは、AndroidのLINEアプリにおけるチャットおよび関連する機能を担当しているチームです。新機能の開発や既存機能の改善、コードの品質改善、さらには内製ツール管理などの業務に対応してきました。LINEの開発者向けイベント「LINE DEVELOPER DAY」やGoogle Developer Groupコミュニティが主催する「GDG DevFest」などにも登壇しています。
これまでどのような仕事を担当してきましたか
入社した当初に取り組んでいたのは、他のアプリからLINEアプリへ画像等を共有し、メッセージとして送信するといった処理などの内部改善や品質改善の取り組みです。それから半年ほどが経った頃から、新機能の開発にも携わるようになりました。

内部改善と新機能開発のどちらでも、最初は作業者のような立ち位置でした。企画側との調整などはシニアエンジニアやマネージャーが行い、そこで固められた仕様に基づいて実装を進めていくといった形です。

入社2年目の夏頃に、上司との面談でエンジニアとして次のステップに進むためにはどうすべきかを話し合い、自分の希望も伝え、リードする立場としてプロジェクトに関わる機会を増やしていこうということになりました。そこから、企画側の担当者やサーバー側のエンジニアと直接コミュニケーションし、仕様の策定に直接携わる機会が徐々にですが増えています。正直、入社する前は人とのコミュニケーションは決して得意ではありませんでした。ただ、LINEには多くのエンジニアが在籍していますし、外国人の方とプロジェクトを進める機会も多く、自然とコミュニケーション能力は鍛えられていると感じています。

それを実感できたのは、LINE公式アカウントのトークルームにおけるトラッキングの仕組みの開発です。LINE公式アカウントから送信されたメッセージにおいては、以前からメッセージの表示回数やクリック率といったデータを収集し、運営管理者向けに分析機能として提供をしていました。しかし、それだけでは不十分だという声があり、リッチメニューに対するイベントも収集するための追加開発が行われました。その際、クライアント側とサーバー側のどちらがどのような処理を行うのかについて、調整を行う必要がありました。そこで私がクライアント側を代表してサーバー側の担当者と話し合い、どちらがどこまで対応するかといったことを議論しました。

すべてクライアント側の都合で仕様を固めてしまうと、サーバー側での処理が非効率になる可能性があるほか、必要なデータをすべて取得できないなどといったことも起こりえます。そのためどこかで折り合いを付ける必要があり、こちらの要望を伝えつつサーバー側の意見にも耳を傾け、最終的な仕様に落とし込みました。

このようにサーバー側のエンジニアとやり取りし、最終的な仕様を固めたことは自信につながりました。エンジニアとして成長していくためには、さらにコミュニケーション能力を磨く必要があると感じているので、今後も様々なプロジェクトにリードとして関わっていきたいと思います。
今までで一番印象に残っている、大変だったプロジェクトについて教えてください
今一番印象に残っているのは、Android版LINEアプリのメッセージ画面に背景エフェクトの機能を実装した案件ですかね。この画面エフェクト機能は、当初はiOS版のエンジニアが思いつきで作ったものだったんです。社内外で評判が良かったので、春に桜が舞う、クリスマスシーズンに雪が降るといったパターンが追加され、さらに特定のキーワードを含んだテキストが送信されるとエフェクトが表示されるといった演出も追加で組み込まれることになりました。

iOS版では問題なく実装されたのですが、アニメーションの表示に利用している「Lottie」と呼ばれるライブラリに問題があったことから、Android版LINEアプリではすべての背景エフェクトを正しく表示することができませんでした。具体的には、アニメーションを構成するレイヤーが重なっていた時に、半透明な要素同士が重なった場所の色が正しく描画されないというものでした。この問題を解決するための機能が未実装になっているため、iOS版とAndroid版でアニメーションの見た目が変わってしまっていました。

この問題をクリアしなければ、iOS版と同じようなエフェクトを実現できません。この問題はライブラリのGitHub上でも頻繁に報告されていたため、ライブラリの作成者側でも認識していたようですが、「対応すると描画がすごく重くなるから対応しない」とのメッセージが出されていました。普通なら引き下がってしまったかもしれません。ただ、どうしてもこの機能がなければプロジェクト自体が実現できなくなってしまいます。うまくパフォーマンスを下げずにやる方法が実はあるのではないかという希望的観測のもと、本腰を入れて調査と修正を行ってみることにしました。

2週間ほど試行錯誤した結果、半透明の要素を正しく描画するように変更を加えると確かにパフォーマンスの低下が起きたものの、半透明の要素同士が重なったときだけ正しい計算を行えるような修正を入れ、それ以外の時には従来の処理を行うといった最適化を入れることでパフォーマンスの低下がほぼ気にならないレベルまで軽減されるということがわかりました。この修正内容を開発者に送って取り込んでもらい、ようやくiOS版と同様の画面エフェクトを実現することができました。

この開発はなかなか大変だったのですが、「Android側でもエフェクトを見たい」というユーザーからの声があったこともあって、技術者としてチャレンジせずに「できませんでした」と諦めることはしたくありませんでした。できるところまでやってみようとチャレンジした結果、よりAndroidというプラットフォームの奥深くを覗いて知識を身につけることができ、問題の解決につながる道筋をなんとか見つけて実装することもできました。いい経験ができたプロジェクトだったと思います。
自分の成長を感じるポイントは
色々ありますが、たとえば可読性や保守性の高いコードを書けるようになったことも、LINEで働いていることで成長できた部分だと考えています。

LINEのAndroidアプリにはおよそ100名前後のエンジニアが携わっているため、誰が読んでもどういう処理を行っているのかが分かりやすいコードで書くことが重要なほか、どうしても処理内容が分かりづらくなる場合にはコメントで補足するといった配慮が必要になります。LINEのAndroidアプリの開発チームでは、持続可能な開発ができる環境を整えるために、コードの可読性を保つ取り組みを進めています。
参考: “コードの可読性についてのプレゼンテーション紹介” の不定期連載記事

こうした背景から分かりやすいコードを書くことの重要性がチーム全体に浸透していて、「こういう設計のほうが分かりやすい」、「この書き方は分かりづらい」などと、チームメンバーとお互いにコードをチェックしています。こうした環境の中で揉まれたことで、可読性の高いコード、あるいは保守しやすいコードを書くことのスキルを高められました。

普段から意識していることの1つに、コードを変更する場合はそれ以前よりも少しでもきれいにする、「ボーイスカウト・ルール」と呼ばれる取り組みの実践を意識しています。たとえばコードを変更する際に関数名をより分かりやすいものにする、使われていないコードを消すといったことです。普通に作業するよりも時間はかかりますが、普段からきれいなコードを書くことを意識することでチーム全体の生産性や作業効率は向上します。問題なく動作しているコードをわざわざ書き換える必要はないといった意見もあると思いますが、保守しづらいコードがいつまでも残っているのは、新しい機能を加える際の障壁になりかねません。このように技術的な負債になっているコードがないか、定期的にチェックしていくことは重要であると考えています。その際、可読性や保守性が高いコードを書くためのスキル、あるいはリファクタリングの取り組みで得た知識は役立ちます。

LINEアプリならではの知見や経験も成長につながっています。その1つが、セキュアなコードを書くことが強く求められる点です。サイバー攻撃を防ぎ、ユーザーのデータを守るためには、脆弱性のないセキュアなコードを書くことが重要です。そのためにチームのメンバーとお互いにレビューを行い、コードから脆弱性を無くすために日々意見を交わしています。

周りのエンジニアの存在も刺激になっています。特にLINEには、高いスキルを持つシニアエンジニアが数多く在籍していて、彼らと会話することで様々な学びが得られます。自分が分からないことについて相談したとき、こういう言語仕様だから挙動がこうなるといったように、言語的なバックグラウンドまで含めて説明してもらったこともあります。高いスキルを持つエンジニアと話すのは勉強になりますし、スキルなどの成長につながっていると思います。
働く環境として、LINEはどうですか
僕にはすごく合っていて、働きやすいと思っています。入社してすぐの頃から、実装方法などについては任される部分が大きく、自分で最適解を考えて取り組むことが少なくありません。さらに経験を積むと調査の部分から任されるようになり、自分で考えた上で「この方法がいいと思います」と提案することも増えてきます。

たとえば新しいバージョンのAndroidの機能に追従するため、メッセージデータの保存場所をすべて変更しなければならないことがありました。その際、どのようなプロセスでタスクを進めれば問題が起きにくいのか、コードの実装方法をどうすればバグが少なくなるのかなど、様々な案を考えて提案し、その中から有効と判断された案を実装して対応しました。

開発においてエンジニアに一定の裁量権があり、自分の頭で考えて取り組むことができる。僕にとっては働きやすいと感じるポイントですし、自分が働く価値を感じやすい環境だと思います。
最後にメッセージを
私自身が就職先としてLINEを選んだ理由として、多くのユーザーに使われていて、自分自身も利用しているサービスに携わりたいと考えたことがあります。自分自身が日々使っているサービスの開発に携わり、新機能を追加したり改善したりする経験はなかなか得難いものだと思います。

新しく機能を追加したときに、新機能について多くの人たちに言及してもらったり、あるいはメディアで取り上げられたりすると、大きな達成感があります。そうした機会が多いことも、多くのユーザーに使われているLINEならではであり、やりがいを感じられる部分です。もちろん問題が発生すれば大きな影響が生じるなどプレッシャーもありますが、エンジニアとして成長したいと考えているのであれば、LINEで働く経験は大きな糧になると思います。やりがいとプレッシャーを一緒に楽しめる方に入ってきていただけると嬉しいですね。