大規模開発の大変なところ

早石明浩氏(以下、早石):では、次のトピックに移りたいと思います。先ほどの話とこれも通じてくるところなのですが、大変なことや困難なことといったことが、開発規模が大きくなってきたり開発が長期化してくると起こってくると思うのですが、大規模なアプリに対して「こういったことが大変だったよ」とか「困難だったよ」というようなことがあれば、ぜひ話したいです。ヤフーさんはどうですか?

西磨翁氏(以下、西):一番私が困難だと思っているのは、さまざまな制約の中で自分たちにもっともベストな選択をしているつもりではあるのですが、そこを客観的に見てもっともっとやれることがあるんじゃないかなと自己自身を見直し続けていくことが非常に難しいです。

どうしても、同じままだといつか競合や世界に置いていかれてしまう。昨年よりも10パーセントよくなっているところを基本的に目標として設定し、過去の自分たちを超えていくことを日々実践しています。でもここが非常に難しいところです。いろいろなノウハウを今日話し合えたらなと思ってはいますね。

早石:ありがとうございます。質問なのですが、その前回よりも成長していく基準というのは、主にはプロダクト的な成長なのでしょうか? それとも技術的な何か基準があって成長していくことを考えられているのでしょうか?

西:開発効率などもあるのですが、最終的に経営にも貢献できるようなところをメトリクスにもつように工夫はしていまして、リリースしている機能の数とかリリースしている回数そのものをウォッチするようにしていますね。

早石:なるほど。確かに去年よりも10パーセント機能を増やすということ、私はこれはチャンスと思っています。多くの機能を出していくのは事業的なチャンスを増やしていくことかなと思っているのですが、そういったことをしっかりメトリクスをもっているということなんですね。

ちょっと今の部分で聞いてみたいなと思うのが、機能が10パーセントずつ増えていくと、アプリ自体がすごく複雑になっていくと思いますが、逆にそれを減らすような。これがですね、アプリで開発難しいことの1つなのかなと思ってはいるのですが、その増やすことと減らすこと、この2つのアプローチについて、減らすほうは何か実践されていることはあるんですか?

西:先ほど市場別に事業部署が分かれているとお話ししましたが、使われていない機能を減らすことで、メンテナンスコストが下がって、その分よく使われる機能に対して機能改善をしていくことが、1つ重要な判断ポイントかなと思ってはいます。そこに関しては、売上などを見ながら冷静に判断して、実は少しずつやってはいるんですよね。

先ほどお話ししたリリース回数を増やしていくというところで言うと、ビジネスチャンスをもっと増やしたい、トライできる数を増やしたいところがありまして。そこで言うと、大きな機能をドカーンと出したりとかではなくて、トライするような小さい機能を少しずつ出せるような状態を作っておく。で、来たるべきチャンスに備えるといった意味合いのほうが強いですね。

早石:なるほど。非常に興味深いお話でした。LINEアプリもけっこう機能が増えて、やっぱり開発をしていくと機能が増えていきがちになるのですが、なるべく開発からもアプローチをして、データを見ながら「この機能はあまり使われていないからドロップしましょう」とか、そういった提案も同時にしていて。

コードが残っていると、やっぱりそれだけでメンテナンスコストがかかっていくなと考えていまして、新しいデザインを適用するにも、あまり使われていない機能まで適用するとか、そういったことを考えると、機能を減らすこともビジネス的なメリットはあと考えていて、そういったタスクフォースも作っていたりします。

そのほか困難なことがあるとすると、LINEアプリはけっこうクライアント側、アプリ側でしかもっていないデータがあります。それが消えると、ユーザーにすごく迷惑をかけてしまうので、例えば内部的なデータベース、クライアント側のデータベースの構造を変更するときも、なるべくデータをロストしないように、長期的に計画を立てて変更することが多いですね。

これもけっこう大変で、クライアントのデータベースを消してしまってサーバーからデータを取ってくればいいというデザインではなくて、最初からクライアントアプリとサーバー側のビジネスロジックが一体となってアプリが動作するようにデザインされています。例えば、メッセージのデータはダウンロード後、クライアント側にしか残っていなかったりとか、そういったものをなるべくロストしないような開発を工夫しています。

やっぱりアプリ自体がクラッシュしても、1パーセントクラッシュするとかなりの人数、かなりのユーザーにクラッシュが起こってしまうことになって、CSなどのお問い合わせコストが上がったり、ビジネス的にも信頼性が下がったりするので、開発者はしっかりCSの内容、お問い合わせの内容を見ていて、問題のあるクラッシュはなるべく優先順位を上げて直すようなこともしています。

この部分に関しては、やっぱりコストがかかるので、けっこう大変だとは思っているのですが、継続的に行っています。

