【Team & Project】 LINE Creators Marketの開発をしているチームを紹介します

LINEの開発組織のそれぞれの部門やプロジェクトについて、その役割や体制、技術スタック、今後の課題やロードマップなどを具体的に紹介していく「Team & Project」シリーズ。 今回は、LINE Creators Marketの開発を担当しているLINE Fukuoka株式会社の開発Fチームを紹介します。 

LINE Fukuoka株式会社の開発Fチームの片岡 宏文、劉康民に話を聞きました。 

LINE Creators Marketの開発を担当しているLINE Fukuoka株式会社の開発Fチーム

―― まず、自己紹介をお願いします。 

片岡: LINE Fukuoka株式会社の開発3室のFチームでマネージャーを担当している片岡です。生まれも育ちも福岡市です。 

: 私はFチームでLINE Creators Marketのサーバーサイドの開発を担当しています。出身は台湾の新竹県出身で、福岡に移住して3年になります。

―― みなさんがLINEに入った理由を教えてください。 

片岡:私は昔からLINEやその前身の会社(ライブドア)に所属しているエンジニアが発信する情報をブログなどで参考にしていました。彼らが発信する情報は技術的にとても有益で、発信する内容のレベルやスキルの高さに「いつかは彼らのようなエンジニアと一緒に働きたいと」と考えていました。その後、LINEの子会社が福岡で開発拠点を立ち上げるという話を聞き、迷わずにLINE Fukuoka株式会社に応募しました。  

:私は以前から日本で生活することが夢だったので、エンジニアとして日本で働く為に様々な街で仕事を探していました。旅行で博多を訪れた時、その街の雰囲気や人柄の良さに魅了され、博多に絶対住みたいと強く思ったのがきっかけです(笑) 
その後、LINE Fukuokaのことを知り、これまでの経験やスキルを活かしながら更にレベルを上げることができる環境で働けるということが決め手となりました。

―― LINEで働くやりがいを教えてください。 

片岡:私にとって大きなやりがいの一つは、自分たちが開発したサービスを直接的または間接的に非常に多くのユーザが利用し、会社の成長に大きく貢献している点です。 

私のチームが主に開発を行なっているLINE Creators Marketは、LINEのユーザ自ら制作したスタンプや着せかえ、絵文字などを販売するためのプラットフォームです。今では300万を超えるクリエイターが利用し、2020年9月時点で1000万を超えるセットが販売されています。このセット数は公式スタンプと比較しても圧倒的に多く、多様なスタンプによるコミュニケーションが可能になります。また、それらのスタンプや着せかえなどでユーザ自身がLINEをより楽しいものに拡張できる点にも魅力を感じています。 

LINEアプリと比較的に近い関係性にある点もやりがいの一つです。 

公式・クリエイターズに関わらず全てのスタンプを販売するサービスとしてLINE STOREやスタンプショップというプロダクトがあり、私たちはそのAPIを利用して開発しています。APIを通じて登録されたスタンプや着せかえは購入されるとLINEアプリにダウンロードされます。LINEアプリではLINE Creators Marketで設定された情報に基づいて、入力したテキストに応じたスタンプがサジェストされます。クリエイターのスタンプがどれくらい送受信されたかは私たちのサービスで確認することができます。また、LINE STOREやスタンプショップ、それらに関係するLINEのクライアントサイドの開発は福岡と東京で行われており、彼らとのコミュニケーションを密にとったり、実装されている内容を確認することなどがあります。過去には双方のチーム間でメンバーの移動もありました。このように私たちが開発しているサービスはLINEアプリと強い関係性があり、他のチームと一緒にLINEの価値を高められていると感じています。 

その他にも「いかにLINEの進化を追随できるか」であったり、「いかに増え続けるデータと向き合いながら大胆な効率化を測るか」といった課題などもあり、退屈しない点も私のやりがいの一つです。 

