Allegro!

JavaやIT系小ネタ、趣味の話まで。

【LINEDeveloperMeetup#50】モバイルアプリとエンジニアたちの未来のお話

皆さんおはようございます。
24時を回れば翌日だと思っているので、日を跨ぐ時は必ず「おはよう」と挨拶をします。しかし友人たちは口を揃えて「なんか違くね?」と言います。なぜでしょうか。

さて、先日(というか昨日)は表題にも書いてある通り福岡で開催されたLINEDeveloperMeetup#50へと足を運んで参りました。

どんな内容だったのか、行った報告も兼ねてざっくりと紹介していきます。

1.LINEでのモバイルアプリ開発(Speaker:若狭建さん)

Agenda

  1. LINE Client Appについて
  2. チームについて
  3. 開発について
  4. これから挑戦していきたいこと
  5. 未来について

感想

若狭さんは過去にAppleGoogleといった企業でエンジニアとして勤務し、現在LINEでエンジニアディレクターとして様々な方面で尽力されています。
青い鳥でフォローはしておりましたが、実際にお目にかかったのは今日が初めてでとても楽しみにしていました!

Agendaで取り上げられている内容で受けた印象や感想は以下の通りです(*´ー`*)

LINE Client Appについて

  • LINEは、今年6月で誕生して8周年(!)
  • 主に使われているのがChat(メッセージ)やCall(電話)の機能で、多い時は50億近いメッセージを処理しているらしいですよ。
  • バイス:iOS,Androidの他にも数多くのデバイスに対応(WindowsMetroとか)
  • 機能:Messasing(Chat),stickers/Themes,Album/Photes/Videos,VoIP(Call),Line Pay etc...
  • 連絡ツール:LINE,slack,JIRA,Zeplin(デザイナーとデザインの話をする時に使うらしい)

チームについて

iOS開発エンジニア、Android開発エンジニア共に100名!!
これだけ大規模な人数で開発しているとプルリクした時のコンフリクトがやばそう…

拠点は主に東京 、ソウルのようですが台北や福岡など様々な拠点でエンジニアやデザイナーたちが活躍しているみたいです。

ちなみに、日本語から現地の言語へとそれぞれの国に応じた言語を通訳してくれる人が各拠点にいるのでサポートが手厚いのが分かります…!

開発について

  • CI>Jenkins,SwiftLint,ktlint(for Kotiln) etc...

開発言語>[iOS]Object-C(50%),Swift(50%) [Android]Java(70%),Kotiln(30%)

 上記の比率を見てみると分かる通り、ほとんどがSwiftで占めていたりKotilnで実装されていて、古いコードについても今後移行するとのことでした。

これから挑戦していきたいこと

大規模なアプリで大人数で開発を行うため、毎日プルリクエストの数がえぐい(150くらい)。
そしてその分だけコンフリクトが発生する。よって誰かが泣く悲しい世界。
→対策として、自動化できるところは自動化したい!
そしてDX(Developer Experience)を良くしたい。

どの企業でも言われているようですが、「DXの向上が開発のモチベーションを決める。開発者が気持ちよく開発が出来ないと、ユーザーへいい商品を届けることが出来ないよ!」 と仰っていたのが印象に残りました。

未来について

  • 自動化できるところは自動化していこ。
  • プラットフォームの進化を常にキャッチしていこ。
  • ビルド/リリースしてくれるエンジニアを探そ。
  • コードのリファクタリングもやりたいよね。
  • テストも簡単に簡潔にしたい。
  • UX、DXを良くしていきたいよね。

LINEという大規模な開発を行っている企業は完全に役割を分担して、自分のタスクだけに集中していこうという考えでこれからやっていけるところに注力していきたい感じが伝わりました...w

「なるほどな〜」と思いましたが、如何せんまだまだひよっこエンジニアなのでコストがどのくらいかかかるだとかタスク管理についてはこれから勉強していこうかと思います。 

2.LINE Creators Studioで写真を簡単&きれいに切り抜いてもらいたい話(Speaker:馬見 誠さん)

Agenda

  1. LINE Creators Studioを使うと誰でも簡単にスタンプが作れるよ!
  2. LINE Creators Studioの中身はこんな感じ!

感想 

馬見さんはLINE Creator Studioの開発に携わったAndroid開発エンジニアとしてLINEに勤務されています。

Android開発者なのでJavaerなのかと思いきや、Swiftで開発したりと無神教らしく、また休日の日には専らマラソンに精を出しているとのことでした。

 

LINE Creators Studioの存在を初めて知ったのですが、このアプリの中でやっていることがめちゃくちゃ面白かったです!!

こちらは簡単に説明させていただきますが、個人的に一番興味深かったのは「写真を自動切り抜きする際、機械学習アルゴリズムを使い、その結果自動切り抜きをしてくれる」というのが面白かったです。

Object DetectionやImage Segmentationを使えばよくね?という話になり、イメージの前景領域を抽出する「GrabCut Algorithm」というアルゴリズムを使って自動切り抜きを実現化させたとのことでした。

こいつの仕組みというのは、下記の通り。

  1. ユーザーが選択した範囲から生成して入力し、外側を背景に内側は前景になる。
  2. GMM(混合ガウスモデル)で前景と背景の画素数分布を学習する。
  3. ピクセルの色情報より前景/背景である確率を予測するモデルを作る。
  4. モデルを用いてピクセルをつなぎ、グラフを構築する。
  5. ピクセルをつなぐエッジの重みを計算する。
  6. エッジの重みの総和が最小になるように切断する。
  7. ユーザーに補正のための線を入力してもらい、再び計算する。

こんな感じ。ねっ面白いでしょ!!

他にも、処理速度を向上させるためにJavaを使わずにRenderScriptを使ってピクセル単位の処理を高速に行うためのScriptを使ったり、画質を向上するために元画像とアルゴリズム用の画像を別々に保持したりといろんな工夫がされています。

話を聞いていると、「ああ、この人はものすごくエンジニアだなぁ…」と感じました。

 

3.LINEとLINE Creators Studio iOSアプリのサーバーAPI呼び出しアーキテクチャリファクタリングした話(Speaker:はるふさん)

Agenda

  1. LINE Creators StudioのLINEログイン周りをSDKアップデートのついでに仕組みから単純化してObservableで楽に扱えるようにした話
  2. LINE SHOPパートのLINEスタンプで扱うリソース管理を大規模らしくより切り分けることで整理した話

感想

はるふさん、新卒採用でLINEへ入社したらしいのですがとにかく知識と技術がものすごいです。
そして、めちゃくちゃ分かりやすいまとめ方をされていてスピーチも分かりやすかったです。

今回のAgendaに共通することは、「従来の仕組みを変えてより単純化しよう!」という感じでした。

私は特に「1.LINE Creators StudioのLINEログイン周りをSDKアップデートのついでに仕組みから単純化してObservableで楽に扱えるようにした話」が印象深かったので簡単にご紹介します!

1.LINE Creators StudioのLINEログイン周りをSDKアップデートのついでに仕組みから単純化してObservableで楽に扱えるようにした話

このお話の経緯としては、元々LINEログインでユーザーを管理していたことが背景にあります。

従来の処理としては、ログインでユーザーに対してTokenを与え、Creators Studioへ連携し認証可能としていました。

ユーザーがブロックされていないか、凍結されていないかなどユーザーの状態を常に見る認証機能として「Refresh」も行っておりアクティブ確認などの役割を担っていたのが従来の機能。

そこへ差し掛かってきたのが「LINE SDK v2へアップデートしよっか」の通達。

これにより、クライアント側ではRefreshが取得不可になってしまいました。

これではユーザーの状態を取得することができません…。

 

そこではるふさんが考えたのが、新しい認証でした。

この認証方法は、独自のリフレッシュの仕組みを無くし新しいLINEトークンで再ログインする流れにしようという仕組み。

「おっこれ良さそう」と思いますよね。でも、そう簡単には行きません。

新たな問題として、今までリフレッシュが行っていたアクティブ確認をこちら側で判断する必要が出てきました。それはとても面倒ですね。


はい。そこで、Observableの出番です。

こいつってなんなのかを簡単に説明すると、

  • 非同期処理フレームワーク、ReactiveXの基礎概念
  • onNext,onCompleted,onErrorの三つのイベントを発生させる
  • いろんなイベントをObservable<T>の形で表すことができる

上記の考えの基、設計〜リリースまで行うことでわかったことがリフレッシュのエンドポイントが不要になったため、コスト削減になった。

複雑な状態もObservableで段階的に仮想して、ストレスなく通信ができるようになりEUやエンジニアにとって優しい世界!

まとめ

先日(昨日か)のイベントに参加して、全く自分が知らなかった知識や考え方に触れて非常に勉強になりました!

そして、「こんなことできるんだ!!やってみよ!」という刺激にもなったので私もガシガシ開発を頑張っていきます!!!

 

それと、今日(2月14日)はJavaのイベントなので終わり次第また報告(という名の感想文)ができればなと思います。

それでは、また次回!