西:まさにここはアプリらしいところというか、腕の見せどころというか。やっぱりサーバーから取ってきたデータを表示するだけだったら非常に簡単なのですが、よりよい体験を提供するのであれば、アプリの中にデータを保存して、それからクイックに使えるようにするのは非常に大事なところです。ただそれと同時にデータをロストしないように安全に使うところは、非常に難しいところではありますね。本当に同意です。

早石:ここはアプリ開発の中で、楽しいところではあるのかなと思っています。

西:ですね。

現在と今後の取り組みについて

早石:では、次の話題に、次のトピックにいきたいと思います。

今ちょうどアプリの中で改善していることとか、今後こういったことを取り組んでいきたいなと思っていることがもしあれば、お互いにちょっとお話ししていきたいなと思うのですが、ヤフーさんのアプリの中でなにか現在行っていることって、今後の取り組みで話せることってありますか?

西:毎年いろいろなアプリが登場してきているなかで、お互い磨き合っているような状況だとは思いますが、慣れって怖いなと最近思いまして。今まで使いやすいと思っていたアプリも、ほかの新しいよいアプリを使ったあとだと、最初から使っていたもともとよいと思っていたアプリも、なんかこう、やっぱり使い勝手悪いなって思っちゃうんですよね。

それに気づかずに、使いにくいまま世の中に提供している状態が一番怖いなと思っていまして、自分が今気をつけながらやっているところは、世の中のアプリをずっと触り続けながら、改めて自分たちのアプリを見て、見つけた課題を修正してまたピカピカに磨きあげるということを続けています。

今自分の中でホットな話題は、改めてですが、アプリの起動速度が非常に大事なんじゃないかなと思っています。

タッチポイントが最近非常に増えていて、昔だったらプッシュ通知からアプリが起動されることが多かったのですが、ウィジェットだったりAppClips機能だったり、タッチポイントが増えているんですよね。タッチポイントが増えている中で、みたいコンテンツが速く表示されるところが、改めて重要なんじゃないかなと思っていまして、そこのところをいかに磨き上げるかみたいなところが、今自分がチャレンジしている部分ですね。

早石:なるほど。起動速度に関してはけっこういろいろなイベント、外部のイベントでも注目されているところかなと思っていて。例えばAppleであれば、Xcodeでアプリの起動速度のメトリクスが取得できますよね。

西:はい。

早石:パフォーマンスに関する部分は私たちも気にしていて、アプリのHang Rateを下げたりとか、起動時間を下げるというのは常に改善していかないといけないなと思っています。

西:そうですね。

早石:LINEで言うと、起動速度やクラッシュしにくくするような工夫は、常に改善していかないといけないところだなとは思っているのですが、けっこうほかにはテーマをもってやっていることがありまして、今はLINEアプリの内部のコードを細かく分割してモジュール化することを、開発側の1つのトピックとして進行しています。

ほかのセッションでも紹介予定ですが、Androidであれば、モジュールを分けていくと、Dynamic Deliveryという仕組みを利用して、国によっては提供していない機能をあとからダウンロードできるようにして、最初のアプリのダウンロードサイズを減らすことができるかなと思っています。

これはAndroidのシェアが多いような国で有効で、Androidに関してはしっかり取り組んでいきたいなと思っています。

iOSであればすごい愚直に、先ほどちょっとお話しした機能を減らす、利用率が下がっているような機能の見直しや重複しているようなリソースの使い方を見直したり、サイズの大きなリソースを改善してサイズを減らしたり、依存している外部のモジュールに対しては定期的に見直しをかけて、アプリのサイズ自体を増えないように改善を続けています。

今後の取り組みにはなると思うんですけど、もっとこの内部的なモジュール化が進行していけば、すでにやっているところもありますが、LINEアプリの中の体験をほかのファミリーアプリに対して提供していくということも考えています。

最初からその目的をもってやっていれば、けっこうやりやすかったのかなとは思うのですが、例えばSDKとして開発をしていてLINEアプリとほかのアプリで両方を使うことができていればよかったのですが、すでに動いているアプリ中のコードをモジュール化して、それをほかのアプリに展開できないかというのをやっていこうかなと思っています。

けっこう依存性をシンプルにしていったりとか、やることはけっこうあって大変なのですが、開発的にはけっこういいテーマかなと思っています。

西:ダウンロードサイズを減らすみたいなところは、グローバルに展開をされているLINEさんならではの取り組むべき課題かなと思っていまして、電波が悪い地域とか通信環境が整っていない国とかだと、こういった工夫が必要ですよね。

日本はかなり恵まれている環境なので、あまり意識するところではないかもしれませんが、パケットが有料であるといった認識の国も多いですから、すばらしい工夫だなと思いますね。

早石:そうですね。今のところはメトリクスもしっかり取るようにしていて、機能というよりはカテゴリですね、例えばチャットであったりとかペイメントであったりとか、そういったカテゴリに対してどれぐらいのバイナリサイズを割いているかなど見える化をしていたりはします。

