Mirrativ Tech Blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc.)によるブログです

DroidKaigi 2025 参加レポート

Androidエンジニアの藤原(@fuji_tech7)です。9月10日〜12日に DroidKaigi 2025 が開催されました。 私はカンファレンスデーの11日、12日に参加してきたので、その内容をレポートします。 ミラティブは 2022 年から DroidKaigi に協賛しており、今年で4年目を…

Dockerコンテナ上のプロセスが残り続ける問題をPTYを使って回避した話

こんにちは、バックエンドエンジニアのogatasoです。今回はDockerコンテナ上でプロセスが残り続けてしまう問題をPTY(pseudo terminal)を噛ませたタイムアウト処理で対応した話を紹介します。 はじめに ミラティブでは、開発環境や本番環境のMySQLのレコー…

次世代JS標準時刻API Temporal を3年先行利用して得た知見を共有します!

Dateに代わる新たな日時表現・操作API Temporal を3年先行利用して得た知見を共有します!

【ミラティブ】iOSDC Japan 2025 にスポンサーとして協賛します

こんにちは、ミラティブの新嘉喜です。 ミラティブは、2025年9月19日(金)〜9月21日(日)に有明セントラルタワーホール&カンファレンス+ニコニコ生放送で開催される iOSDC Japan 2025 にスポンサーとして協賛させていただきます! iOSDC Japan 2025 について…

【ミラティブ】DroidKaigi 2025 にスポンサーとして協賛します

こんにちは、ミラティブの新嘉喜です。 ミラティブは、2025年9月10日(水)〜12日(金)の3日間にかけて開催される、「DroidKaigi 2025」に協賛することをお知らせいたします。 DroidKaigi とは 「DroidKaigi」は、Android技術情報の共有とコミュニケーションを…

Vaporを活用しMacとiPhone間で双方向通信を行う

iOSチームの福山です。 Mirrativ iOSでは Flipper (Meta社のOSS) を使っていました。しかし Xcode 16.3 から Flipper が動かなくなるという事象が発生し、リポジトリもアーカイブされていることから、Vapor を利用して代替となる機能を作成しようと考えまし…

みんなの「スキ」でつながろう! Mirrativ LT Party 2025Q1 を開催しました

はいこんにちは!フロントエンドやらバックエンドやらUnityやらなんでもやってるエンジニアの どじねこ です。 今回は少し前の話題になりますが、2025年3月12日に社内で開催した「Mirrativ LT Party 2025Q1」をご紹介します。 よろしければ過去に開催したLT…

App Storeの返金情報を取得する方法

こんにちは、バックエンドエンジニアのogatasoです。 Mirrativでは、配信者にギフトを贈る際に必要なコインをアプリ内課金で購入できます。 今回、不正の検知と対策を目的として、過去および今後のすべての返金履歴を取得し、データベースに取り込む仕組みを…

Renovateをセルフホスト with Google Cloud & Go

こんにちは、バックエンド基盤チームの藤井脩紀です。 バックエンド基盤チームは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題を発見・解決している部署です。 このチームではCIの整備や依存関係の更新なども担当してお…

シェーダーでアニメーションカーブを使う

こんにちは、Unityエンジニアのrioil(@rioil_dev)です。 Mirrativの3Dアバター(エモモ)の描画には、カスタム実装されたシェーダーを使用しています。 カスタムシェーダーにテクスチャシートを用いたアニメーション機能を追加するにあたって、シェーダー…

【ミラティブ】CEDEC2025 にスポンサーとして登壇 & 協賛します

こんにちは、ミラティブの広報の新嘉喜です。 ミラティブは、2025年8月22日(火)〜24日(木)に開催される「CEDEC 2025」に、スポンサーとしてセッション登壇と協賛をすることを決定いたしました。 ※CEDEC2025については、公式サイトをご覧ください https:/…

AtCoderで ミラティブ プログラミングコンテスト2025 を開催します

こんにちは、バックエンドエンジニアの makino です! この度、ミラティブは 2025年7月12日(土) にAtCoderにおいて ミラティブ プログラミングコンテスト2025 を開催します。 atcoder.jp 私自身、数年前まで競技プログラミングに熱心に取り組んでおり、夜な…

Jetpack ComposeのonLayoutRectChangedとonGloballyPositionedを比較してみた

こんにちは、Androidエンジニアの藤原(@fuji_tech7)です。 先日、Google I/Oが開催され新しいJetpack Composeが発表されました。 www.youtube.com AutoSize textやMaterial Expressiveなど気になるものは多いのですが、個人的にはModifierに追加されたonLayo…

Jetpack Composeのスクロール可能なTabRowにminWidthが設定できるようになります

こんにちは、Androidエンジニアの藤原(@fuji_tech7)です。 Jetpack ComposeのコンポーネントにScrollableTabRowがあります。 TabRowが指定領域にタブを敷き詰めて配置するのに対しScrollableTabRowはスクロール可能にすることでより多くのタブを配置すること…

iOS 18 x AirPods Pro2 で配信の音声が聞こえづらいことがある問題の調査

こんにちは、エンジニアのちぎら(@_naru_jpn)です。ゲーム配信アプリであるミラティブではイヤホンを使用しながら配信をすることができますが、動作の安定のために 有線のイヤホンの使用を推奨しています。 昨年 iOS 18 がリリースされてから、稀に AirPod…

