ローソンデジタルイノベーション テックブログ

ローソンデジタルイノベーション(LDI)の技術ブログです

【Android】パラメタライズドテストの導入

はじめに パラメタライズドテストとは? パラメタライズドテストの書き方 最後に はじめに Androidエンジニアの篠本(ささもと)です。 今回は、テストコードのメンテナンス性向上を目的にパラメタライズドテストを導入しましたので、パラメタライズドテストに…

LiteLLMを利用したAI活用基盤を紹介します

AI

はじめに 記事を開いていただきありがとうございます。サーバサイドエンジニアのオーです。 今回は「LiteLLMを利用したAI活用基盤」をテーマに「システム構築例」と「運用面のメリット」を簡単に紹介します。 LDIでは、業務生産性の向上の一環としてAIの導入…

ご当地からあげクンをできるだけ簡単に2種類買いたい。エリア限定商品の空間解析

こんにちは、データ分析チームのIです。今回はご当地からあげクンのお話をさせていただきます。 1. ご当地からあげクン 2. 最短距離の探索と計算 3. 最短店舗探索の実行 4. からあげクンが2種類買える最短距離の店舗 4.1 東北と首都圏 4.2 首都圏と中部 4.3 …

【Android】startActivityForResultとonActivityResultのdeprecated対応