西:なるほど。ちなみにこのバイナリを分けるといったところは、ビルドするときの、ここは静的にリンクするのか、起動時に動的にロードするとかいった、そういったところの工夫は、どうされているんですか?

早石:iOSであれば、iOS 13から改善されて、dynamic libraryをリンクしても起動速度に大きな影響は出なくなったと思うのですが、それ以前はdynamic libraryの数が多いと、dlopenがアプリ起動時にたくさん走ってしまって、起動速度が落ちるという話がありました。そういった部分は、改善のためdynamic libraryをstatic libraryに変更するということを行っていました。

西:なるほどですね。やっぱりそういった細かいチューニングの積み重ねではありますよね。

アプリエンジニアの今後のキャリア

では最後に、私たちアプリエンジニアの今後のキャリアについてお話ししていきたいですね。

これに関しては、私と西さんのほうで事前にテーマを決めるときに、「面接などで『今後のアプリエンジニアってどうなっていくと思いますか?』というような問いかけをされることがありますよね」という話になって、このテーマに関しては、答えはないと思っていますが、私たちの考えていることをお話しすることで、なにか1つ参考になることがあればいいのかなと思って、最後のトピックに入れました。

これはYahoo!アプリとかLINEアプリというよりは、私たちの考えになると思うのですが、西さんどうですか? アプリエンジニアの今後のキャリアというか、今後アプリエンジニアってどうなっていくのかっていう部分について。

西:そうですね、アプリエンジニアが使う技術が今後どうなっていくのかという話になると、それはけっこう読みづらいですよねって話になると思います。アプリエンジニアの方々と会話して感じるのは、使い勝手のよいUI、よいユーザー体験とはというところに興味をもっている方が非常に多いなということです。

新しいフレームワークとか新しいAPIでこんなことができるようになるんだっていうことに対して、非常に目を輝かせている人も多いです。それが、先ほどのセッションでもあった新しいOSやAPIが出たときにプロトタイプを作ってみる人が多いというところにつながっているのかなと思っています。

なにか技術レイヤーというよりは、使いやすいサービスとかそういった体験のところが指向としては強いかなと思っていますので、仮に将来スマートフォンがなくなってスマートフォンの次の世代のデバイスが登場したときに、アプリエンジニアの職がなくなるかとか活躍する場面が減るかというと、そうではなくて、新しいデバイスに対してユーザー体験を構築するための新しい技術を自然に学び始めると思うんですよね。

そういった流れで考えていくと、アプリエンジニアがキャリアを歩んでいく上でどんなことを学んでいくといいかというと、アプリ技術だけではなく、どうユーザー体験を構築するかといったところまで考えが及んでいれば、次の世代のデバイスが登場したときも、なにも心配いらないかなとは思ってはいます。

一方で、このアプリ、この技術だけに注力したんだとか、それに伴ってユーザー体験にあんまり興味がないんだという人がいるとしたならば、ぜひユーザー体験の部分も考えるようになってほしいと思っていまして。

これをやってみると、今まで自分の中になかった新しい考え方が手に入りますので、それによって、今まで磨かれていなかった部分のアプリ技術も改めて磨きがかかるかなと思っています。ユーザー体験の部分も学んでいくのが非常に私としてはオススメしているところですかね。

早石:そうですね。実は私も、もともといわゆるWebエンジニアとしてこの業界で働き始めたんですね。そのときはまだスマートフォンってそこまで流行っていなくて、iPhone 3Gが出て、これから流行ってくるみたいなタイミングだったのですが、そのときはWebエンジニアが、いわゆる今で言うサーバーサイドとかフロントエンドサイド、どっちもやるようなことが多かったのかなと思っています。

そのあとスマートフォンが流行ってきて、アプリにフォーカスするような開発者とかサーバーサイドにフォーカスするような開発者が増えて、さらにフロントエンドは、JavaScriptでフロントエンドを開発する開発者という具合に細分化していったように思います。

そして、私がそもそもWebエンジニアからアプリエンジニアになったときもその細分化の過程だったのですが、、西さんが言っていたような、自分が触るものにやっぱりフォーカスしてチューニングしていきたいみたいな気持ちがあったように考えてアプリエンジニアを選択したと思います。そして、このトレンドって、将来的にはスマートフォンに変わる新しいデバイスが出たときにも起こるのかなと思っています。

こちらについては、西さんと似たような意見になりますが、アプリエンジニアとして、ちゃんと目の前のコードをしっかり書いて、ソフトウェアで価値を提供することにフォーカスして、自分の実力というか力量みたいなものを上げていけば、次世代のデバイスが出てきてもしっかりキャッチアップできると思いますし、新しい体験を作るために、そちらにシフトしていけるのではないかなと思っています。

西:アプリエンジニアのキャリアは明るいですね。

早石:はい、そうだといいですね。

西:ありがとうございました。