LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog
sunderls is a front-end engineer
はじめに こんにちは、LINEマンガJavaScript担当の@sunderlsです。 これはLINE Advent Calendar 2017の22日目の記事です。今日は、webpackローダーのgrow-loaderを紹介します。 LINE Engineering Blogの記事「LINEマンガ:Page Stackを使ってサクサクなページ遷移を実現できました」でご紹介しましたが、LINEマンガはWeb技術で実装されています。 Webでネイティブアプリに近いユーザー体験を提供するため、いろいろ工夫しています。今回は、数ある工夫の中からコード分割の実装を紹介したいと思います。 なぜコードを分割するのか LINEマンガでは、JavaScriptのソースコードをもともと1つのファイルにバンドルしていました。しかしサービスが成長するにつれて、ページ数が増え仕様も複雑になり、バンドル後のファイルサイズがどんどん大きくなってきました。将来を考えると1つにバンドルするのはやはり望ましくないと考え、コード分割の実装を始めました。 一般的な実装 最初はreact-loadableのようなHOC(Hi
LINE Engineer
Developer Relations Teamマネージャーの砂金(いさご) @shin135 です。この記事はLINE Advent Calendar 2017の21日目の記事です。 LINEでは12月よりDeveloper Relation Teamを新設し、より一層エンジニアのみなさまとの関係構築に注力して参ります。 LINEとしてエンジニアが積極的に情報発信してゆく雰囲気を応援しようという意図で、Qiitaのアドベントカレンダーに協賛させていただいている流れもあり、今回はQiita上でLINE、特にチャットボット開発に関連した記事をピックアップして、みなさまが後に参照するときに困らないためのまとめ記事として紹介してゆきます。LINE Bot関連情報はWeb上に多くあるものの、まとまった記事を見つけにくいというご意見もいただいており、こちらの投稿を「はてぶ」などで保存版としてご活用いただけると幸いです。ここに掲載させていただいた方々のみならず、LINEが公開しているMessaging APIやLINE Loginを実際に試していただいたすべてのエンジニアのみなさまに、改めて御礼申
こんにちは、LINEメッセンジャーのサーバーサイドとモニタリングプラットフォームの開発を担当しているフィ(@dxhuy)です。この記事はLINE Advent Calendar 2017の20日目の記事です。 今日は、モニタリングシステムでよく使うレイテンシーやその計算方法などについて紹介したいと思います。LINEでは、日々ユーザが楽しくメッセージを送れるように、システムの安定性を第一に考えています。安定したシステムを保つためにたくさんの指標を見守る必要がありますが、その指標の1つが「レイテンシー」です。 ウィキペディアでは、レイテンシーは以下のように定義されています。 デバイスに対してデータ転送などを要求してから、その結果が返送されるまでの不顕性の高い遅延時間のこと インターネットサービスにおいては、レイテンシーは基本的に「レスポンスタイム」のことです。つまり、リクエストを受けてからレスポンスを返すまでにかかる時間がレイテンシーです。 レイテンシーは、以下のようなコードを使ってとても簡単に計算できます。 long startTime = System.nanoTime(); //
フロントエンドエンジニアです。2年前に東京からIターンして福岡に来ました。
この記事はLINE Advent Calendar 2017の19日目の記事です。 JavaScriptの気持ちを知りたい こんにちは、LINE FukuokaのフロントエンドエンジニアのYoneharaです。 そろそろクリスマスですね。フロントエンドエンジニアのみなさん、苦しんでいますか?私は苦しんでいます。2017年も暮れようというのに、いまだにブラウザやJavaScriptの気持ちが分からず、ユーザーに思うような快適なUXが提供できないことがあるからです。 JavaScriptの気持ち。ただ幸いなことに、我々はかなりの程度、それを分析的に知ることができます。GoogleやMozillaが自身のJavaScriptエンジンのコードを公開し、随所でそのアーキテクチャを解説してくれており、また豊富なトレーシング・プロファイリングの手段が用意されているからです。 今回の記事では、みなさんおなじみのChromeに採用されているV8というJavaScriptエンジンの、Hidden Classという最適化のための1つの仕組みをのぞいてみたいと思います。 動的型付け言語の辞書の実装には制約があ
2016年入社。LINE GAME プラットフォームのチームにおいてサーバサイドの開発に従事。
こんにちは。LINEでゲームプラットフォーム開発をしているKagayaです。この記事はLINE Advent Calendar 2017の18日目の記事になります。昨年新卒入社1年目で執筆した「マイクロサービスのためのプロジェクト生成ツールLazybonesを使ってみた」に引き続き、今年もAdvent Calendarの記事を書くことになりました。よろしくお願いします。 はじめに—RedisとLINE GAMEプラットフォーム LINE GAMEプラットフォームでは、インメモリNoSQLデータベースであるRedisをメインデータベースの1つとして利用しています。キャッシュとしての利用が多く、例えば、LINEやFacebookなどのアカウントで認証を行っているユーザのソーシャルデータ(プロフィールや友だちリストなど)のキャッシュに利用しています。基本的にはRedis Clusterとして利用しており、開発環境では共通のクラスタを、本番環境ではゲームごとに独立のクラスタを組んで運用しています。 ちなみに、メインデータベースとしてRedisと併用しているのはHBaseです。多くの
初めまして、Ads Platform開発チームの岡田(@ocadaruma)です。 この記事はLINE Advent Calendar 2017の17日目の記事です。 今回、個人的に以前から気になっていたAkka HTTPの内部構造について、この機会に調べましたので紹介いたします。 Akka HTTPとは Akka HTTPは、Lightbend社によって開発されている、Scala/Java用のHTTP toolkitです。 現在はメンテナンスが終了したsprayの後継と位置付けられており、特徴的なRouting DSLをsprayから受け継いでいます。 また、Play Frameworkは2.6系より、Akka HTTPをデフォルトのバックエンドとして採用しています。 調査のきっかけ Routing DSLを始めとしたAkka HTTPのAPIは、シンプルかつ高いComposability(組み立て可能性。小さく再利用しやすい構成要素を複数組み合わせて使えること)を提供する一方、その抽象度の高さから、低レイヤーでのHTTPリクエストの処理の仕組みまで含めて理解するには、若干のハードル
Bridge Engineering
はじめに こんにちは。LINE ITSC所属のエンジニア、Kim Suhyukです。これはLINE Advent Calendar 2017の16日目の記事です。 先日12月10日に、LINE LIVEサービスがリリースされてからちょうど2年が経ちました。リリース以来障害なく運営できて、とてもよかったと思っています。私はライブメディアサービスの構築や運営の経験がなかったため、今回の記事では、設計や構築を始めるときに悩んだ点についてまとめてみました。 背景および課題 LINE LIVEは、いつでも誰でもライブ配信できるサービスとして、予測を超える数のユーザーが利用したとしても円滑にライブを配信・視聴できる必要があります。そのため、以下の条件を満たす構造が必要と考えました。 1.リソースが足りなくなったときに速やかに拡張できる。 ライブを配信・視聴するユーザーの数を予測できない一方で、全てのリクエストを同時に処理する必要があります。 2.ライブ配信・視聴に対して、同時接続した全てのユーザーに安定的な品質を保証する。 LINE LIVEでは、LINE公式アカウントからもライブを配信でき
Data Labs所属。Data Scientistとして、社内各サービスの分析、改善提案に携わっています。
この記事はLINE Advent Calendar 2017の15日目の記事です。 こんにちは、LINEとLINE Fukuokaでデータサイエンティストをしております、stakaya、horikawa、oshiroです。 12月2日(土)に、Japan.R 2017というイベントが開催されました。弊社はJR新宿ミライナタワーの本社を会場として提供する形で協賛しましたので、当イベントについてご報告します。 Japan.Rとは Japan.Rは、統計解析言語Rのコミュニティ関係者が集まる国内最大のカンファレンスで、日本各地で年に1度開催されます。 Japan.R公式サイトhttp://japanr.net/ 当日の様子 今年の参加者は、募集サイト上では162名にのぼりました。開場早々に机席はほぼ全て埋まってしまい、急きょ椅子席を追加しました。 スペシャルゲストトーク 当日はスペシャルゲストとして上海よりKun Ren氏をお招きしました。「Boosting R Code Performance」と題して、Rのコードのパフォーマンスをいかに上げるかについてご講演いただきました。 Re
こんにちは、AIプラットフォームClova開発チームのezuraです。この記事はLINE Advent Calendar 2017の14日目の記事です。 みなさん、今年のSwiftマイグレーション祭りは無事に終わりましたか。例年よりも穏やかなエラーを味わえたのではないでしょうか。 さて、マイグレーションといえば、みなさんの行ったマイグレーションは「普通の」マイグレーションですか?それとも「スーパー」マイグレーションですか? ここでいう「スーパーマイグレーション」とは、エラー・警告部分を修正するだけでなく、Swiftの改善によって効率的に書けるようになった部分の変更を含めたマイグレーションです。 スーパーマイグレーションの対象箇所はエラー等が出ない部分も含むため、いざマイグレーションを始めると見つけにくいですよね。効率良く移行するには、今のうちから、新しいバージョンに移行しやすいような設計や記述にしておくことや、新規または既存のコードに今後実装される機能によって改善できる部分を見つけたらマークをつけておくなど、下準備が重要です。これはSwift Projectでもよく見られる光景です。
LINEでClovaの開発をしている上村です。これはLINE Advent Calendar 2017の13日目の記事です。今日は文字列の話をします。 はじめに 与えられた文字列によく似たものを大きな文字列集合から探すということは、古典的でありふれていながら奥が深く難しい問題です。文字列の類似度を正確に見積もるには複雑な計算が必要ですが、膨大な量のコーパスが与えられたときも可能な限り高速に応答を返す必要があります。 検索する文字列の性質をよく把握することも、品質のよい類似文字列検索を行うためには極めて大切です。ここで、今回考える問題の例を見てみます。 この例では、1文字ずつ違いを見つけ出したり、単語単位で見たり、文全体が疑問文や否定文であるかどうかを調べ、それらを総合的に見ることで最終的な判断を下しています。文字だけを見た場合、1文字の違いによって全く違う単語になることは見つけられませんし、単語単位で考えても、活用形のわずかな違いで文全体の意味が真逆になってしまうことを知るのは難しいです。かといって疑問文や否定文であるかを大局的に判断するだけでは、文字や単語の細かな違いを見逃してしま