Elasticsearch を検索エンジンとして利用する際のポイント

こんにちは、LINE でスタンプ・着せかえショップのバックエンド開発をしている川田 (@hktechno) です。

この記事は、LINE Advent Calendar 2016 の 6 日目の記事です。

今年の4月に、Java も Elasticsearch もまともに知らなかった新卒エンジニアが Elasticsearch クラスタの管理を突然任されて苦労した話をしようと思います。

Elasticsearch とは

Elasticsearch は、Elastic 社が開発している検索・分析エンジンおよびそのストレージを担うソフトウェアです。簡単に言えば、検索に特化したクエリを投げることができるデータベースのようなものです。No-SQL 型の DB といっても良いと思います。

Elasticsearch のすごいところは、大量のドキュメントの中から形態素解析や n-gram など自然言語的な解析を行った上で、素早く検索クエリを処理でき、かつノードを増やすことで簡単にスケールアウトすることができることです。最近では、Elasticsearch は様々なログの収集・分析にも使われるようになっていて、どちらかと言うとログ収集で苦労した話が多いと思います。ちなみに、私の所属しているチームでは、ログ収集・メトリック分析ツールとしても Elasticsearch を利用しています。

Androidで日付表記をお手軽に国際化する

こんにちは、LINEでAndroid clientを開発しているShojiです。何故か一部からはビルド王子と呼ばれています。この記事はLINE Advent Calendar2016の5日目の記事です。

Androidアプリの日付表記の国際化

せっかく頑張ってコードを書いて、テストしたAndroidアプリなら海外含めて沢山の人に使って欲しいですよね?

LINEは海外でも使われているのでUIテキストの翻訳をするのは勿論ですが、アプリの国際化はUIの翻訳に限りません。特にLINEはアプリの性格上日付表示がUI上に多く、このフォーマットを各言語文化にあった形で表示する必要があります。

toLowerCaseの落とし穴とCase Foldingの話

こんにちは。LINEでAndroid Clientを開発しているMasakuniです。

これはLINE Advent Calendar 2016の4日目の記事となります。

LINEのアプリ・サービスは多くの国で使われているため、国際化や多言語化はサービス開発時における重大なテーマの一つです。 今回は、その中でも「大文字・小文字変換」について話をします。

Javaにおける String#toLowerCase() / toUpperCase() の挙動

まずは一つ、問題を出してみましょう。

Q. 以下のJavaテストコードは常にpassすることが保証されているでしょうか?

assertEquals("i", "I".toLowerCase()); 

A. No.

一見単純なテストコードですが、これはJavaの実行環境によっては失敗することがあります。何故かと言うと、 "I".toLowerCase()"I".toLowerCase(Locale.getDefault()) と等価であり、実行環境のデフォルトロケールによって動作が変わるからです。

LINEのエンジニアリングを支える社内ツール

p>この記事は LINE Advent Calendar2016 の 3 日目の記事です。

はじめに

はじめまして、LINEの@huydxです。現在「Engineering Efficiency」というかっこいい名前のチームに配属されています。日常の仕事では、社内のモニタリングミドルウェア、自動化ツールの開発などにおいて、主にバックエンド側を担当しています。エンジニアリングで組織全体の生産性と幸せを向上することです。この記事では、チームの取り組み、そして個人的な気づきなどを紹介させていただきます。

背景

現在私が所属している部署はLINEメッセージのバックエンド側を担当しています。システムの規模が大きくなるとともに、組織全体も大きくなる一方です。ソフトウェアのスケールはもちろん難しいですが、組織のスケールも簡単なことではありません。

もちろん、体制、マネージメントなどで頑張って、組織を小さく分割するなどの方向で進むところもあります。ですが、LINEメッセージプラットフォームの特徴として、モノリシックな「Talk-server」という巨大なJavaアプリが中心に存在し、たくさんの開発者がそこに毎日コントリビュートしています。そこで、効率良く安全にLINEメッセージ基盤を提供するためどうしてもマネージメントだけでは無理なところがあって、そこでちゃんとエンジニアリングで解決できるものを解決し、エンジニアたちが安心して効率よくパフォーマンスを出るようにするのが私のチームのミッションのひとつです。

git で reviewer を探すスクリプトを作りました

こんにちは、LINE の Android Client を開発している munetoshi です。

この記事は LINE Advent Calendar2016 の 2 日目の記事です。

レビュアーを探すスクリプトを作りました

皆さん、元気にコードレビューをしていますか?レビューはしっかり行いたいものですが、適したレビュアーを見つけるのって面倒ですよね。 特にチームの人数が多い場合、私みたいな引きこもり系エンジニアには、誰が何を担当しているのかを完全に把握するのは難しいです。その割に、私は広く浅くコードに触れることも多いので、”これって誰にレビューしてもらえばいいのかなー” と途方に暮れることもあります。弊社ではコード管理に git/GitHub を使っているので、git history や blame を見ればいいのでしょうけれど、プルリクエストを作るたびにその作業をするのは骨が折れます。

