swampの忘備録

エンジニアが、情報系のイベント行ったときとかプログラミングなどの情報工学について忘備録として書くつもりです。

LINE DEVELOPER DAY 2019に参加してきた

2019年11月20日と21日にかけて、LINE DEVELOPER DAY 2019に参加してきました。

様々な魅力的なセッション、展示、ハンズオンがありとても楽しかったです。
このブログでは、私が聞いたセッションの内容や感想を中心にまとめてみました。

f:id:swamptk:20191216131042j:plain

行くことになった経緯

イベントがあることは知っていたけど、遠方でお金が足りない...と思っていた矢先、
なんとLINEさんが学生向けに交通費を出していただけるという企画があることを知り応募しました。

LINE DEVELOPER DAY 2019 学生向け参加支援制度のお知らせ - LINE ENGINEERING

少し作文をして、晴れて交通費支援の対象になりました。
LINEさん本当にありがとうございました。地方の学生には大助かりです。

会場の雰囲気

電車の都合上12時頃に到着しました。
会場もホテルのワンホールを貸し切っており、とても広い、そして人が多い。
オブジェ?看板?もスマホを使ってデザインしてあり、すごいと感じました。
しかも各セッションには、翻訳もついています。
英語のセッションも分かりやすくなりますし、外国の方にとっても助かります。
外国の方も多い印象でした。
さすが、天下のLINE様だと感じました。

深層学習と脳科学

超有名なあの甘利先生が講演されていました。
超満員で僕が行ったころには座る席はありませんでした。
深層学習の基礎的なお話からされていて非常に興味深かったです。
私が特に興味深いと感じたのは、「Libetの実験」のお話でした。
ベンジャミン・リベット - Wikipedia
詳しくはWikipediaを見てほしいのですが、簡単に言えば、
回っている時計の針を好きな場所で止めてくださいと言ったとき、7で止めたとき
自分自身では、4ぐらいのときに「7で止めよう」と意識したと言うが、
実際に脳波を調べてみるともう2ぐらいには7で止めると決めていたという実験です。
(うろ覚えなので正確ではないと思います。ごめんなさい)
すなわち、脳内では無意識に先に答えを出し、その後意識するということです。
では、別に意識しないでいいじゃないかとも思います。
しかし、この「意識」の良いところは、
「ほんとに7で止めていいの?いややっぱり止めよう」と再度よく考えることができる点です。
無意識のうちに脳でした決定を意識し、その決定を再度吟味することができるのです。
このように人間は、いわば考えることが2重構造のような作りになっているのです。
しかし、現在、深層学習では人間のような高尚な2重構造は持っていないということでした。
やっぱり人間に追いつくのにはまだ時間がかかるのかなあと感じました。
また、色々な人がtweetしていらっしゃいましたが、
極小解と大域解が一般的にあると言われているが、パラメータを超増やせばそう変わらないよねという話も非常に興味深かったです。

セキュアなLINE バックアップを活用したシームレスな端末移行

speakerdeck.com

LINEを端末間移行する場合にどうセキュアにバックアップを活用して移行するかというお話でした。
その1つとしてLINE Letter Sealingも挙げられていました。
どのように端末移行やメッセージ保護をしているのかを詳しく知ることができました。
印象に残ったこととして、
UXとセキュリティのバランスをとるのは難しいのでどこを妥協点にするか見極めることが重要であるとおっしゃっていた点です。
これまで、セキュリティを勉強していく中で、あまりUXを意識したことはありませんでした。
しかし、いくらセキュリティを強固にしたところで使いにくいUXになっていれば使ってくれません。
そのあたりのことも考慮にいれつつ今後セキュリティを学んでいきたいと感じました。

The Art of Smart Channel

speakerdeck.com

