サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
世界禁煙デー
techblog.lycorp.co.jp
はじめに こんにちは! Yahoo!知恵袋の津村です。去年の11月からYahoo!知恵袋のフロントエンドシステムのリアーキテクトに取り組んでいます。この記事では、これまで抱えていた技術的な問題と、それらをどう解決したかについて説明します。この結果、開発効率向上やレビュー時間短縮などの効果がありました。 Yahoo!知恵袋は利用者登録者数5,200万人、質問総数2億8,000万件、回答総数は6億5,000万件以上(2024年4月3日現在)ある、日本最大級のQ&Aサイトです。2004年からサービスを開始し、今年20周年を迎えます。 Yahoo!知恵袋はモバイルクライアント、バックエンド、フロントエンドの3つのシステムで構成されています。今回対象とするフロントエンドシステムは、ブラウザやYahoo! JAPANアプリからアクセスされる際のWebページを提供するシステムです。 Yahoo!知恵袋の
こんにちは、LINEヤフー株式会社でデータベース部門に所属している、今野です。現在は、先日LINEヤフー社内にて提供を開始したFractalDBの開発と運用を担当するチームに所属しています。 FractalDBは、LINEヤフーのオンプレミス環境に向け開発された、データベースプラットフォームです。この記事では、FractalDBの概要として、開発に至った背景や設計目標から、その特徴およびアーキテクチャの概要について紹介します。 また、LINEヤフーでは今夏のインターンシップを募集しています。FractalDBチームも募集してますので、ページの最後の紹介をぜひ確認してみてください。 FractalDBとは FractalDBは、LINEヤフーのオンプレミス環境に最適化されたデータベースプラットフォームとして開発されています。リレーショナルデータベースとNoSQLデータベースの利点を融合させた
こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 “Weekly Report” 共有の第 23 回です。Weekly Report については、第 1 回の記事を参照してください。 return の切れ目が edge case の切れ目 早期リターン (early return, return early) は、動作の流れを明確にする上で重要なテクニックです。エラーケースを最初に除外することで、「関数の主な目的」に焦点を当てたコードを書きやすくなります。また、エラーの条件とその処理ロジックの関係もより分かりやすくなりという利点もあります。(詳しくは、 https://speakerdeck.com/munetoshi/code-readability-session-5-ver-2-ja?slide=39 から
はじめまして、LINEヤフー株式会社でKubernetes as a ServiceのPlatform Engineerを務めている小林と申します。 私は業務で使っているという都合もあり、 kustomize(※)というOSSの開発者もしています。 ※ kustomize:kustomizeは、KubernetesのYAMLマニフェストファイルをテンプレート化せずに管理するためのツールです。ベースとなるマニフェストに対して、パッチやオーバーレイといった方法で変更を加えることができます。これにより環境ごとの設定差分を管理し、再利用可能なマニフェストファイル群を作成することが可能となります。 前回のKubeConにて、OSSへの貢献から Kubernetes Contributor Awards という賞を受賞させて頂きましたので、私のLINEヤフー株式会社でのKubernetesやOSSとの
こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 “Weekly Report” 共有の第 22 回です。Weekly Report については、第 1 回の記事を参照してください。 To equal, or not to equal Java や Kotlin では、equals をオーバーライドすることで「構造の等価性 (structural equality)」を定義することができます。(ただし、equals をオーバーライドするときは、hashCode もオーバーライドする必要があります。) 以下のような、ユーザプロファイルの UI のデータモデルがあるとしましょう。このデータモデルでは、独自の equals と hashCode を定義しています。 class UserProfileViewData(
こんにちは! モバイルデベロッパーエクスペリエンスチームのgiginetです。普段は主にLINEアプリ向けの開発環境を整えたり、ビルドシステムを構築したりしています。 3月22日〜24日にSwif...
こんにちは。ヤフー広告でデータエンジニアをしている長峯です。 LINEヤフー株式会社では、Yahoo! JAPANと関連企業が所有するデータを活用することでお客様のマーケティング課題の発見と解決を実現するサービスYahoo! JAPAN データマーケティングソリューションを展開しています。私は本サービスを通じてお客様がさまざまなデータを活用するためのデータ分析基盤となるデータレイクの構築・運用を担当しています。このデータレイクは、2.5ペタバイトのデータを保有しており、年間1,000万クエリが実行される大規模な環境となっています。 今回、私たちはAWS上に構築されたデータレイクのデータスキャン量を4人月という工数で25%削減することに成功しました。この記事では、その削減プロセスを紹介いたします。このデータレイクは、クエリエンジンとしてAmazon Athenaを主に使用しており、Amazo
1.7.5. 考察 追加検証の結果から、 Fair Adaptive Dynamic Thresholds (FADT)のような制御アルゴリズムが有効に働いている Fair Adaptive Dynamic Thresholds (FADT)の無効化によりジョブの完了時間が長くなっているため キューの最大遅延時間がジョブの完了時間に影響している キューの最大遅延時間を短くすることでジョブの完了時間が短くなったそのため、バッファのサイズではなくキューの最大遅延時間がジョブの完了時間に影響していると考えられるただ、デフォルト設定よりもOut Discardsが発生しているが、TCPの再送で救えておりジョブに影響は出ていない更にTCPの再送がデフォルト設定よりも早く発生しているため、結果的にジョブの完了時間が短くなっている ということがわかりました。 これまでの検証では、Shallow Buff
こんにちは。SWATチームの今谷と、LY会員サービス統括本部の木所です。 LINEとヤフーの会社合併に伴って、LINEヤフー株式会社が提供するサービスを利用するユーザーに「新プライバシーポリシーへの同意」をいただくためのモジュールを開発しました。本記事では、ヤフーのユーザー5,400万人から”同意”を得るための工夫について、実装上の不具合も交えてご紹介します。 なお、ご紹介する内容は、UIT × Bonfire Front-end Meetup #1 での発表が起点となっています。詳細についてより深く知りたい方は、発表資料 や Podcast をあわせてご参照ください。 会社合併と、新プライバシーポリシーのご案内 LINEとヤフー、それぞれで同意モジュールがあります。Web向けのほか、iOS・Androidアプリ向けにも提供しました。 Webの同意モジュールでは「Modal版」と「Ful
こんにちは。DS統括本部で画像処理エンジニアをしている上野です。LINEヤフー株式会社の企業ロゴやサービスロゴなどのブランドロゴには、ブランドガイドラインと呼ばれるロゴ使用時に守らなくてはならないルールが定められています。ロゴを使用する際にロゴが変形してしまったり、変色してしまったりすると問題となるため、細心の注意を払って使用しております。今まではロゴが使用されている画像を担当デザイナーがすべて目視確認でチェックすることで、ガイドラインを遵守してきました。ブランド価値を守るためにとても大切な作業です。これらの作業を画像処理で自動化できないかと考え、ブランドロゴチェックツールを作成しました。 ※載せている画像は、今回のブログ用に用意したテスト画像です。 この記事では、社内のデザイナーから寄せられた目視確認の作業に工数がかかってしまっているという課題を画像処理技術で解決した事例について、紹介し
はじめに こんにちは。プロダクト開発本部のYoungjin Jangです。 皆さんはフロントエンド開発をするときに、テストコードを書いていますか? フロントエンドは分野の特性上、開発スケジュールの後半に成果物(スペック、デザイン、API)を総合して最終的にプロダクトを作る立場になるため、時間に追われてテストコードを書きにくいこともあるかと思います。逆にスケジュールの前半では他の職種より比較的時間が余ることもあるでしょう。この時間を活用してテストを書いてみるのはいかがでしょうか? この記事では、テスト駆動開発の基本的な概念とCypressを利用したテスト駆動開発方法、そして実際にLINEドクターのフロントエンドを開発するときに、どのようにテスト駆動開発を行っているかを紹介します。 LINEドクターとは LINEドクターはオンライン診療サービスで、ユーザーはLINEを通じて診察を受け、処方箋や
こんにちは、UITサービス開発部の板井です。普段はLINEスキマニのフロントエンド開発担当や、フロントエンド開発に関するイベントの運営をしています。 UITでは社内のフロントエンドエンジニアのトレンドや周辺ツールの利用状況を調査するため、毎年社内に向けてアンケート「UIT Survey」を実施しています。(昨年度の実施レポート) 今回の調査に関しては、毎年UITで行っている世界各地のフロントエンド開発拠点が、コラボレーションして技術を共有し合う「UIT GLOBAL WORKSHOP」という社内イベントのオープニングコンテンツで、結果を発表するために行いました。 概要 対象:海外拠点を含むLINEヤフーのフロントエンドエンジニア(回答者は日本、韓国、ベトナム、台湾の組織に所属)質問および回答の言語:英語回答期間:2022/11/22-2022/12/07回答者数:121 名 調査した開発者
こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 “Weekly Report” 共有の第 11 回です。Weekly Report については、第 1 回の記事を参照してください。 関数にたこができる あるサービスで、ユーザ同士が「フレンド」になるという機能を実装することを想定します。現在のユーザから見て、別のユーザがフレンドであるかを調べたり、新たにフレンドになるために、以下のような UseCase クラスを使います。 class FriendStateUseCase( private val currentUserId: UserId, ... ) { fun isFriend(otherUserId: UserId): Boolean { ... } fun markAsFriend(otherUserI
こんにちは、出前館のプロダクトを担当しているヨンジェです。私は10余りのオープンソースプロジェクトをディレクションして開発し、チームで新しいソフトウェアを設計するときは、なるべくオープンソースへの移行...
こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 10 回です。Weekly Report については、第 1 回の記事を参照してください。 起きば浮世の壱を見ん ソートされた Item のリストを表示する UI を実装することを想定しましょう。この Item リストの上部には、Item の総数を表示するヘッダーがあるとします。以下は、リストの表示例です。 Items: 3 --------- <item1> --------- <item2> --------- <item3> さらに、リストと総数表示には次のような仕様があるとします。 リストで表示できる Item 数は先頭 100 個まで100 個を超える Item がある場合は、個数表示は "100+" となる 総
はじめに はじめまして。VOOM事業統括本部 VOOM事業本部 サービスアナリシスチームの吉木と申します。データマネージャー 兼 データスチュワードとして日々の業務に取り組んでいます。 私が所属しているチームは、LINEヤフー株式会社の保有するデータを用いて、ビジネスに対する洞察の提供、施策や機能の効果を測定する分析活動の支援、KPIのモニタリングを行う用途のダッシュボードの提供などを主に行っています。 この記事では、データマネージャーとはどのような役割を担っているのか、そしてLINEヤフー株式会社における事業部メンバーのデータガバナンスに対する認識や意識を高めるために行った取り組みについての事例を紹介します。 私と同じようにデータマネジメントやデータガバナンスに関する活動や業務に取り組まれている方の参考になれば幸いです。 データマネージャーとは データマネージャーの業務内容についてご存じ
こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 9 回です。Weekly Report については、第 1 回の記事を参照してください。 来た道を戻れ ネットワークやファイルシステムといった I/O を使う場合、I/O 上のデータ表現とコード上のデータ表現との間で相互に変換する必要があります。その典型例の一つが、インターフェース記述言語 (IDL) やデータベーススキーマなどの外部で定義されたデータと、コード上で定義されたモデルクラスとの相互変換でしょう。このとき、「状態」や「タイプ」を意味する値を使う場合は、コード上の表現として列挙型を使うこともあります。 以下のコードでは、データベースで使われている値と列挙子を相互変換するために Map を使っています。 enum
こんにちは。AIプラットフォーム部でMLOpsエンジニアやプロダクトオーナーを担当している古川新です。 この記事では、AIプラットフォームで提供しているデータ品質管理システム「ACP Data Quality」と、その中核機能であるデータ品質モデル言語「DQML」によるデータ品質管理の取り組みについてご紹介します。 データ品質管理システム「ACP Data Quality」 AIプラットフォームでは、「ACP Data Quality」というデータ品質管理システムを提供しています。「ACP」と呼ばれるAIに特化したKubernetes環境で提供されており、利用者はWeb UIまたはKubernetesカスタムリソースを通じて、データ品質管理プロセスを実行できます。 データ品質管理とは データ品質とは、「データが目的にどのくらい適しているかの度合い」のことです。 国際標準の規格では、以下のよ
こんにちは。LINEヤフーの久慈泰範です。Advent Calendarは入社すぐに書いて以来、5年ぶりです。久々だー。 今日は、LINE(現 LINEヤフー) で SSL/TLS 証明書の購買を自動化した話を書きます。(以下、証明書と呼びます) 自動化のためにはタスクの形や人の動きを変えなければいけないことが多く、ほとんどの時間は混乱なく変化を続けていく方法を模索し続けていた時間だったように思います。2023年10月をもってやりたかったことは一通り終わったので、節目の記録としてこの記事を書くことにします。 この記事に書いてあること 自動化のためにやったプロジェクトの概要助けてくれたたくさんの方への感謝 この記事に書いていないこと プログラムコードなど、技術的な話 Summary LINEには多数のサービスがあり、500を超えるドメインが運用されています。サブドメインを含めると約十万件あり
こんにちは。UIT開発推進部 Platform開発チームの odan です。LINEログインのフロントエンドおよび LIFF の SDK の開発を担当しています。 背景 LINEログインにはいくつかのバージョンがあり、その中の v2.1 のフロントエンド実装に使用しているフレームワークを Vue2 から Vue3 へのアップグレードを行っています。 現在のプロジェクトは Vue CLI を使用してプロジェクトを構築しており、 Vue3 にアップグレードするにあたって Vite への移行も同時に行っています。 Vue CLI は Webpack をベースとしたビルドシステムです。Vite への移行は Webpack との差分を気をつける必要があります。 この記事ではその差分の中でも Vite が標準でサポートしないブラウザへの対応に焦点を絞って事例を紹介します。 Vite がデフォルトでサポ
こんにちは。LINEヤフー株式会社で自然言語処理の開発を担当している伊奈です。 私が属する自然言語処理チームで開発しているテキスト解析 Web API は、Yahoo!デベロッパーネットワークから社外に公開しています。テキスト解析 Web API をより効果的に活用できるように、『テキスト解析 Web API クックブック』を公開しました。 今回はその活用事例集の中から、テキスト解析 Web API の「ルビ振り」と「かな漢字変換」の活用例を紹介します。 テキスト解析 Web API の「ルビ振り」と「かな漢字変換」の使い方 最初に、テキスト解析 Web API の「ルビ振り」と「かな漢字変換」について簡単に紹介します。 テキスト解析 Web API の各機能の入出力のインターフェースをできるだけ共通化するために、JSON-RPC 2.0 を採用しています。具体的には、下記のような入出力イ
L1: r1 = y;L2: r2 = x; 並列プログラムには非決定性があるので、結果はひとつには決まりません。いくつかパターンを考えてみると、 r1, r2 = (NEW, NEW), (0, NEW), (NEW, 0) の可能性があることがわかります: S1 < S2 < L1 < L2 → (NEW, NEW)S1 < L1 < S2 < L2 → (0, NEW)S2 < L2 < S1 < L1 → (NEW, 0) では r1, r2 = (0, 0) という結果はありうるでしょうか? 少し考えてみるとこれはなさそうに思えます: r1 = 0を仮定するこのときL1 < S2である各コアのプログラムの順序よりS1 < L1, S2 < L2である2と3よりS1 < L1 < S2 < L2という順序が決定されるS1 < L2よりr2 = NEWである 以上の「素朴な推論」は正
LINEヤフー Advent Calendar 2023の14日目の記事です。 初めまして、ヤフー検索のフロントエンド開発をしている鈴木悠馬です。 今回、ヤフー検索において、ビジュアルリグレッショ...
こんにちは、LINEヤフー株式会社でSREとして働いている岩山です。 今回は出向先の出前館で進めているマルチテナンシーのKubernetes(k8s)クラスタとサービス間通信の認可について、その構築作業の中で得られた知見を紹介します。 いくつか導入したツールの紹介を同じチームの出向組メンバーである岡田・望月・岩山の3名でお送りします。 k8sのマルチテナンシーとは マルチテナンシーとは「テナント」と呼ばれる複数のチームなどの単位で k8s クラスタを共有することです。 参考: https://kubernetes.io/docs/concepts/security/multi-tenancy/ 出前館では数百名の開発者が20個前後のチームを構成し、アプリケーションの開発を行っています。それぞれのチームは複数のコンポーネントを持ち、全体としてマイクロサービスアーキテクチャが構成されています。
こんにちは!Agile SWATチームの谷村、日下、荒瀬です。普段私たちはLINEヤフー株式会社およびグループ会社のアジャイル開発のサポートをしています。 もともとSWATチーム(谷村、日下が所属)とAgile Coachチーム(荒瀬が所属)は別々のチームでしたが、1つのチームとして協働でAgile開発支援をすることになりました。なぜタッグを組んだのか、どのようなシナジーが生まれたかをお話しします。 SWATチームとAgile Coachチーム、それぞれの強みと課題 SWAT チームは、社内のさまざまなサービスの技術サポートを行っています。この名前は、警察の特殊部隊を連想させるような仕事内容から来ています。具体的には、各部門の開発チームだけでは対応できない技術的課題に対応し、依頼内容に応じて適切なメンバーをアサインし、開発チームとともに数カ月間で課題の解決にあたります。 SWAT メンバー
議論を活性化させる工夫 輪読会でありがちな課題は、議論が活性化しないことです。 この問題に対処するために、われわれの輪読会ではサマリーに加えて、疑問点や不明点を書き込む専用のフォームを用意しています。参加者が事前にこのフォームに疑問や不明点を記入することで、輪読会の日に活発な議論が行われやすくなります。 最終的に、以下のような参加者ごとに個別のフォームを準備することにしました。これにより、それぞれの参加者が輪読会での議論への積極的な参加を促すようになり、議論への意識が高まる効果があります。 議論が活性するには、少人数で開催するのが一番いいのではないかと思っています。 以前、3名以上の大人数の輪読会を開催した際、参加者が他の誰かが話を始めるだろうと考え、結局は無言の時間が続くという状況がしばしばありました。一方、参加者数が少ない場合、サマリー作成の担当者になる頻度が多く、輪読会に対して当事者
カナリアリリースに関連のある部分を図に起こしたものが以下です。 ECSクラスターの中にあるサービスに対してターゲットグループを設定し、ALBからのリクエストをタスクに割り振っています。 デプロイはGitHub ActionsのWorkflow Dispatchを使用し、ボタン押下で実行できます。このプロセスはDockerイメージをビルド、Amazon Elastic Container Registry(以下、Amazon ECRと表記)にイメージをプッシュし、Amazon ECSのタスク定義を更新すると自動的にタスクのローリングアップデートが走る仕組みを使用しています。 余談ですが、クーポンサービスでは以前Spring Boot 2.6を採用していました。 Spring Bootの3系へのアップグレードについては記事「出前館クーポンサービスでのサーバーアプリケーションのSpring Bo
こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 5 回です。Weekly Report については、第 1 回の記事を参照してください。 悪列挙は良層を駆逐する あるサービスの「ユーザアカウントの種別」として、以下のような列挙型が定義されていると仮定します。 enum class AccountType { FREE, PERSONAL, UNLIMITED } この値について、ローカルストレージやデータベース、ネットワーク越しの API を使って読み書きを行う場合、「コンバータ」や「マッパー」と呼ばれる仕組みを使って、言語固有のオブジェクトとインターフェース定義言語やプロトコルで定義されたバイト列で相互変換することがあります。 例えば、Android アプリケーション
LINEヤフー Advent Calendar 2023の3日目の記事です。 ビジネスプラットフォーム開発本部の松野です。今日はLINEアプリ の Web API の SDK 開発の歴史を振り返る...
次のページ
このページを最初にブックマークしてみませんか?
『LINEヤフー Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く