開発のスペシャリスト、onevcatが思い描くエンジニア像

LINE で働くエンジニアに色々と話を聞いていく「LINE Engineer Insights」。今回からは、 LINEの技術組織で働く個々人に、何を重視して技術者としてのキャリアを歩んでいるのか、今LINEで何に取り組んでいるのか、今後実現していきたいことなどを聞いていきます。 

今回登場するのは、エンジニアとしてキャリアをスタートしてから現在まで10年以上iOSアプリ開発に携わり続け、LINEではライブ配信サービスLINE LIVEの開発を行うWei Wang ( @onevcat)です。また、WangはOSS開発も積極的に行っており、これまでドキュメンテーションコメントを簡単に書けるXcodeプラグインVVDocumenter-Xcodeや、画像を扱える軽量なSwiftライブラリKingfisherなど、いくつものソフトウェアを生み出してきました。 

「自分がコードを書くことで、少しでも世界を変えたい。自分が携わったソフトウェアによって、誰かが効率良く仕事できたり、誰かの生活が便利になってくれたりしたら嬉しいです」と語るWangに、 iOSアプリ開発の醍醐味や現在取り組んでいる開発内容、エンジニアとして大切にしている信念などを聞きました。 

 

どれだけ続けても、iOSアプリ開発への興味は尽きない 

──WangさんがiOSアプリ開発に興味を持ったきっかけは何でしょうか? 

 私がiOSアプリ開発を始めたのは2010年で、当時の私は大学院の1年生か2年生くらいでした。iPhoneの端末がすごく欲しかったんですが、学生なのでお金があまりなくて。iOSアプリ開発のアルバイトをすれば、もしかしたらiPhoneをもらえるかもしれないと思ったんです。結局、もらえなかったんですけど(笑)。それからiOSアプリの開発を続けており、長いもので今年で11年目になります。 

──iPhoneに初めて触れたときに感じた印象を教えてください。 

時代を変えるようなデバイスだと感じました。それまで一般的だったフィーチャーフォンとは違って、タッチスクリーンを指で操作するという斬新なUI。機能も充実していて、これは素晴らしいデバイスが出てきたという印象でした。 

2010年ごろは今と比較すると、App Storeにあるアプリの数が圧倒的に少なかったです。すべてのアプリの数を合計しても、1万とか2万くらいしか存在していなかったかもしれません。何か新しいアイデアを思いつけば、そのジャンルで世界初のアプリを開発できる余地がたくさんありました。現在は、何かのキーワードでApp Storeを検索すると、絶対に世界の誰かがすでに作ったアプリがありますから、ずいぶん数が増えましたよね。 

 ──アルバイト時代、プログラミングスキルは順調に上達していきましたか? 

最初の頃はわからないことばかりですから、新しい知識を覚えるだけですぐに上達できました。しかし、どのような領域を学ぶときもそうですが、だんだんと難しいことを学ばなければならなくなると、上達のスピードがゆっくりになっていきます。「いったい、どれほど勉強すればスキルアップできるんだろう」と、大変さを感じた時期もありました。 

例えば、マルチスレッドプログラミングを初めて学んだ際は、今ほど資料やチュートリアルが充実していなかったので、非常に苦労した記憶があります。ですが勉強を続けていくと、あるタイミングで「ああ、なるほど。こういうことだったんだ」と、その概念を理解できるようになります。まるで、急に空が高く見えるような感覚を覚えました。 

 ──Wangさんは10年以上にわたりiOSアプリ開発を続けていますが、他の種類のソフトウェア開発と比べて、iOSアプリ開発が持つ固有の楽しさは何だと思われますか? 

 まず、エンジニアにとって使いやすく、優れた設計のSDKやAPIをAppleが提供してくれていること。それから、iPhoneそのものの機能が非常に優れていることです。デバイスの良さを引き出すために、エンジニアとしてより良いコードを書けるようになりたい、というモチベーションにつながります。 