Smart Channelと呼ばれるLINEのトーク画面上部に記載されるおすすめニュースや商品を紹介されるレコメンドシステムについての仕組みについてのお話でした。
Smart Channelが導入される前、個々のサービスのレコメンデーションシステムはあったそうですが、複数のサービスを横断するレコメンデーションシステムはなかったそうです。
アーキテクチャも複雑で難しく私にはよく理解できませんでしたが、機械学習などを駆使し工夫されていることが分かりました。
どの広告を表示するか選ぶのに、Banditアルゴリズムを使用しているというのは驚きました。
Banditアルゴリズムは、もともとスロットマシンの最適解を探すアルゴリズムです。
名前は知っていたけど仕組みは全然知らなかったのでこれを機にしっかり学習したいなと思いました。
A/Bテストよりすごい?バンディットアルゴリズムとは一体何者か - Qiita

Custody / KYC / AML regulations on crypto world

speakerdeck.com

超簡単にまとめれば、新しく「LINE Blockchain Platform」を作るよ!というお話でした。

まず、規制とテクノロジーの関係についてUberAirbnbを例に説明してくださいました。
それぞれ技術が法律に追いついていないことで、便利に使えていない面があります。
ブロックチェーンなどの新しい技術が生まれ、そこで新しいビジネスがうまれます。
そして、ビジネスの中で何らかの規制がうまれてくる。
New Tech → New Business → New Regulationという流れができているのです。
近年の仮想通貨業界を見ていて、まさにこの流れだなあと感じました。
テクノロジーは規制を生むという側面もあるが、
規制とエンジニアリングを上手く組み合わせることでイノベーションも生まれてきます。
LINEさんはそれを仮想通貨の世界で行おうとしています。
仮想通貨は、ハッキングやマネーロンダリングなどで規制が強化されてきました。
規制が強化されたことで、仮想通貨を使いたくても対応できないところも増えてきました。
だから、LINEがそのプラットフォームを作って多くの人に簡単に仮想通貨を使ってもらいたい。
仮想通貨でイノベーションを起こしてほしいとのことでした。

私自身LINE Blockchain Platformにはとても未来を感じました。
もっと多くの人が気軽に仮想通貨に触れることができ、色々なプロダクトに仮想通貨を導入することができるのではないかと思いました。
規制とエンジニアリングを上手く掛け合わせて、新たなイノベーションを生んだいい例だと感じました。

しかし、講演者もおっしゃっていましたが、
確かに規制は絶対悪ではなく、むしろ必要だとは思いますが、
あまりにも厳しい規制はブロックチェーンや仮想通貨の可能性を閉ざしてしまうのではないかと感じました。

XXE、SSRF、安全でないデシリアライゼーション入門

www.slideshare.net

徳丸本で有名な徳丸さんがご講演されました。生でお話を聞けるなんて興奮しました。
最初のほうが聞けなかったことが悔やまれます。
XXEやSSRF、デシアライゼーションについてのお話を実演も交えながら、丁寧にお話してくださいました。
初めて聞いた攻撃でしたが、何となくは理解できたと思います。
SSRF攻撃は、攻撃者からは直接アクセスすることはできないけど、公開サーバを介すことで攻撃を可能とする攻撃です。
blog.tokumaru.org
安全でないデシアライゼーションとは、
クッキー等からシリアライズデータを送り込み、任意のオブジェクトをメモリ内に生成し、オブジェクトが破棄されるタイミングでですとクラスタが実行され、オブジェクトを巧妙に組み合わせることにより攻撃を実行できるというものです。
blog.tokumaru.org
それぞれの対策や実例等も理解でき、満足度がとても高かったです。
不明な点は、徳丸先生のブログ等を見ながら復習していきたいです。
徳丸本もいい加減読み進めなければと思う今日この頃です。
余談ですが、案内された席に座ったら、偶然隣が知り合いで世間は狭いなと感じました。

Backend Architecture Design for Analyzing and Processing Massive Blockchain Traffic

speakerdeck.com

ブロックチェーンの基本的なデータ構造から解説していただきました。
ハッシュチェーン、ブロックチェーントランザクションの話を図を交えながら分かりやすく解説していました。
最近あまりブロックチェーンに触れておらず、忘れかけていたので良い復習になりました。
そして、LINEのブロックチェーンであるLINK Chainやその動きを可視化する?LINK Scanの構造について説明を受けました。
私にとっては少し難解であまり理解できませんでしたが、様々な技術的工夫がされていることがよく分かりました。