:私は主にLINE Creators Marketというチームで開発を担当していますが、LINE Bot SDK for Perlのメンテナンスも担当しています。 
LINE Creators Marketは、LINEアプリをより一般ユーザに利用してもらうための価値を提供するサービスです。他のシステムに比べれば小さなサービスかもしれませんが、このサービスがなければ、ユーザは新しいスタンプや着せかえ、絵文字を販売することが出来ないので、非常に重要な役割を担っています。 
また、クリエイターが作ったスタンプなどをスムーズに販売できるように開発を進める必要もありますし、季節ごとのキャンペーンなど事業側のニーズに合わせた素早い対応も必要になります。 
このようにクリエイターやスタンプを買うユーザー、プロモーションキャンペーンなど様々な方面からのニーズに答えるための改善は挑戦でもあり、やりがいに繋がっています。 

また、本番環境でPerl版Bot SDKを使用しているユーザーが少数派ですが、LINE Bot SDKの作業もとても重要です。一般の方に向けて、常に最新の状態で安定したSDKを提供していくことは私のやりがいの一つです。 

―― チームの構成・役割などについて教えてください。 

片岡:私のチームには、プロジェクト・マネジメント・オフィスとして1名、サーバサイドエンジニアが私を含め4名が在籍しています。それぞれのサーバサイドエンジニアの役割に違いはなく、新機能の開発からシステムの改善、運用に必要なタスク、トラブルシューティングなどを行なっています。 
また、チーム外からフロントエンドエンジニアが2名、E2Eテスト担当1名、スタンプの審査を行うツールの改善を行なっている業務委託のメンバーが2名、参加していて、一緒にデイリーミーティングなどをしています。 
その他にQAおよびテストを行うメンバーも7名ほどプロジェクトに参加しています。新たな機能の仕様をまとめる企画メンバーは東京にいて、ZoomやSlackでコミュニケーションしています。 

―― チームメンバーを紹介してください。 

片岡:劉さんは GitHubやTwitterではgugodという IDでご存知の方も多いと思います。CPANというPerlのライブラリの公開サイトに130近くのライブラリやソフトウェアをアップロードしています。日本人の中でもアップロードは多い方で150くらいなので、彼の登録数は相当多い方だと思います。彼のプロダクトにperlbrewという複数のバージョンのPerlをインストールし簡単に切り替えられるアプリケーションがあり、GitHubのstarは600を超えます。昔は私もこのプロダクトによくお世話になりました。また、彼はアジアやヨーロッパでのカンファレンスでの登壇経験も豊富で、日本のカンファレンスでも登壇しています。現在彼はLINE Creators Marketで他のメンバーと同様に新機能の開発やシステムの改善等を行っていますが、システムのモニタリングやパフォーマンスの改善に関心が強く、システムの足回りへの貢献も大きいです。 

私自身はfukuoka.pmという地域のPerlコミュニティに参加しており、Perl入学式というイベントで講師を担当したり、YAPC Fukuoka 2017 HAKATAの運営に携わった経験があります。最近ではあまり貢献できていませんが、私はLINE Bot SDK for Perl のメンテナの一人でもあります。 

他にも社内のインフラに詳しく他のメンバーからの信頼が厚い堅実な仕事ぶりのメンバーや、入社1年にも関わらずエース級の働きをするメンバーがいて、優秀な方々と一緒に働いていて毎日楽しいです。 

左からFチーム マネージャーの片岡とサーバーサイドの開発担当の劉

―― 利用技術・開発環境について教えてください。 

:LINE Creators Marketで主に使用しているプログラミング言語はPerl、JavaScriptです。このアプリはVerda(社内のプライベートクラウド)上のLinux環境に構築されていて、ユーザー向けのCMSサーバー、LINE Creators StudioアプリのAPIサーバー、ジョブキュー・バッチ処理サーバーなどのクラスタで構成されています。一般的なサーバー操作はAnsibleのplaybookで管理されています。

