LINE Engineering
Blog

LINE Engineer Insights vol.6「大規模サービスとなった LINE NEWS の開発」

LINE Engineering Blog 2017.08.22

LINE で働くエンジニアに色々と話を聞いていく「LINE Engineer Insights」の第6弾です。当コーナーはインタビュアーに LINE で働くエンジニア @tokuhirom を迎え、エンジニア同士でざっくばらんにお話を伺っていくというものです。今回も、LINE のエンジニアは一体どんな人達なのか、その内面に迫っていきたいと思います。

第6弾は開発3センターサービス開発3室の森藤さんに、日本国内で5900万人の月間アクティブユーザーという大規模サービスとなった LINE NEWS の開発について聞いてきました。


お堅い業界から砕けた雰囲気の LINE へ入社したきっかけ

―― tokuhirom
宜しくお願いします。最初に、現在メインでやってらっしゃる仕事を聞かせていただけますか?

―― 森藤
現在、LINE NEWSは媒体社様向け管理画面が Java で作られていて、一般のユーザーから見える画面のサーバサイドや社内向けの管理画面は Perl で作られています。その中で私は Perl 側を担当しています。

―― tokuhirom
森藤さんは入社されてから長いんですか?

―― 森藤
いえ、まだ2年くらいですね。2015年入社です。

―― tokuhirom
前職は何をされていたんですか?前職でも Perl を書かれていたんでしょうか。

―― 森藤
前職は主にPC向けのパッケージソフトを作っている会社でした。 VC++ とかで、写真から動画を作るようなソフトを作ったりだとか、AWS + Pythonで自社のWebサービスを作ったりとかしていました。そのさらに前は SIer で VB.NET で業務システムの開発を行っていました。今までは比較的お堅い会社にいたと思います。
Perl は業務では全然書いたことなかったですね。

―― tokuhirom
堅いところから急に砕けたところに来られたんですね。

―― 森藤
昔はスーツを着て出社してました。

―― tokuhirom
いつも襟付きのシャツを着ていらっしゃるし、うちの中では今でもフォーマルな服装ですよね。どうして LINE に入ろうと思われたのですか?
※編集部注:LINEのエンジニアはTシャツにジーンズまたは半ズボンというスタイルの方が多い印象です

―― 森藤
2014年に行われた LINE のデベロッパー向けカンファレンスに参加して、大規模なサービスをやっている事とどのように運用して開発しているのかに興味を持ったのがきっかけですね。

―― tokuhirom
2014年だと渋谷のヒカリエオフィスにあるカフェでやったやつですね。

Python が書ければ Perl も書けるよね でアサインされる?

―― tokuhirom
これまで C++ とか書いてきたなかで、2年前の入社時点で Java の案件もあったと思うんですけど、なんで Perl の方に行こうと思われたんですか?

―― 森藤
アサインされた時点で Perl だった、からですね(笑) たぶん今まで Python を書いてきたので「LL書けるなら Perl も書けるだろ」っていう上司のノリで。

―― tokuhirom
Python 書けるだろうから Perl 書けるやろー、で実際どうでしたか? いきなり Perl 書けましたか?

―― 森藤
そうですね。ただ、かなりシンタックスの自由度が高いので最初は戸惑いました。Python はすごい strict な syntax の言語なんで。

―― 編集
CPAN Author の tokuhirom として何か言いたいこととかないですか。

―― tokuhirom
いや、うーん別にないですけど(笑) 普通に作っていれば僕のモジュールは自然と使わされる羽目になるんで… Perl で Webアプリ作っていれば僕のコードは何かしら入りますよ。あらゆるモジュールにパッチ送ってるんで。

―― 森藤
LINE に入って思ったことは Perl をやっていて、OSS モジュールのコミットログに社内の人が結構いるので驚きました。

―― tokuhirom
そうですね、結構 Perl のモジュールを書いてる人が社内にいますからね。

大規模サービスと関わる

―― tokuhirom
大規模なサービスに興味を持って入社されたとのことですが、今は大規模なサービスをさわれていますか?

―― 森藤
そうですね、 現在担当している LINE NEWS は大規模と言っていいと思います。規模感としては日本国内で5900万人の月間アクティブユーザーがいるくらいです。

―― tokuhirom
ずっとLINE NEWSを担当されているんでしょうか。

―― 森藤
いえ、入社してすぐの頃は LINE MALLを担当していて、そこで Perl を書いてました。その後にLINE@ のコマース機能を担当しました。どちらもすでに提供終了しているサービスなんですけど。そのあと LINE BLOG を担当して、現在の LINE NEWS は担当して1年くらいです。