はじめに startActivityForResultとonActivityResultとは? deprecatedの内容と置き換え方法 置き換えのメリット 遷移元画面の結果受け取り処理の可読性向上 ActivityResultContractによる返り値の型の強制 最後に はじめに Androidエンジニアの篠本(ささも…

【Android】GlobalScopeの置き換え対応

はじめに GlobalScopeとは? GlobalScopeがdelicate扱いに 対応方法 最後に はじめに Androidエンジニアの篠本(ささもと)です。 今回、delicate(取り扱い注意)のGlobalScopeをwithContext(NonCancellable)に置き換えまして、そのご紹介をさせていただきます…

【Android】getSerializableやgetParcelableのdeprecated対応

はじめに getSerializableとgetParcelableとは? deprecatedの内容 対応方法 最後に はじめに Androidエンジニアの篠本(ささもと)です。 今回は、AndroidのgetSerializableやgetParcelableなどで発生しているdeprecated対応についてご紹介させていただきます…

スマホアプリ自動テストフレームワークのShiratesを画像認識技術で改良しました

プロジェクトディベロップメント部の仙波です。 スマホアプリ用自動テストフレームワーク Shirates(シラテス) を画像認識技術を活用して改良しました。 メジャーアップデートです。macOSで利用できます。 github.com 旧バージョンが抱えていた問題 Shirate…

Swift 6のTyped throwsを活用する型安全なエラーハンドリング

はじめに iOSエンジニアの申です。今回はエラーハンドリング時に発生した問題とTyped throwsの活用についてご紹介させていただきます。 発生した問題とその原因 エラーが返される可能性がある関数を実行した際にエラーが発生した場合、そのエラーをハンドリ…

生成AIで単体テストシナリオを作成!プロンプトで工夫したことなどご紹介

AI

ローソンデジタルイノベーション(LDI)のiOS/Android開発リーダーの阪口です。 LDIでは、アプリ開発スピードの向上のため、生成AIを活用した作業効率化を実施中です。 今回は施策の一つである、生成AIで単体テストシナリオ作成を実施した例をご紹介させていた…

DiffableDataSourceで表示が更新されない? Hashable実装の落とし穴

はじめに SectionIdentifierTypeとItemIdentifierTypeをHashableに準拠させる上での注意点 【注意点】Hashable実装の落とし穴:表示内容の変更が反映されないケース 理由の解説と解決策 理由 解決策 最後に はじめに こんにちは、ローソンデジタルイノベーシ…

HTMX 入門しました - 編集画面編

LDIで開発担当しているOKです。 前回に続き HTMX を使った事をやっていきます。 今回はコンテンツの一覧を表示・編集・削除ができる画面を HTMX を交えて作っていきます。 完成するとこんな感じのページになります。 編集画面完成形 ディレクトリ構成 実装一…

HTMX 入門しました

ご無沙汰しております。LDIで開発担当しているOKです。 今回のテーマですが、 普段はWebのフロントエンドとか全然やってないのですが、 訳あってHTMXを使ってみたので、アウトプットも兼ねてまずは導入部分について記事にしようと思います。 HTMXとは とりあ…

AndroidアプリをAAB対応した際に発生したトラブルとその解決方法

こんにちは、LDIのモバイルアプリエンジニアの庄司です。 今回の記事では、AndroidアプリをAAB対応した際に発生したトラブルとその解決に行った方法について書きます。 はじめに Androidアプリ開発において、Google Playへの配信形式が従来のAPKからAAB(And…

M4 Macで発生したiOSアプリの開発環境でのGemfile.lockの設定トラブルと解決方法

iOS

ローソンデジタルイノベーション(LDI)のiOS/Android開発リーダーの阪口です。 iOSアプリの開発環境で、fastlaneの導入やCI/CDの環境構築など、Gemfileが必要になる機会がいくつかあるかと思います。 今回は、Gemfile.lockの設定で発生したトラブルと、その解…

DifyとAws Bedrockを統合してプライベートなマルチモーダルAIチャットボット構築を簡単に試す

AI

はじめに 背景技術の概要 Difyとは AWS Bedrockとは マルチモーダルAIとは システム構築の説明 システム構成・処理の概要 Difyの構築 (Docker環境) DifyにAWS BedrockのLLMモデルを統合 DifyにAWS Bedrock Knowledge Baseの統合 Difyにファイルアップロード…

Tips:Xcode16系での実機ビルド時のお役立ち情報

iOS

ローソンデジタルイノベーション(LDI)のiOS/Android開発リーダーの阪口です。 今回は、最近Xcode16系で発生した実機(iPhoneまたはiPad)デバッグ時のトラブルの対処法についてTipsを2点紹介します。 実機デバッグ時のTips Tips1:初接続の実機ですぐ実行が…

【Xcode16】【iOS18】CombineでcompactMapを使用するとアプリがクラッシュしてしまう問題とその解決方法

はじめに 実行環境 発生した事象 調査内容 パターン1. compactMapの前にメインスレッド指定を行う パターン2. compactMapを削除する パターン3. メインスレッド指定をなくす パターン4. compactMapとメインスレッド指定をなくす クラッシュの原因 対応策 対…

「Slack × AWSで実現!」社内AIチャットボットを紹介します

AI

はじめに チャットボットの実用例を紹介 ①新しい会話を始める ②引き続き会話を行う ③Slack Workflowを利用し会話を始める (カスタムオプション指定) システム構成・処理概要の紹介 システム構成図 仕様についての補足 今回の活動で改善した課題 今後の活動に…

DiffableDataSourceを活用する画面のちらつき対策とパフォーマンス改善

はじめに iOSエンジニアの申です。今回は画面のちらつき対策としてDiffableDataSourceへの移行を実施し、その効果についてご紹介させていただきます。 開発環境 Xcode 16.1 iPhone 15(iOS 18.1.1) 画面のちらつき問題対応 基本的な画面表示の流れ 画面を表…

LDIの開発環境を紹介します!(2024年版)

ローソンデジタルイノベーション(LDI)のiOS/Android開発マネージャーの阪口です。 www.ldi.co.jp 前回の開発環境紹介記事(LDIの開発環境を紹介します!(2023年版) - ローソンデジタルイノベーション テックブログ)から変化があるため、2024年の情報をご共有…

【Xcode16】【iOS18】UIViewControllerを継承したクラスの同期的な静的メソッドを非同期呼び出しするとクラッシュする問題の解決

はじめに 実行環境 発生した事象 調査内容 パターン1. @MainActorを付与した自作クラスを使用する場合 パターン2. @MainActorを付与した自作クラスを継承したサブクラスの場合 パターン3. @MainActorを付与したベースクラスを外部モジュールで定義し、それを…

AndroidのSDKアップデートに伴う自動テスト祭り2024

ども。LDIの仙波です。 スマホアプリの自動テストを担当しています。 久しぶりの記事投稿となります。 毎年の恒例行事としてAndroidのTarget SDKのアップデートがあります。 この時期は保守メンバーが特に多忙になりますが リグレッションテストを担うテスト…

iOSエンジニアの挑戦:iPhone端末カメラ問題の解決

はじめに iOSエンジニアの譚です。 今回は開発中に遭遇したiPhone端末のカメラピント問題とその対応について紹介させていただきます。 開発環境 Xcode 15 iOS 17 iPhone 12 Pro Max, iPhone 15, iPhone 15 Pro Max ピント問題とその対応 今回発生した問題は…

FigmaのDevMode新機能、アノテーションを使ってみたら便利だった話

こんにちは、デザイナーの松本です。 先日アップデートされたFigmaのDevModeの新機能、アノテーション(測定・注釈)を早速使ってみて、便利だなぁ〜!と思わずブログを書いてしまいました。 Figmaとはブラウザ上でUIデザインやWebデザイン、グラフィックデ…

Cloud Functions でのJWT対応方法の紹介

ローソンデジタルイノベーション(LDI)のiOS/Android開発マネージャーの阪口です。 今回は、Cloud Functions でのJWT(JSON Web Token)を利用した認証処理について紹介します! はじめに 前回こちらの記事で、Cloud Functions と Cloud Firestore の社内利用…

FlutterとDartを使ったAPI通信の実装方法

こんにちは、LDIのモバイルアプリエンジニアの庄司です。 前回に続き、在宅勤務報告システムの開発にまつわる話をしようと思います。 在宅勤務報告システムではhttpパッケージを使って、APIの呼び出しを実装しています。 今回はAPIへのリクエストとレスポン…

Firebase Auth×Microsoft Entra ID×Microsoft Graphで認証処理を実装した際にちょっと困ったこと

ローソンデジタルイノベーション(LDI)でPMを担当している畑沢です。先日、下記記事にて在宅勤務報告システムについてご紹介しました。 techblog.ldi.co.jp今回は、Firebase Authentication × Microsoft Entra ID × Microsoft Graphを利用した認証処理と、実…

Flutterで環境ごとにビルドする方法

はじめに ビルド環境を切り替えて開発する方法について --dart-define-from-file 環境変数定義(json) 実行方法 ソースコード側の対応例 在宅勤務報告システムで工夫したこと 最後に はじめに こんにちは、ローソンデジタルイノベーション(LDI)でiOSエンジニ…

失敗から学んだ、Flutterでテキストボックスの状態に合わせてボタンの活性状態を制御する方法

はじめに こんにちは、Android開発エンジニアの岡田です。 普段はAndroid開発を行っていますが、今回はFlutterで在宅勤務報告システムを開発した時の出来事を記事にしていきます。 テキストボックスの状態によって、ボタンの活性/非活性を制御する方法につい…

(iOS) Alamofire + Swift Concurrency でのAPI通信処理の実装例

ローソンデジタルイノベーション(LDI)のiOS/Android開発マネージャーの阪口です。 開発しているアプリのAPI通信処理は、Alamofire を利用して実装しています。 通信処理部分をSwift Concurrency に対応したため、今回はどのように実装したか紹介します! 通…