Opening DAY2

speakerdeck.com
ここから2日目です。
オープニングでは、LINEの紹介や今後注力していくプロダクト、Developerの開発環境などなどについて紹介されました。
ここでは、LIFFについて紹介します。
LIFF(LINE Front-end Framework)とは、LINEが提供するウェブアプリのプラットフォームです。
LINE Front-end Framework
今まで、LIFFがLINE Messaging APIに導入されたことによってLINEの機能を使ったWebアプリが簡単に作れるようになるという利点を持っています。
できることの幅も広がるように感じます。
実際に、LIFFで開発されたプロダクトは世に公開されているようです。
私も機会があれば、是非開発してみたいと考えています。
また、Developerの開発環境についても紹介されていました。
LINEの開発環境は洗練されているものですばらしいと感じました。
特に驚いたことは、世界中どのオフィスに行ってもインテリアや内装などのデザインが似ていて、どのオフィスに出張に行っても同じように仕事ができるといった配慮がされている点です。
インテリアや内装などを専門にするデザイナーさんまでいるとか。
また、オフィスについてすぐ仕事ができるようにWi-Fiなどの設定も世界中どのオフィスでも同じということを聞き驚きました。
(どうやってネットワーク構築してんだろうと思ったり思わなかったり)
そして、LINE Styleと呼ばれる価値基準を設けて、目的を持ち楽しく仕事をしているという様子が伝わりました。
LINE Styleからは学ぶことも多いので私も実践していきたいです。
linecorp.com

つながろういつでも、何とでも。LINE Thingsからはじまるモノと人との新しいコミュニケーション

speakerdeck.com
LINEが進めているLINE Thingsと呼ばれるIoTプラットフォームのお話でした。

LINEのプラットフォームを使用することで、
NO install:LINEアプリをインストールするだけで他のアプリはいらない
NO Signup:LINEに登録しておけばそれでいい
NO credit card:LINE Pay使えばクレジットカードいらない
NO unrechable User いつでも届けたいときに届ける
NO useless Development:ログイン機能など無駄に時間がかかる機能を開発しなくてよい
という5つのNOを実現することができます。
(これはIoTだけでなく他のプロジェクトでも同じ)
他のプラットフォームでIoTを実現しようと思うとYesになってしまうものばかりです。
LINEというプラットフォーム上で簡単で便利にIoTを実現しようというのです。

実際の例として、服の乾き具合が分かるハンガーIoTの構成について解説されました。
実際のコード例なども紹介され、本当に簡単にできるのだなあと関心しました。
先程紹介したLIFFもここで大きな役割を担っています。
他にも実用例がたくさん紹介されました。
特に印象に残ったのは、Neosmart PenとLIFFを使ったプロダクトです。
簡単に言えば、Neosmart Penで書いた文字をLINEで認識して、そのままトークで送信しようというIoTでした。
わざわざ写真で撮影したものをトークに送るという面倒なことをしなくてもいいとなると非常に楽になるなと感じました。
その他にも、可能性を感じるプロダクトがたくさんありました。
私も何かアイデアを探して、LINEでIoTを実現するといったこともしてみたいです。

Flutter for LIVE Commerce

speakerdeck.com
最近またFlutterにはまっているので、今回一番楽しみにしていた講演の1つでした。
実案件でFlutterを使っているお話をお聞きすることができ、非常に興味深かったです。

まず、Flutterとは、Dart言語を書くだけでAndroidiphone両方のアプリができるというクロスプラットフォームツールです。Googleが開発しているオープンソースです。
LINEでFlutterを使ったプロジェクトは、LIVE Commerceと呼ばれるLive streaming ECサービスです。(今後ローンチ予定)
なぜFlutterを使っているのかという理由は3つあります。
① 開発人数が不足している中で開発効率を上げられるから
② UIのライブラリがRichであるから
③ カスタムレンダリングを採用しているから
まとめると、コンパクトなチームでスピードが求められUIをきれいにしたいといったときにFlutterは有効的だということです。

Flutterを使ったことによるBenefitとして大きく3つ挙げられます。
① Single code base
 98%をDartのコードで書くことができるため、Androidiphone用それぞれのコードを記述する必要はありません。1つのコードでアプリを作ることができるのです。