ロギングにはFluentdを使用し、そのログはKibanaクラスタで可視化しています。また、一般的なモニタリングにはPrometheusを使用しています。社内には、例外をスタックトレースで保存するための Sentryサービスがあり、アプリケーションの何が問題なのかを解決するために利用しています。 

使用している主なPerlモジュールは、すべてのサーバロール(ウェブと非ウェブ)のためのフレームワークであるAmon2、ORMのためのTeng、OOPのためのMouse、サーバサイドのテンプレートのためのText::Xslate、ジョブキューのためのTheSchwartzです。依存関係を管理する方法として、Pintoを使って内部CPANミラーサイトをキュレーションする実験をしています。

ユニットテストを実行するためにDroneCIをセットアップし、e2eテストを実行するためにk8sを利用しています。どちらもDockerをベースにしており、Dockerベースの環境でも実行可能です。テストレポートはPRに投稿され、e2eテストで失敗があった場合はスクリーンショットやエラーログが参照できるようになっています。 

LINE Creators Marketは社内の様々なサブシステムと連携しています。状況によってJSON APIやThrift APIを使い分けています。また、システム全体のメンテナンスのために、必要になった場合には、モジュールの作者にパッチやPRを送るなどして、CPANモジュールの開発をサポートしています。 

現在はPerl 5.18で動作するアプリを実行しており、Perl 5.28以降への移行を準備しています。Perl 5.18とPerl 5.28の両方のバージョンのDroneコンテナを設定して、Perl 5.18とPerl 5.28の両方のテストに合格していることを確認しています。最近、Perl 5.30がリリースされましたので、そちらへのアップグレードパスも検討しています。 

―― 今のチーム課題教えてください。 

片岡:私たちのチームには大きな課題がいくつかあります。 

まず一つ目の課題は、安定したサービス運用のための効率化です。 
現在、データベースの一番大きなテーブルのレコード数は100億レコードを超え、分散ストレージに保存している画像も100億を超えています。これらの大量のデータは利用しているインフラに負荷を与えてしまいます。安定したサービス運用のために、システムのパフォーマンスを維持したままデータベース管理者やストレージ管理者の負担を減らす必要があり、さらなるアプリケーションの効率化が必要と考えています。 

二つ目の課題は、システムの構成やアプリケーションのデプロイの改善です。 
長期間に渡ってサービスを運用しており、使用している社内インフラの変遷に追随できていない部分があります。これらを最新のインフラに統一し複雑性を排除して、トラブルを未然に防げるようにしていかなくてはなりません。 
また、サービスの成長に伴うサーバ増加のため、デプロイにかかる時間も長くなってきています。我々のサービスは毎日のようにリリース作業を行うので、デプロイを効率化し問題発生時のロールバックもより迅速に行えるようにする必要があります。 

そして、新たなメンバーの獲得はもっとも重要な課題です。 
チームの構成について先ほどお話しましたが、サーバサイドのメンバーは私を含め4人です。どのメンバーも能力が高く、少数精鋭のチームです。適切な優先順位づけや取捨選択を行えば現在のメンバーでも十分にサービスを成長させられます。
しかし、いつまでも同じメンバーが私たちのチームに在籍できるとは限りません。また、このような重要なプロジェクトであっても、リラックスして開発に臨める環境を提供し、新しい技術を研究したりそれを実践できるような場所であるべきだと考えています。 
残念ながら今のところはそれが十分にできているとは思っていません。できれば今の倍くらいのメンバーが常に在籍していると、より面白くなるのではないかと考えています。 

:データタイプとデータ量の増加は、私たちプロジェクトの新たな課題です。 
LINE Creators Marketは、LINEのプラットフォームで新しい商品を提供するシステムであり、トラフィック量は他のシステムほど多くはありませんが、Scalabilityの問題に今直面しています。 