―― tokuhirom
最近 LINE NEWS は注目度が高くて、LINEアプリに「ニュース」というタブが追加されましたよね。
※編集部注: LINE NEWSのCM動画( https://youtu.be/qLTLYR4IcJc )より

―― 森藤
そうですね、そこで一気に認知度が高くなって利用者数も増えたと思います。7月に新機能のリリースがあったんですが、直近ではその新機能を担当していました。

スピード感あふれる LINE NEWS の開発

―― tokuhirom
新機能はどういうものですか?

―― 森藤
今まで、ニュースタブを表示した時のファーストビューはあまり柔軟性が高くなくて、目玉になるトピックの追加や順番を簡単に入れ替えられなかったのですがそれを柔軟に変更できるようにしました。
もう1つは「オープンキャスト」というアカウントメディアの専用枠を作りました。これまでは LINE NEWS の運営側が設定した記事がずらっと並んでいたんですけど、各媒体社様のピックアップした記事が直接出るようになったというものですね。

―― tokuhirom
その部分は各媒体社ごとに設定ができるんですね。

―― 森藤
そうです。それを LINE NEWS のトップで出すようにしました。
アカウントメディア専用枠
―― tokuhirom
アカウントメディアとはなんですか?

―― 森藤
正式には LINEアカウントメディア プラットフォームという名称なんですが、LINE NEWS 上で各媒体社がそれぞれ1つのアカウントメディアとして存在していて記事を出せるプラットフォームの総称です。参画メディアは自社の「LINE」アカウントを開設し、各社独自の視点で厳選したニュース記事を当該公式アカウントをフォローしているユーザーに対してプッシュ配信することが可能です。2017年6月時点でアカウントメディアが200以上、LINE NEWSで読めるメディアの数が600以上です。

―― tokuhirom
おお、200以上というのはすごいですね。森藤さん自身はこの会社に入ってからはずっと Perl だけ書かれているんですか?

―― 森藤
入社直後だけLINE@ のコマース機能はJava で、かつ AngularJS でフロントまで書いてました。



―― tokuhirom
LINE NEWS はスピード感あふれるプロジェクトというイメージがありますが実際どうですか?

―― 森藤
かなりスピード感ありますね。LINE NEWS アプリのリニューアルが公開予定の1ヶ月前くらいに私のところに降りてきて、公開日はほぼ決まっている状態だったのでかなり急がないといけないスケジュール感でした。1日で設計して、その翌日に企画チームに説明し、その後企画チームと担当役員のOKをもらい、そのまま発進というタイトなスケジュールでした。

編集者が使いやすい CMS をどう作るか

―― tokuhirom
リニューアルで入稿形式なんかも変わってくると思いますが、CMSも含めてリニューアルしたんでしょうか?

―― 森藤
はい、そうです。そして CMS の方が工数はかかりますね。フロント側の API は CMS で登録された情報を加工して返すだけなので、サーバサイドの作業としては CMS が6〜7割で、残りがAPIというイメージです。
ニュースという即時性が重要なものを扱っているので、編集担当者が使いにくい CMS だと更新の頻度も上げられなくなってしまいます。そのため、CMS の使いやすさも重要視されています。今回、設計の説明をする時なども編集のチームリーダーに参加していただきました。

―― tokuhirom
では編集側からのフィードバックを受けて CMS の構成や使い勝手を変えたりもしているんですか?

―― 森藤
そうですね。

―― tokuhirom
CMS は JavaScript もゴリゴリ書いて作っているんですか?

―― 森藤
はい、ゴリゴリです。Bootstrap と jQuery を使ってゴリゴリのかんじで(笑)

―― tokuhirom
けっこう動的に動いたりするんですか?

―― 森藤
そうですね。

―― tokuhirom
SPA という感じではないけれど、そこそこ動くという感じですかね。

―― 森藤
はい、そういうかんじです。

Perl で書かれている LINE NEWS の開発体制

―― tokuhirom
LINE NEWS の開発をしていて困っている事などありますか?

―― 森藤
LINE NEWS チームに入りたての頃は CI とか開発のフローがまだちゃんと回ってなくて、Perl のエンジニアが3人しかいないというのもあって属人的になっていました。そこを CI を回すようにして、コードレビューもするようにしていったりと徐々に体制を変えていったので「困っていたのを改善して最近は楽になりました」という状態です。今は必ず2人以上の approve がないと Pull Request をマージしないように運用しています。

―― tokuhirom
開発エンジニアの人数は増えているんですか?

―― 森藤
今はアルバイト含めて Perl は5人です。

―― tokuhirom
え、アルバイトで Perl 書いてる人いるんですか

―― 森藤
はい、来年の新卒入社の内定者なんですけど。あとは Java 側は4人ですね。

―― tokuhirom
結構な大所帯ですね。 Java 側とPerl 側で雰囲気は違ったりしますか?

―― 森藤
違いますね。Java 側は媒体社様が絡んでくるので簡単に仕様変更が出来ません。仕様変更するとなると各媒体の皆さんに連絡して理解をしてもらってから作業を開始するので、Perl ほどカジュアルではないですね。


LINE NEWS のシステム構成

―― tokuhirom
Perl 側はエンジニアの判断で仕様変更ができるんですか?

―― 森藤
そうですね。言語がどうというよりは、使う人が違うから雰囲気が違ってくるという感じですね。

―― tokuhirom
Perl 側と Java 側でデータのやり取りはどのようにしているんですか?

―― 森藤
データのやり取りはデーターベース経由ですね。インターナルの API でやっている部分もあるんですけど、同じデータベースを共通でみています。

―― tokuhirom
データベースを共通でみていて事故ったりはしないですか?

―― 森藤
今のところないです。ただ、本来はマイクロサービス的な感じで API でやり取りするのが一番安全なのですが。

―― tokuhirom
マイクロサービスにするのは工数がかかるので難しい部分がありますよね。Java 側はCMSなので、Java 側の人がデータベースの仕様をちゃんと見てやっていれば問題ないですね。Perl のフレームワークは何を使っているんですか?

―― 森藤
Amon2 を使っています。

―― tokuhirom
あ、なるほど。聞いたことありますね。
※編集部注:Perl製のWebアプリケーションフレームワーク Amon2 はインタビュアーであるtokuhirom の作です Amon2 - search.cpan.org

テンプレートエンジンは何を使っているんですか?

―― 森藤
Xslate ですね。

―― tokuhirom
O/Rマッパーは何を使っているんですか?

―― 森藤
nipotanさんが作った独自のものを使っています。
※編集部注:nipotanは立ち上げから現在まで LINE NEWS に関わっている Perl Hacker

―― tokuhirom
なるほど、名前とかあるんですか?

―― 森藤
特にないです、Data/Base.pm の中に書いてあります(笑)

―― tokuhirom
Perl だからやりやすい・やりにくい点というのはありますか?

―― 森藤
私自身は言語的には難しいとかそういった事はなかったですね。Perl はLINEに入るまでほとんど書いたことがなかったんですけど、コードレビューや既存のコードを見ながら書いていくうちに書けるようになってきました。
言語以外の部分ではニュースのリポジトリがローカルの Mac でそのまま動かなくて Docker で開発環境を作ったりしています。

―― tokuhirom
メンバー全員 Docker で動かしているんですか?

―― 森藤
いえ、既存のnipotanさんは開発用のサーバをたてて環境を作って開発してたりします。私はローカルで使えるなら使いたい、と思って「どうやって動かそうか」と考えて Docker を使って開発環境を整えました。最近ジョインしたメンバーとかUITのメンバーはその Docker を使って開発してるみたいです。


大規模なサービスを支えるサーバ台数とDBAの存在

―― tokuhirom
サーバの台数はどれくらいなんですか?相当ありそうですが。

―― 森藤
サーバ台数はどのくらいだったかな… ほとんどCDNがキャッシュしてくれているので、LINEアプリにニュースタブを追加した時にサーバを増強したりもしませんでした。秒間でMAX 1万5千アクセスくらいあって、サーバが全部で40台ぐらいです。

―― tokuhirom
作っていく上で、サーバ側のパフォーマンスとかで困ったりは全然してないですか?

―― 森藤
いや、インデックスが効いていないクエリとか、メモリを使いすぎる処理をやるとすぐにパンクしますね。それでレスポンスが詰まって障害が起きたりすることが何回かありました。なので、今はコードレビューでインデックスがちゃんと使われてるとか見るようにしていますね。

―― tokuhirom
社内でサーバまわりを担当している部署に依頼すれば DBA(DataBase Architect) にクエリのチェック依頼を出せると思いますけど、そういうのは使っていないですか?

―― 森藤
あまり使っていないですね。逆に DBA から「このクエリ遅いので改善してください」とか来るときはあります。以前、クエリの実行計画が変になって突然インデックスが使われなくなってしまった時があり、DBA からの助言で FORCE INDEX 使うように対応したりしました。

―― tokuhirom
実際打っているクエリもかなり複雑なものが多くなっているんですか?

―― 森藤
いえ、なるべくシンプルにして memcached に乗せるようにしています。join を使ってるところはそんなにないです。

―― tokuhirom
それで FORCE INDEX が必要になっちゃうんですか?

―― 森藤
ユーザーごとにおすすめ記事を出しているんですけど、ユーザーのセグメントを元に大量の記事レコメンドリストを持っているので、どっちかというとクエリというよりはレコード数の問題です。

―― tokuhirom
ニュースとかだと日々更新されるデータがたくさん入っているということですね。データベースはどのようなものを何台くらい使っているんですか?

―― 森藤
データベースは MySQL ですね。Master と Slave 合わせて数台という規模感です。

―― tokuhirom
そこまでストレージ自体が大きいというわけではないんですね。

入ってみて感じた、意外と分業が進んでいる開発現場

―― tokuhirom
最近なにか困っていることはありますか?

―― 森藤
困っているのは、そうですね…。 企画からあがってくる「締め切りだけ決まってる案件」が(笑) やっぱり広告が絡んでくるので、売り上げに直結するものが多くて。

―― tokuhirom
それはだいぶ困ってますね。とはいえ、そのプレッシャーをかけてるのはうちのチームかもしれないのであまり笑えないですが…
※編集部注:tokuhirom は現在、アドテク関連開発の部署のリードエンジニアをしています。

―― tokuhirom
LINEの開発体制って、いわゆる堅いところからくると良いところと悪いところあると思いますが入ってみてどうでしたか?

―― 森藤
そうですね、意外と分業が進んでいるなという感じがありますね。データベースまわりでいえば DBA がいたりとか、品質管理だとQAチームがちゃんとやっているとか。自分で本番サーバのセットアップとかそもそもの準備とか調達とかしなくていいのは楽ですね。構成もある程度やってくれますし。

―― tokuhirom
基本的にはデータの容量とかリクエストの頻度を言えば DBA がキャパシティを決めてくれますし「容量が残り厳しくなってきた」とか「パフォーマンスが落ちてきた」という状況になったら DBA 側でマイグレーションしましょうと話を進めてくれますしね。

―― 森藤
そうですね。分業が進むと、エンジニアはサーバサイドの開発に集中できるので。

Go版 Messaging API SDK 公開の裏話

―― tokuhirom
普段は社外で GitHub にコードあげたり、外向けにプレゼンすることはありますか?

―― 森藤
あまり無いですが Messaging API の SDK を Go で書いたりしましたね

―― tokuhirom
おお、そうでしたね。 普段から Go を書いているんですか?

―― 森藤
そうですね。個人的に使うツールは Python か Go で書いたりしますね。

―― tokuhirom
Go の SDK を作ることになった時、誰に書いてもらおうかと考えた時に当時わたしの席の隣にsugyanさんが座っていて「SDK作ってみない?」と声をかけて作ってもらうことになったところに「森藤さんに手伝ってもらったら?」と名前が挙がって、いう流れだった気がします。

―― 森藤
たしか、公式の SDK が出る前に非公式のものを Github に私があげていたんですよね。それを誰かが見つけたのだと思います。

―― tokuhirom
なるほど。それで Go のデベロッパーの一人としてやっているのですね。LINEは「SDK作るぞー!」となった時に手伝うよーと手を挙げてくれる人が結構いて、いい雰囲気だなと最近思います。社内も段々と、色々なバックグラウンドを持ったエンジニアが増えてきているので「こういうのをやりたい」となった時に、業務だと Go を使ってないけどプライベートで書いている人が結構多くて助かりますね。

ポータル化での新たな挑戦

―― tokuhirom
ニュースやってて楽しいですか?

―― 森藤
技術的にそんなに新しいことをやっているわけではないんですけど、スピード感があってエキサイティングですね。

―― tokuhirom
社内での期待感と、新しいことをやらなければというプレッシャーが凄そうですね。これからLINEアプリがポータル化したりするんですよね。

―― 森藤
そうですね、トップをリニューアルしたばかりなのにまたリニューアルという感じです。

―― tokuhirom
ポータル化はニュースチームがやるんですか?ニュース以外に何が載ってくるんでしょう。

―― 森藤
ニュース以外だと天気や占いや乗り換え情報などユーザーごとにカスタマイズされた画面になります。現在リリースに向けて開発中です。

―― tokuhirom
いつものように締め切りは決まってるんですね

―― 森藤
そうです(笑)

―― tokuhirom
今、LINEアプリのニュースタブを見ていますが、これ無限にスクロール出来ていいですね。

7月にリニューアルされた ニュースタブ内の画面
―― 森藤
無限ではないですが、長くなりました。まさに最近ここをリニューアルしました。

―― tokuhirom
横にスワイプするのはめんどくさいなーと思ってましたけど、下へのスクロールは見ちゃいますね。横にスワイプするとモアタブに行っちゃうじゃないですか。

―― 森藤
Androidはそうですね。

―― tokuhirom
これ、すごくいいリニューアルですね。上のランキングのところは唯一ネイティブ広告のような形で出ているので、個人的には好感度高いです。

―― 森藤
さりげなく入っています。

―― tokuhirom
これまでに比べてわかりやすくなっていていいですよね。

LINE Engineer Insights LINE NEWS Perl Java

LINE Engineering Blog 2017.08.22

Add this entry to Hatena bookmark

リストへ戻る