② Fast Development
 FlutterにはHot Reloadと呼ばれる、とてもとても便利な機能があります。Hot Reloadとは、コードの変更内容をファイルを保存するだけで読み込みデバックしてくれる機能のことです。従来20秒程度かかっていた読み込みが1秒程度で終わり開発を効率化させています。
 また、Declarative(宣言的な)コードでUIを組むことができるので非常に分かりやすく早くアプリを作ることができます。
③ Single Client Team
 従来Androidiphone双方のアプリを作るのにそれぞれコードを書かなければなりませんから、2つのチームが存在するということになります。
 例えばAndroidチームが少しここのUIを変えたいということならば、デザイナーだけでなくiphoneチームにも「ここ変えて大丈夫かい?」と聞かなければなりません。
 そんなことを繰り返しているとそれぞれのチームですり合わせを行いそれがどんどん複雑になっていきます。
 しかし、Flutterではアプリ開発チームは1つなのでそのような心配は減ります。

Flutterを導入して運用するまでにもポイントがあります。
まず、開発メンバーだけでなくデザイナーさんやQAさんなどとの意識のすり合わせです。
例えば、デザインはAndroid ,ios は同じデザインにするといったことです。(Shareボタンなどは例外)
Flutterを使うことによって今までと違う部分も出ると考えられるので協力していける環境を作っていくことが大事です。
テクノロジー面についてでも、BLoC(ブロックパターン)を使うとかProvider packageを使うとか様々な工夫をしています。
Flutterではネイティブの動作を全て完全に作ることができるわけではありません。
LIVE Commerceでは、Playerの部分は動画が主要なのでチューニングしたいということからネイティブで作成しています。
Flutterで作れない部分も少しありますが、最悪ネイティブで作るという解決策をとっています。
また、Flutterアプリに簡単にアニメーションを追加できるFlareも使用してUIを作っているとのことでした。

自分自身もFlutterを使って開発していますが、なぜFlutterなのか、Flutterの利点、欠点は?
といったことを実務ベースで理解することができ、非常に有意義な講演でした。

​LINEのデザインシステム:一貫性を損なうことなくLINEのサービスの速度を上げる

speakerdeck.com
LINEのデザインシステムをコンポーネント化を進めていくまでの道のりに関し講演していただきました。

今でこそデザインのコンポーネントがしっかりしていますが、昔は、アイコンが開発者によって統一されていないとか、1つのアプリに500以上の色が出てくるなど問題が非常に多いデザインでした。
デザインが統一化、コンポーネント化されていないことで、繰り返しの多い作業が多いなどの問題もありました。
そのような無駄のあるデザイン開発プロセスの工程を70%削減できるということで改革が進められました。

改革ではでLINEは「LINE Design Principles」と呼ばれるLINEにおけるデザインの原則を定めました。
・We ≠ Users
・Clear Primary Task
・Chat First
・Reliable Design
・Continuous Experience
・Respect for Legacy
の6つです。
この原則を決めることによって、30までカラーバリエーションを抑えることができたり、シンプルでクリアなアイコンを使えるようになりました。
このような改革によって二度手間を大きく削減することができました。
このデザインに関する事項は社内で閲覧できるサイトである「LINE DESIGN SYSTEM」にまとめられて、様々な開発で活用されています。

最近LINEのデザインがよくなっているなと感じていたところだったので、このような努力があったのかと感動しました。
デザインもプロダクトを作っていくうえで非常に重要だと感じます。自分でも勉強してみたいです。

LINE Loginで始めるAuth0の使い方 - 認証基盤をかんたんに構築する方法

speakerdeck.com

顔認証受付の仕組み

speakerdeck.com

感想

2日間で様々な技術についてのお話をお聞きすることができて非常に有意義な時間でした。
LINEの技術カルチャーも分かり非常に楽しそうだなと感じました。
今後LINEの技術も自分のプロダクトに積極的に導入したいと感じました。
今回は貴重な機会をありがとうございました。

f:id:swamptk:20191216131112j:plain