そして、多くのユーザーがiPhoneを日常的に利用しているため、自分の作ったアプリが誰かの生活の役に立ってくれること。一番嬉しい瞬間は、電車やバスなどで自分が開発したアプリを誰かが利用しているのを偶然目にしたときです。「アプリを使ってくれて、本当にありがとう!」という気持ちになります。 

新技術を学ぶことでユーザーへの提供価値が向上する 

──WangさんはLINE入社前に日本の他のIT企業で働いていたそうですが、当時の企業選びの基準を教えてください。 

 大切にしていたことが2つありました。まずは、ユーザー数の多いサービスの開発に携われること。先ほどの話とも通じますが、自分が開発したものを世の中の誰かに使ってもらえることは、エンジニアとして大きなモチベーションになります。 

 もうひとつは、なるべく残業が少なくてプライベートの時間を充実させられること。前職は残業の多い会社で、夜の22時とか23時くらいまで働いていました。家族と一緒に過ごす時間や、自分が勉強する時間を確保できないことがすごく残念でした。LINEはこの基準をどちらも満たしている会社で、かつ採用面接の際にも非常に好印象でした。 

 ──入社してから感じたLINEの印象を教えてください。 

 LINEはエンジニアの裁量が大きい会社です。用いる技術をエンジニア自身が考えて決められるのは、非常に良い点だと感じます。iOSアプリ開発の領域では毎年のように新しい技術が登場しますが、そうした技術を取り入れることは、エンジニアが成長するうえでも、 ユーザーに利便性の高いアプリを提供するためにも重要です。  

iOSのバージョンが上がれば、多くのユーザーは「きっと次のバージョンでは、もっと便利にiPhoneを使えるだろう」と期待します。それなのに、エンジニアが新技術を導入せずアプリの機能が古いままでは、ユーザーはがっかりしてしまいますよね。 

 ユーザーの期待に応えるためにも、エンジニアとしてなるべく新しい技術をキャッチアップして活用していきたい。そうでなければ、多くの人々に使ってもらえるアプリを開発できませんから。 

 LINE LIVEは自分の子どものようなアプリ 

 ──WangさんはLINE LIVEの開発に携わっており、サービスへの思い入れがとても強いそうですね。 

私はLINE LIVEのプロジェクト最初期から現在まで、ずっと開発に携わり続けています。自分の子どもを育てるような気持ちでLINE LIVEに接していますね。 

LINE LIVEに携わる中で印象に残っているのは、動画内に表示されるチャットモジュールの開発です。視聴者は動画の視聴中にコメントを投稿できます。人気のアーティストやアイドルなどが配信する際には、たくさんの視聴者が集まり投稿されるチャットの数も膨大になりますから、パフォーマンスに優れたチャットモジュールを開発する必要がありました。例えば、何万人というユーザーが同時接続していても、問題なくチャットの投稿・閲覧ができるようにしなければなりません。 

 ──どのような方法でチャットモジュールの実装を行いましたか? 

基本的にiOSアプリ開発においてUIレンダリングをメインスレッドが担当します。しかし、大量のチャットが投稿された際にUI関連のすべての処理をメインスレッドで実施すると、画面がフリーズしてしまいます。 

通常、フレームレートが60fpsのアプリの場合、各フレームでUIレンダリングにかけられる時間は16ミリ秒しかありません。人気の配信者の場合、ユーザーが同時のタイミングで何百という数のチャットを投稿するケースがありますから、それらを16ミリ秒の間でメインスレッドに処理させるのは不可能です。 

そのため、LINE LIVEでは非同期処理によるチャットのレンダリングを実装しました。できる限りの仕事を裏側のバックグラウンドの複数スレッドで実施し、一定のタイミングでViewの情報をバックグラウンドのスレッドからメインスレッドに送って、描画を行う設計にしているんです。これにより、メインスレッドが実施する仕事を最小限に留めています。 

 この説明だけですと、それほど難しくは聞こえないかもしれません。ですが、チャットのデータをネットワーク経由で受け取った後に、バックグラウンドの複数スレッドをどのように立ち上げて管理するか。バックグラウンドのスレッドが処理した情報をまとめる際に、いかにデータの正確性を担保するかなどを考慮すると、実装が非常に難しくなっていきます。 