ビジネス職向けに、Webプログラミング研修をしました。

こんにちは、ミラティブでデータ分析基盤を担当しております芝尾です。 ミラティブでは本年度新卒研修の一環として、エンジニアではないビジネス職向けに、Web開発の研修を行いました。 Web開発研修の様子 研修の目的 この研修の目的は、ビジネス職にエンジ…

Swift Macroを事前コンパイルしてビルドを高速化!.xcodeprojとSwift Packageへの導入方法

iOS

iOSチームの福山です。 Mirrativ iOSの開発ではSwift Macroを使ってイニシャライザやXcode Previews用のダミー要素を生成するなど活用しています。 しかし、ビルドが成功するにもかかわらず、Swift Macroが展開するコードを利用する部分でエラーが表示される…

【ミラティブ】try! Swift Tokyo 2025にスポンサーとして協賛します

iOS

こんにちは、ミラティブのエンジニア採用担当の野呂です。 いよいよ明日、Swiftに関する世界的な技術カンファレンス 「try! Swift Tokyo 2025」 が開催されます! 株式会社ミラティブは、ブロンズスポンサーとして協賛させていただいております。 try! Swift…

Compose Preview Screenshot Testing と AST 解析で Material3 へ完全移行した話

Compose Preview Screenshot Testing を導入し、Mirrativ の Android アプリを Material2 から Material3 へ完全移行した事例をご紹介します。導入の際に困る Preview 関数の定義場所については、AST 解析を用いて解決しました。導入を検討する際はぜひ参考…

時間がかかっていた git status を Trace2 で計測しながら10倍速くした話

環境 改善前 改善前計測 untrackedcacheを使った高速化 file system monitorを使った高速化 サブモジュールをオフにして高速化 Appendix: Gitバージョンアップ実験結果 まとめ We are hiring! こんにちは。バックエンドエンジニアのshirakawaxです。 Mirrati…

macOSでもサクッと使える!Colimaで開発環境構築がカンタンになった話

こんにちは フロントエンドエンジニアの どじねこです。 今回はミラティブのバックエンド開発環境の 2025 年上半期の現状を皆様にご紹介します。 なお 2021 年 12 月 時点での情報が別記事にまとまっておりますので、ここからのアップデート情報と言う形でご…

MemoryPackでゲームのリプレイデータを作った話

こんにちは、Unityエンジニアのいも(@adarapata)です。 今回は、ミラティブのライブゲーム「スラポンコロシアム」で活用しているリプレイデータについてMemoryPackを使って作成した話をします。 スラポンコロシアムとは スラポンコロシアム(スラコロ)はMirra…

初心者3人でISUCONに参加してめっちゃ楽しめた件

こんいす!バックエンドエンジニアのogatasoです。 今回は12月8日に開催された ISUCON14 に、私とshirakawaさん、yamakuraさんの3人でチームMirrormanとして参加しました。全員ISUCON未経験の状態から挑戦し、楽しく学びの多い体験になったので、この記事で…

Android のプッシュ通知に利用していた FCM Legacy API を HTTP v1 に移行しました

目次 目次 背景 FCMとは 移行の流れ サービスアカウントキーを取得し、Goのライブラリに渡す メッセージの形式を決め、送信処理を書く ドキュメントのリトライポリシーに従ってエラーハンドリングを行う エラーハンドリングの概要 リトライポリシー 3% -> 10…

【Swift 6移行】サードパーティのClosureのSendable関連エラーを回避する

iOS開発の福山です。 現在Mirrativ iOSではSwift 6への移行を段階的に行なっています。その中でSwift 6に対応していないサードパーティライブラリに関連する問題にぶつかったため、その回避策を紹介します。 問題 open class Some3rdPartyClass { // サード…

Media Projection API の Android 14 QPR2 での変更点

はじめに こんにちは、Androidエンジニアの菅沼です。 ミラティブでは MediaProjection API を使用してリアルタイムに画面をキャプチャして配信を実現しています。 この MediaProjection API のスクリーンキャプチャの許可を求めるダイアログの仕様が 2024年…

Media Projection APIを使用した簡単なアプリを作成する

はじめに こんにちは、Androidエンジニアの菅沼です。 ミラティブは Android 5.0 (API Level 21)から実装された Media Projection API を使用して画面をキャプチャしてサーバーに送り、それを視聴者さんに映像として配信することでアプリを実現しています。 …

Android 15 QPR1 におけるMediaProjectionの変更点とMirrativの対応

こんにちは、Androidエンジニアの藤原です。 Android 15が配信されてから数ヶ月が経ちました。 Android ベータプログラムに参加しているとPixel端末にてQPR版のOSが入手できますが、そのAndroid 15 QPR1のバージョンでMirrativ Android版に影響のある変更が…

【ミラティブ】ISUCON14にスポンサーとして協賛します

こんにちは、ミラティブの野呂です。 ミラティブは、いよいよ今週末12月8日(日)に開催される「ISUCON14」に協賛します。 ISUCONとは ISUCONとはLINEヤフー株式会社が運営窓口となって開催している、お題となるWebサービスを決められたレギュレーションの中で…

Identity-Aware Proxy(IAP)を利用したローカル環境での開発体験の向上

こんにちは、バックエンドのリードエンジニア兼バックエンド基盤チームのマネージャーの夏(なつ)と申します。バックエンド基盤チームは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題を発見・解決している部署です。 今…