そこで、 git history をたどってレビュアーに適した人を探し出すスクリプト”suggest_reviewer” を作ることにしました。

で、どうやってレビュアーを探すのさ

基本的には、git history を使ってレビュアー探すのですが、このとき以下の条件を満たすようにします。

  1. 変更されたファイルに詳しい人が、レビュアーとして選出される。
  2. 変更されたすべてのファイルで、レビュアーの誰かがレビューできる。
  3. 無駄にレビュアーを増やさない。

LINE Advent Calendar 2016のお知らせ

こんにちは、LINEで技術関連のPRを担当している三木です。エンジニアの活動をサポートする仕組みや、イベントの企画などを担当しています。

さて、タイトルの通り、LINE Engineers’ BlogにてAdvent Calendarを実施することになりましたのでお知らせします。Advent Calendarの実施は、本ブログ開設以来、初めてとなります。

本ブログでは通常、LINEのサービスに関する技術記事を関連部門のエンジニアが執筆していますが、Advent Calendarは一種の「お祭り」ということもあり、今回テーマには特に制約を設けず、自身の関心が高い技術領域について思う存分書いてください、という要件で執筆者を募集しました。結果、16名のエンジニアが手を挙げてくれました。

平日枠のみの公開となりますが(最終公開日:12/22)、初年度の開催ということでご容赦いただければ幸いです。なお、本ブログでは基本的には記事を日本語・韓国語・英語で公開しておりますが、Advent Calendarの記事は日本語版のみの公開となりますことをご了承ください。

読者の方へのプレゼントについて

Advent Calendarはクリスマスシーズンのお楽しみイベントでもありますので、本ブログをご覧頂いている皆様にも、ささやかなプレゼントをご用意しました。

LINE NotifyにSticker送信機能と画像アップロード機能が追加されました

こんにちは。LINE Notifyの開発をしている長谷部です。

先日のblogで、コマンドラインからLINE Notifyを利用してLINEにメッセージを送信する方法についてご紹介しました。この度、LINE NotifyのAPIに画像アップロード機能とsticker送信機能が追加されましたのでご紹介します。

Sticker送信機能

先日のblogで、Jenkinsのビルド結果をLINE Notifyで通知する例を紹介しました。 そのときに、失敗時にムーンが小馬鹿にしてくる画像を送信したわけですが、ブログを書いているときに我々は気づいてしまったのです。

「…Sticker、送れるようにすれば良いのでは?」、と。

Stickerが送れると、LINEらしさもあって良さそうです。というわけで、Sticker送信機能を追加しました。

コマンドラインからStickerを送信する

curlコマンドを利用してstickerを送信してみます。

$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer
YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113'

LINE Ad SDKを利用したテスト自動化

この記事では、LINEプラットフォームで提供している広告クライアントモジュールをテストした方法をご紹介します。LINEの広告クライアントモジュールは、モバイルとWebで使用できますが、ここではモバイルクライアントのテスト方法だけを説明したいと思います。

LINE Ads Platformの概要

LINE Ads Platformは、下図のようにシンプルな構造になっています。サーバとクライアント間の通信には多様なプロトコルが使用できますが、今回のテストはHTTPプロトコルを対象にしています。

アジャイル開発手法を活用したLINE TODAYサービス

はじめに

今回の記事では、アジャイル開発手法を使ってLINE TODAYサービスを開発した経緯をご紹介します。LINE TODAYは、2016年初めに台湾、タイ、インドネシア、ミャンマー、米国でリリースしたモバイルニュースサービスで、2016年7月30日現在1日3千万ページビュー(Page View:PV)を記録しています。ちなみに、日本では独自のニュースサービスとしてLINE NEWSを展開しています。

GitHub Universeに登壇しました

こんにちは、LINEでiOSエンジニアを担当しているInami (@inamiy) です。

GitHub Universe 2016イベントの紹介

先日、2016年9月13日〜15日の3日間、「GitHub Universe 2016」というイベントが、アメリカ・サンフランシスコのPier 70にて開催されました。
海辺のガレージを改築した会場に、総勢1500人の開発者、テックリード、ビジネスリーダーらが来場し、GitHub社・共同創業者でCEOのChris Wanstrath氏による基調講演をはじめ、世界各国から招待された約40名のスピーカーによる様々なオープンソースプロジェクト・企業の取り組みが紹介されました。

私は今回、日本から唯一のスピーカーとして、パネルディスカッションに登壇させていただきました。

以下、数枚の写真でイベント現場の雰囲気をお伝えいたします。

Pier 70にあるウェアハウス(倉庫)の会場と屋上から見下ろすOctocatです。