ビジネス全体の利益のために私たちは、絵文字、メッセージスタンプ、カスタムスタンプやLINEスタンプ プレミアムなど、より多くの種類を提供し続けています。一方で、それに伴い膨大なデータセットが作成され、ストレージやパイプライン処理において課題となっています。
また、システムの問題に加えて、コードの開発にも注意が必要です。 コードの品質がほぼ「良好」であり、チームの全員が読みやすいものであることを確認するために、お互いのPRでコードレビューを行う必要があり、現在はロボットがコードレビューを行っています。 

―― 課題解決に向けた取り組みについて教えてください。 

片岡:ストレージの課題に関しては、これまでに何度かトラブルに逢い、その都度改善を進めてきました。今年に入って本質的な改善をすることができ、分散ストレージへのアップロードを80%削減できました。同時にDBへのinsertも減らすことができました。 
今後は、不要になったデータのクリンナップや、新たな効果的な削減方法を検討し進めていく予定です。 

サーバの構成やデプロイの改善については、ステージング環境を最新のインフラでプロダクションと同じ構成で再構築し、その過程でいつも安定したプロビジョニングが行えるようブラッシュアップします。 
その後、ステージング環境でデプロイの効率化を行いプロダクション環境に適用するつもりです。これについては開始の時期を見極めて進める予定です。 

新たなメンバーの獲得については、このようなインタビューをはじめ、色んな機会を作って情報発信やアプローチをしていきたいと思っています。新たなメンバーの獲得を困難にしている要因の一つにPerlのエンジニアの採用が難しいことが挙げられます。今後は段階的にシステムを切り出して、Javaなどでリプレイスも進めていく方針です。 

:コードレビューはとても重要ですが、レビューをする人は必ずしも正確にできるわけではなく、ミスを犯してしまうこともあります。コードレビュー自体は、開発者の精神的な負担と、時間のコストが高くなっています。そのため私たちのチームでは、些細なミスを軽減し、開発者のコストを下げるために、ロボットを使ってコードレビューを行っています。このロボットは Perl::Criticによって提供されていますが、チームの習慣に合わせるために幾つかのプラグインを開発しています。commit前にperlcriticを実行するのではなく、CI内で実行し、その結果(違反のリスト)をコメントとしてPRに掲載しています。このようにして、少なくとも一度はチェックが行われるようにしています。 

ビジネスの成長を支えるためには、Shardingも必要になります。 

サーバサイドでの結合は必ずしも実現可能とは限らないし、複数のテーブルの更新は一度のトランザクションではガードできないかもしれないので、データの整合性は保証されないかもしれません。異なるデータを異なるデータベースに格納するだけでなく、開発者がパーティショニングされたデータセットに対応するための考え方を見直す必要もあります。 

―― 最後に、LINE Creators Marketの開発チームに興味を持ってくれた人にメッセージをお願いします。 

片岡:今回紹介させていただいた課題は技術よりのものでしたが、これらはサービスの開発をより加速させ安定した運用を行うためにチャレンジしていることで、最終的なゴールは社会的な貢献や組織の成長だと考えています。LINEのような規模の会社では、分業化が進み限られた範囲での貢献しかできないと思う方もいるかもしれません。しかし実際にはその垣根は低く、時には役割やサービスを超えて様々な提案や貢献をすることができます。 

また、自分のスタイルにマッチした働き方に専念することもできますし、その多様性が認められていると感じます。様々な形で協力してプロダクトデベロップメントを楽しめる環境が整っているので、ご興味があれば是非ご応募いただきたいです。 

:私たちは、アプリケーションだけでなく、アーキテクチャのスケールアップに挑戦するために、才能ある人材を必要としています。スタンプビジネス、技術スタックに興味がある方、オープンソースソフトウェアを活用して仕事をすることに興味がある方は、ぜひご連絡ください! 

LINE Fukuoka株式会社の開発Fチームではメンバーを募集しています。