──ユーザーにとって便利なアプリにするために、技術的に高度な工夫が行われているのですね。 

実は余談がありまして、今年のApple WWDC 2021で発表されたSwiftのバージョン5.5ではSwift Concurrencyが行われて、先ほど述べたような仕様を比較的容易に実装できるようになったんです。しかし、私がチャットモジュールの実装をした2016年ごろはSwiftにその機能がなく、自力でゼロから実装するしかありませんでした。大変でしたが、言語の機能を深く知るきっかけになったため、エンジニアとしてのスキル向上につながりました。 

 ──LINEの他の種類のプロダクトではなく、LINE LIVEの開発に携わったからこそ身についたスキルがあれば教えてください。 

LINE LIVEのiOSアプリチームは少数精鋭で構成されているため、ひとりのエンジニアが幅広い業務を担当する必要があります。決められた仕様に沿ってコードを書くだけの役割ではありません。エンジニアがプランナーやデザイナーなどとコミュニケーションをとりつつ一緒に仕様を決めていき、プロジェクトを進めることが大きな特徴です。 

 また、LINEアプリにはLINE LIVEのプレイヤーが埋め込まれており、LINEユーザーはLINE LIVEのインストールをしなくても配信を視聴できる仕組みになっているのですが、この機能を提供するためのライブラリ作成を私が担当しました。  

他のアプリ開発チームに対してライブラリとしてLINE LIVEの機能を提供することで、ソースコードを私たちのチームで一元管理でき、メンテナンス性が高くなります。ライブラリ作成に携わるのはLINE社内でも珍しい機会ですから、これもLINE LIVEの業務の幅広さの好例だと思います。 

 さらに、要求される技術的な水準が高いこともやりがいにつながっています。先ほどお話ししたようにサービスへのトラフィックが膨大ですから、それに耐えられることを前提としてアーキテクチャや設計、実装を決める必要があります。 

誰かの役に立ってほしいからこそソフトウェアを生み出す 

 ──WangさんはLINE SDKの開発にも携わっていると伺いました。 

 LINE SDKでは、LINEアカウントを経由してログイン・ログアウトできるような、認証機能に関するコードを私が書きました。そして、オープンソースプロジェクトとして社外にもLINE SDKのコードを公開しました。通常、アプリのユーザーは一般の方々ですが、LINE SDKのユーザーはエンジニアの方々です。エンジニアにとって使いやすい機能にするため、工夫しながら実装したことが印象に残っています。 

 もともと、LINE SDKでは認証関連の“画面”に関する処理を扱っていませんでした。例えば、ログイン後に表示させる画面のダークモードのサポートなどですね。しかし、その機能もLINE SDKに盛り込んで、SDKを利用するエンジニアたちが、わざわざ自分たちのアプリで機能を実装しなくても大丈夫なようにしました。通常のアプリ開発でもOSS開発でも同じですが、ユーザーがなるべくシンプルに使えるソフトウェアにすることが非常に大切です。 

 ──Wangさんはプライベートな時間でOSS開発に取り組まれていると伺いました。その開発でも、“ユーザーにとっての使い勝手”を重視されていますか? 

 そうですね。例えば、過去にはVVDocumenter-Xcodeというドキュメンテーションコメントを簡単に書けるXcodeプラグインを作成しましたが、これは他のエンジニアの方々になるべく楽になってほしくて作ったものでした。その後、Xcode本体にドキュメンテーションコメント機能が搭載されましたが、実はこの機能にはVVDocumenter-Xcodeのコードがそのまま流用されています。  

