ブックマーク / techblog.lycorp.co.jp (109)

  • コード品質向上のテクニック:第45回 終わり null ならすべてよし?

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 45 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) 終わり null ならすべてよし? JavaKotlinIterator で next を呼ぶときは、「次」の要素が存在することを確認しなければなりません (通常は hasNext で確認します)。以下のコードのように、「次」の要素がない状態で next を呼び出すと、NoSuchE

    コード品質向上のテクニック:第45回 終わり null ならすべてよし?
    yug1224
    yug1224 2024/10/11
  • Redis DBaaSを用いたアプリケーション開発を支える取り組み

    こんにちは、LINEヤフー株式会社でRedisチームに所属している加藤です。現在はLINEヤフーの社内向けのDatabase as a ServiceとしてRedis DBaaSの開発と運用を行っています。 Redis DBaaSは、ヤフー株式会社(現LINEヤフー株式会社)で提供開始し7年がたちます。運用しているRedisは10,000台を超え、合算で毎秒1,000万以上のリクエストを処理する大規模なRedis基盤となりました。この記事では、まずRedis DBaaSで作成できるRedisのHA(High Availability)構成を説明し、次にRedisプラットフォームの成長とともに増加した社内のユーザーへのサポートの中で、ユーザーに安心してRedisを利用してもらうために行っている取り組みについて紹介します。 Redis DBaaSのHA構成 Redisはインメモリ(in-mem

    Redis DBaaSを用いたアプリケーション開発を支える取り組み
    yug1224
    yug1224 2024/10/10
  • LINEアプリのクライアントサイドの開発者が作る「コードレビュー文化」

    LINEヤフー株式会社の開発組織では、開発文化を改善するためにさまざまな試みを行っています。今回は、LINEのクライアントアプリの開発プロセスを改善を担うMobile Developer Experience Devチームでの「コードの可読性」向上の取り組みについて、Munetoshi IshikawaさんとGiuk Jungさんのインタビューを通じて紹介します。 左からGiuk Jung、Munetoshi Ishikawa Giuk Jung:LINEのiOSアプリ開発を担当しています。特にiOSのビルド環境の改善や、ビルドに使われるツールの開発などに取り組んでいます。簡単に言うと、「開発者をサポートする開発」をしています。iPhone3GSが発売された2009年から日で働き始め、今年で15年目になります。 Munetoshi Ishikawa: LINEAndroidアプリの開発

    LINEアプリのクライアントサイドの開発者が作る「コードレビュー文化」
    yug1224
    yug1224 2024/10/04
  • コード品質向上のテクニック:第44回 貧血の誤診

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 44 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) 貧血の誤診 foo-module と bar-module の 2 つのモジュールがあり、それぞれのモジュール内にデータモデル FooModel と BarModel が定義されているとします。 // In `foo-module` class FooModel(val fooValue: In

    コード品質向上のテクニック:第44回 貧血の誤診
    yug1224
    yug1224 2024/10/04
  • FractalDBを内製するに至った背景とサービス設計概要

    こんにちは。エンジニアの中野です。前回は、私たちが開発している FractalDB: LINEヤフーのオンプレミス・マルチテナンシー型データベースシステムの紹介という記事を公開しました。 今回は続いて、開発に至った背景とそれからどのようなサービス設計を行ったのか、少し具体的な話をさせていただきます。 課題(FractalDB開発の背景) 社内クラウドDBが欲しい 比較的昔から「パブリッククラウドの"クラウドDB"、例えばAWS DynamoDB(以下DynamoDB)やGCP Cloud SpannerMicrosoft Azure CosmosDBのようなデータベースが社内にも欲しいよね」という漠然とした話はありました。 例えば、DynamoDBを使ったアプリケーション作成は、通常のRDBMSを使ったアプリケーション開発と以下のような違いがあります。 普通のRDBMSを使ったアプリDy

    FractalDBを内製するに至った背景とサービス設計概要
    yug1224
    yug1224 2024/09/29
  • ラストソリューション: Rustでのモバイルクロスプラットフォーム開発方法(Android/iOS間のコード共有)

    こんにちは。私はLINEアプリのiOSエンジニア、Zang Zhihaoです。私たちのチームはLINEアプリの公式アカウント機能やLINE公式アカウントアプリを担当しています。今日は、iOS/Androidプラットフォーム間でのコード共有についてお話しします。 プラットフォーム間でのコード共有は、ソフトウェア開発コミュニティで長い間ホットな話題となっています。しかし最近では、モバイル開発の分野でさらに注目を集めています。古い技術であるXamarinは最近のニュースにはあまり登場しませんが、Kotlin Multiplatformについての話がiOSDCやDroidKaigiでは、少なくとも最近3年間は常に取り上げられています。FlutterReact Nativeの技術についてもよく話題になります。しかし、今日は別の、Rustの話をしたいと思います。 Rustはモバイル開発のための明白な

    ラストソリューション: Rustでのモバイルクロスプラットフォーム開発方法(Android/iOS間のコード共有)
    yug1224
    yug1224 2024/09/27
  • データベースエンジニアのスキルアップ 専門書輪読会とMySQLモブプロの取り組み

    こんにちは。LINEヤフー株式会社でデータベースエンジニアをしている、松浦、中園、大塚、曽根、笠井です。 データベースはLINEヤフーのさまざまなサービスを支える重要なソフトウエアですが、その安定的な運用やトラブルシューティングには、データベースに関する専門的な知識が必要です。 一方で、データベース部門に配属される新卒のエンジニアは、全員が学生時代にデータベースを専門的に勉強しているわけではありません。このような新卒エンジニアは、データベース部門へ配属後、OJTや実際のデータベースの運用業務に携わりながら、データベースに関する専門知識を深めていきます。 今回のブログ記事では、データベースエンジニアとしての専門性を高めるために、部門内で実施している専門書の輪読会、そして、MySQLを題材としたデータベースカーネルのモブプログラミング(以下、モブプロ)の取り組みについてご紹介します。 1. 輪

    データベースエンジニアのスキルアップ 専門書輪読会とMySQLモブプロの取り組み
    yug1224
    yug1224 2024/09/27
  • LINEヤフーのQAエンジニアが生成AIを利用して品質管理の生産性を向上させる方法

    This post is also available in the following languages. English, Korean はじめに 最近、業界に生成AIが導入され、ソフトウェアの開発において開発品質を維持しながら生産性を向上させる新たな方法が提供されています。それに対して、QAの品質管理の生産性を向上させる方法はあまり取り上げられていないようです。一般的にQAの品質管理をテストに限定して自動化テストやレポートの作成に生成AIを導入しようとする取り組みが主流であり、全体的な品質管理の生産性を向上させる方向では取り上げられていません。この記事では、生成AIを活用してQAの品質管理の生産性を向上させる方法について紹介します。 LINEヤフーにおける品質管理 QA(quality assurance)の定義は、プロジェクトやサービスの性質によってその役割と範囲が異なる定義がで

    LINEヤフーのQAエンジニアが生成AIを利用して品質管理の生産性を向上させる方法
    yug1224
    yug1224 2024/09/23
  • コード品質向上のテクニック:第42回 テスト上の空論

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 42 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) テスト上の空論 あるサービスのアカウントには、いくつかの種類 (FREE, PREMIUM, ...) があり、以下のように定義されているとします。 enum class AccountType { FREE, PREMIUM, BUSINESS, ULTIMATE } ここで、アカウントの種類

    コード品質向上のテクニック:第42回 テスト上の空論
    yug1224
    yug1224 2024/09/14
  • TypeScriptの不要なexportを自動で削除するOSS「ts-remove-unused」を開発しました

    こんにちは。メディアカンパニーに所属する鴻巣和司 (@kazushikonosu) です。普段はLINEスキマニのフロントエンドの開発をしています。業務をきっかけに、TypeScriptの不要なデッドコードを自動で削除するツール ts-remove-unused を開発し、GitHub上でOSSとして公開しました。稿では、ts-remove-unusedが解決しようとしている問題や直近で行った大規模な変更について紹介します。 exportしていることで気づきにくい不要なコード TypeScriptを使っている場合、tsconfig.json の compilerOptions.noUnusedLocals を有効にすることで、ファイル内で参照がない不要な変数などの定義をTypeScriptコンパイラの実行時に検知することが可能です。また、ESLintなどの静的解析ツールを使い適切にルール

    TypeScriptの不要なexportを自動で削除するOSS「ts-remove-unused」を開発しました
    yug1224
    yug1224 2024/09/07
  • コード品質向上のテクニック:第41回 「アーキテクチャ」ただいま工事中

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 41 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) 「アーキテクチャ」ただいま工事中 メッセージを送受信するアプリケーションを作成していると仮定しましょう。送受信するメッセージのデータモデルは以下のように定義されています。 class MessageModel internal constructor( val messageId: String

    コード品質向上のテクニック:第41回 「アーキテクチャ」ただいま工事中
    yug1224
    yug1224 2024/09/06
  • モブプログラミングをチームで試している話

    こんにちは。AndroidアプリでLINE公式アカウントの開発を担当している高島です。今回は、私たちのチームで試しているモブプログラミングの取り組みと、実際に取り組んで感じたことについてご紹介します。 モブプログラミングについて モブプログラミングは、複数の開発者が1つのコンピュータを共有し、協力して問題を解決する開発手法です。モブである人たち(ナビゲーター)が解決方法を提示してガイドし、キーボードの前に座る1人(ドライバー)がコーディングします。ドライバーは一定時間ごとに交代します。 私たちのチームは、後ほど紹介するを参考にして、合わないところは変更しながら、現在は次のような形で週に1度90分間行っています。 準備(5分) 新しいテーマに取り組む場合、問題を皆に共有し、どう進めるか方向性を話し合って決めます。前回から引き続き同じテーマで行っている場合、前回やったことと、前回の振り返りで

    モブプログラミングをチームで試している話
    yug1224
    yug1224 2024/09/04
  • コード品質向上のテクニック:第40回 三関数寄れば文殊の知恵?

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 40 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) 三関数寄れば文殊の知恵? クエリパラメータなどの渡された文字列をパースし、そこから値を得る機能を実装していることを想定しましょう。 以下の FooBarStringParser は、"foo:..." や "bar:..." という文字列から、それぞれ「Foo ID」と「Bar エントリ」を取得

    コード品質向上のテクニック:第40回 三関数寄れば文殊の知恵?
    yug1224
    yug1224 2024/08/29
  • コード品質向上のテクニック:第39回 作業の前に連絡を

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 39 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) 作業の前に連絡を 以下の FooMediaPlayer は、メディアを再生するためのクラスです。メインとなる関数は play で、その中の initMedia によってメディアがロードされ、playMedia で実際の再生処理を行います。また、再生状態は、playingState によって公開さ

    コード品質向上のテクニック:第39回 作業の前に連絡を
    yug1224
    yug1224 2024/08/26
  • RAGの回答を自動評価する手法(LINEヤフーのSeekAIでの事例)

    こんにちは。生成AI関連の開発をしている図左です。社内でRAGを使った生成AIサービスを開発していますが、ロジック変更のたびに毎回人手でテストするのは現実的ではありません。今回は、この品質評価を自動化したフローや手法を紹介します。 SeekAIとは LINEヤフー株式会社では、社内の情報を効率的に検索するために、生成AIを活用したサービス SeekAI を内製展開しています。SeekAIではRAGという技術を使って一般的な知識だけでなく、社内規程・ルール・問い合わせ先、コーディング時の技術スタック、顧客や取引先とのコミュニケーション履歴などを効率的に把握できるため、社内の情報検索ツールとして活用されています。 SeekAIのプレスリリース RAGとは 生成AIに『学習済みではない知識』に関する回答を出力させるために、別途構築したデータベースから取得した情報と組み合わせて回答させる手法です。

    RAGの回答を自動評価する手法(LINEヤフーのSeekAIでの事例)
    yug1224
    yug1224 2024/08/20
  • LINEヤフーのコンピュータビジョン・マルチモーダル分野の研究内容紹介(MIRU2024 レポート)

    こんにちは。LINEヤフーで画像処理エンジニアをしている植田です。先日2024年8月6日から9日まで熊にて国内最大級の画像分野の学会、第27回 画像の認識・理解シンポジウム MIRU2024が開催されました。 LINEヤフーもスポンサーとして協賛し、企業ブースの運営や研究発表・聴講のために参加しました。昨年はLINE・ヤフー個別で参加 (MIRU2023参加ブログ)していましたが、合併を経てLINEヤフーとして初めてMIRUへ参加させていただきました。 記事では会場の様子やLINEヤフーの研究発表内容を紹介します。 MIRUとは? 国内の画像分野では言わずと知れた学会でもあるMIRUは画像処理や、人工知能AI)の視覚機能を研究する分野「コンピュータビジョン」など、情報学における画像分野の一大学会です。開催地は年によって異なり日全国各地で開催されています。今年は熊県熊市の熊城ホ

    LINEヤフーのコンピュータビジョン・マルチモーダル分野の研究内容紹介(MIRU2024 レポート)
    yug1224
    yug1224 2024/08/20
  • OpenAPIの活用によるSDK開発の進化:LINE APIの進化の軌跡

    ビジネスプラットフォーム開発部の松野です。今日はLINEアプリ の Web API の SDK 開発の歴史を振り返るとともに、OpenAPI を基盤とした SDK の自動生成について解説していこうと思います。 はじめに LINEアプリでは数々のWeb APIを開発し公開してきました。それらのAPIは、世界中の開発者たちに利用され、チャットボットの構築から顧客支援ツールまで、さまざまなサービスを生み出す原動力になりました。私たちの部門の目標は、開発者がそのAPIを最大限に活用できるようにサポートすることです。そして、それを実現するための重要な手段がSDK(Software Development Kit)です。 私自身、2016年からLINEアプリの外部API向けのSDK開発に関与してきました。 SDKを通じて、開発者はAPIを簡単かつ効果的に利用できます。私たちは、この便利さを通じて皆さ

    OpenAPIの活用によるSDK開発の進化:LINE APIの進化の軌跡
    yug1224
    yug1224 2024/08/16
  • コード品質向上のテクニック:第38回 マスターキーは何処

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 38 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) マスターキーは何処 以下の MessageUiAttributeMapping は、MessageId ごとに UI 情報 (メッセージテキスト・背景色・アイコン画像) を保持し、それを UI 要素に適用するクラスです。registerAttributes を呼び出すことで新規の情報を追加し、b

    コード品質向上のテクニック:第38回 マスターキーは何処
    yug1224
    yug1224 2024/08/16
  • コード品質向上のテクニック:第37回 長いライフサイクルに巻かれる

    こんにちは。コミュニケーションアプリ「LINE」のモバイルクライアントを開発している石川です。 この記事は、毎週木曜の定期連載 "Weekly Report" 共有の第 37 回です。 LINEヤフー社内には、高い開発生産性を維持するための Review Committee という活動があります。ここで集まった知見を、Weekly Report と称して毎週社内に共有しており、その一部をブログ上でも公開しています。(Weekly Report の詳細については、過去の記事一覧を参照してください) 長いライフサイクルに巻かれる 以下のような FooBufferedLogger というクラスがあるとします。このクラスの役割は、bufferLogElement でログ (LogElement) を溜め込み、close で溜め込んだログを一斉に送信することです。ログは tag によってカテゴリ分

    コード品質向上のテクニック:第37回 長いライフサイクルに巻かれる
    yug1224
    yug1224 2024/08/08
  • デバイスとアプリの完全性保証からサービスリクエストの保護まで:LINEのデバイス証明サービス 第1弾

    X.509 証明書チェーン検証 アサーションキーペアがハードウェア格納型キーペアとして、デバイス内のハードウェア上の保護領域で生成されたことを証明する必要があります。デバイスの信頼の基点に基づいて生成された証明書チェーンを検証することにより、キーの真正性と証明の信頼性を保証できます。 Attestationオブジェクト内のX.509証明書チェーンは、大きく3つの証明書で構成されています。 リーフ証明書(Leaf certificate): 証明書チェーン内の最下位証明書として生成されたアサーションキーペアの公開鍵が含まれています。メーカーが注入したデバイスの証明鍵(attestation key)で署名され、より上位の中間証明書(Intermediate certificate)でその真正性を確認できます。中間証明書(Intermediate certificate): デバイス内に注入さ

    デバイスとアプリの完全性保証からサービスリクエストの保護まで:LINEのデバイス証明サービス 第1弾
    yug1224
    yug1224 2024/08/06