Kingfisherという画像読み込みのライブラリも、エンジニアに便利に使ってほしくて開発したものです。Kingfisherを開発し始めた頃はSwiftが登場したばかりの時期で、画像を処理してくれるSwift製のライブラリが世の中に不足していました。そこで、なるべく簡単かつ便利に使えるライブラリとして、Kingfisherを開発したんです。今では世界中のエンジニアが、Kingfisherを使ってくれるようになりました。Kingfisherは、GitHubのスター数が18,000を超えるほどになっています。 

 ──Kingfisherを実装するうえで工夫したことはありますか? 

 最初から規模の大きなライブラリを開発しようとすると大変になってしまうため、初期の頃はまず画像のダウンロードや表示、削除などコアの機能だけを提供しました。その後、徐々に追加機能をしていく形式を選びました。 

また、Kingfisher開発初期の頃はまだSwiftの良い書き方がわかっておらず、言語の特徴を生かしたコードになっていなかったんです。そのため、その後に大幅なリファクタリングを複数回実施し、よりSwiftらしい書き方の、メンテナンス性に優れるコードへと変えていきました。なるべくエンジニアの方々に良いソフトウェアを提供したいですから。 

 ──人気のあるOSSをメンテナンスする楽しさについても教えてください。 

自分の開発したOSSの人気が出ると、ソフトウェアをさらに改善したい気持ちが強くなります。また、OSSのコードを読み書きするエンジニアが増えることで、新機能の実装や不具合の解消などが進みます。それによって、ソフトウェアがさらに改良され、よりユーザーが増えるという好循環が生まれる。これは人気のあるOSSを開発・提供することの醍醐味です。 

 これまで、自分は数多くのOSSに助けられてきました。自分自身も世界にいる誰かの役に立つようなコードを書きたいと思っているため、OSSの開発をずっと続けています。 

 OSS開発をやっている意義としては、TwitterなどのSNSで「ライブラリを開発してくれてありがとう」とか「このOSSを使って開発効率が良くなりました」といった言葉を、何度ももらいました。それから、自分が開発したOSSにコントリビューションしてくれる人や、チュートリアルを作ってくれる人がたくさんいます。自分のやったことが誰かの役に立っているんだと感じて、本当に嬉しかったです。 

自分のコードで世界を変えたい 

 ──エンジニアとして働くうえで大切にしている信念はありますか? 

先ほどのエピソードとも通じますが、自分がコードを書くことで、少しでも世界を変えたい。自分が携わったソフトウェアによって、誰かが効率良く仕事できたり、誰かの生活が便利になってくれたりしたら嬉しいです。 

 世界中のエンジニアが同じような信念を持っていれば、絶対により良い世界が実現できると思っています。もちろん、その道のりは平坦ではないでしょうが、一生をかけてでも取り組む価値のある仕事です。今の自分がエンジニアとして良いソフトウェアを開発して、ユーザーの方々の役に立っていることに、とても満足しています。 

 これからもエンジニアとして価値を創出していくには、継続的な勉強が欠かせません。エンジニアの世界は進歩が早いですから、1日でも勉強を怠けると世界から置いていかれてしまう、という気持ちが強いです。 

 過去に自分が書いたコードを読むと、恥ずかしい気持ちになることがあります。「なんで、こんなひどい書き方をしているんだ!?」と(笑)。でも、それは自分のスキルが上達した証拠でもありますから、技術の研鑽を続ける限りこの感覚はずっと続くだろうと考えています。 

──過去と現在とで、コードの書き方に生じた違いについて教えてください。 

 昔は、達成したい機能が実装できていればそれでいい、コードは自分だけが読めればいいと思っていました。ですが、今は自分だけのためではなく、一緒に働いてくれるチームメンバーにとっても、読みやすく修正しやすい、そして利用しやすいコードを書くという気持ちが強くなりました。それが昔と比べると一番成長できたポイントです。 

 これからも、自分の技術を活用してもっと良いソフトウェアを作りたい。勉強を続けて、より技術力の高いエンジニアになっていきたいです。 

 

LINE LIVEでは、一緒に働くメンバーを募集しています。