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

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

時間がかかっていた git status を Trace2 で計測しながら10倍速くした話
Mirrativ Tech Blog
環境 改善前 改善前計測 untrackedcacheを使った高速化 file system monitorを使った高速化 サブモジュールをオフにして高速化 Appendix: Gitバージョンアップ実験結果 まとめ We are hiring! こんにちは。バックエンドエンジニアのshirakawaxです。 Mirrativのバックエンドリポジトリのgit statusが遅かったので1.941秒 → 0.173秒に改善した話を書きます。 環境 Apple M1 Max メモリ 64 GB macOS Sonoma 14.4 $ git -v git version 2.39.3 (Apple…
1ヶ月前

macOSでもサクッと使える!Colimaで開発環境構築がカンタンになった話
Mirrativ Tech Blog
こんにちは フロントエンドエンジニアの どじねこです。 今回はミラティブのバックエンド開発環境の 2025 年上半期の現状を皆様にご紹介します。 なお 2021 年 12 月 時点での情報が別記事にまとまっておりますので、ここからのアップデート情報と言う形でご覧いただけるとより楽しめると思います。よろしければ併せてご覧ください。 tech.mirrativ.stream Multipass での運用と課題 2021 年 12 月 時点ではミラティブのバックエンド開発では Multipass を活用して VM 上でサーバーアプリケーションの実装が行われていました。より厳密には VM 上で doc…
1ヶ月前

MemoryPackでゲームのリプレイデータを作った話
Mirrativ Tech Blog
こんにちは、Unityエンジニアのいも(@adarapata)です。 今回は、ミラティブのライブゲーム「スラポンコロシアム」で活用しているリプレイデータについてMemoryPackを使って作成した話をします。 スラポンコロシアムとは スラポンコロシアム(スラコロ)はMirrativアプリ上で動作するライブゲームです。 他のライブゲームにも登場するスラポンなどのモンスターたちが戦う闘技場で、誰が最後まで生き残るかを予想するゲームです。 視聴者も配信者も一緒になって遊べるのが特徴です。 【1/23 ~ 1/30】//#スラコロ Vol.35 開幕💃⁾⁾\\💥新モード💥🎶🪩パーリーチャンス🪩🎶が登場…
2ヶ月前

初心者3人でISUCONに参加してめっちゃ楽しめた件
Mirrativ Tech Blog
こんいす!バックエンドエンジニアのogatasoです。 今回は12月8日に開催された ISUCON14 に、私とshirakawaさん、yamakuraさんの3人でチームMirrormanとして参加しました。全員ISUCON未経験の状態から挑戦し、楽しく学びの多い体験になったので、この記事で共有したいと思います。 ISUCONとは? ISUCON とは「Iikanjini Speed Up Contest」の略で、与えられた遅いWebサービスを制限時間内にどれだけ高速化できるかを競うコンテストです。 パフォーマンス改善を目的にインフラからアプリケーションまで多くのレイヤーに跨る技術知識を要求さ…
2ヶ月前

Android のプッシュ通知に利用していた FCM Legacy API を HTTP v1 に移行しました
Mirrativ Tech Blog
目次 目次 背景 FCMとは 移行の流れ サービスアカウントキーを取得し、Goのライブラリに渡す メッセージの形式を決め、送信処理を書く ドキュメントのリトライポリシーに従ってエラーハンドリングを行う エラーハンドリングの概要 リトライポリシー 3% -> 10% -> 25% -> 50% -> 75% -> 100% と段階的にリリースする We are hiring! ミラティブでは一緒に開発してくれるエンジニアを募集しています! 背景 こんにちは、ミラティブの2024年新卒の山倉です。この記事ではプッシュ通知のAPIを移行するにあたって得た学びを共有したいと思います。 ミラティブではプ…
2ヶ月前

【Swift 6移行】サードパーティのClosureのSendable関連エラーを回避する
Mirrativ Tech Blog
iOS開発の福山です。 現在Mirrativ iOSではSwift 6への移行を段階的に行なっています。その中でSwift 6に対応していないサードパーティライブラリに関連する問題にぶつかったため、その回避策を紹介します。 問題 open class Some3rdPartyClass { // サードパーティのライブラリなので変更が容易ではない open func doSomething(completion: @escaping (Bool) -> Void) { } } // ------------------------- final class SomeSubclass: Some…
3ヶ月前

Media Projection API の Android 14 QPR2 での変更点
Mirrativ Tech Blog
はじめに こんにちは、Androidエンジニアの菅沼です。 ミラティブでは MediaProjection API を使用してリアルタイムに画面をキャプチャして配信を実現しています。 この MediaProjection API のスクリーンキャプチャの許可を求めるダイアログの仕様が 2024年3月にリリースされた Pixelシリーズ向けの Android 14 FeatureDrop (Android 14 QPR2) 以降から仕様変更がありました。 つまり Android 15 以降のみではなく Android 14 の途中のバージョンでも変化したという点に注意です。 公式のソースはこちら…
3ヶ月前

Media Projection APIを使用した簡単なアプリを作成する
Mirrativ Tech Blog
はじめに こんにちは、Androidエンジニアの菅沼です。 ミラティブは Android 5.0 (API Level 21)から実装された Media Projection API を使用して画面をキャプチャしてサーバーに送り、それを視聴者さんに映像として配信することでアプリを実現しています。 今回は画面をキャプチャする部分にフォーカスし、配信はせず画面をそのまま端末上で表示するだけのシンプルな実装を行う方法を紹介させていただこうと思います。 Media Projection API の公式のドキュメントはこちらにあります。 developer.android.com 順を追って実装してみる…
3ヶ月前

Android 15 QPR1 におけるMediaProjectionの変更点とMirrativの対応
Mirrativ Tech Blog
こんにちは、Androidエンジニアの藤原です。 Android 15が配信されてから数ヶ月が経ちました。 Android ベータプログラムに参加しているとPixel端末にてQPR版のOSが入手できますが、そのAndroid 15 QPR1のバージョンでMirrativ Android版に影響のある変更があったので紹介します。 Android 15 QPR1での変更点とMirrativへの影響 developer.android.com 公式にも記載されていますが、アプリ内で画面共有を行っている際に、ステータスバーに画面共有中であることを示すチップが表示されるようになります。 画面共有中である…
4ヶ月前

【ミラティブ】ISUCON14にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの野呂です。 ミラティブは、いよいよ今週末12月8日(日)に開催される「ISUCON14」に協賛します。 ISUCONとは ISUCONとはLINEヤフー株式会社が運営窓口となって開催している、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです。 isucon.net 協賛する背景 ミラティブは、「わかりあう願いをつなごう」をミッションに、配信者数500万人超のゲーム配信サービス「Mirrativ」を運営しています。 「Mirrativ」では、配信者と視聴者がリアルタイムに繋がり、ゲーム配信や雑談など、様々なコミュニケーシ…
4ヶ月前

Identity-Aware Proxy(IAP)を利用したローカル環境での開発体験の向上
Mirrativ Tech Blog
こんにちは、バックエンドのリードエンジニア兼バックエンド基盤チームのマネージャーの夏(なつ)と申します。バックエンド基盤チームは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題を発見・解決している部署です。 今回は基盤チームが行った、Google CloudのIdentity-Aware Proxy(IAP)を利用したローカル環境での開発体験の向上について紹介したいと思います。この改善により、ローカル環境(Mac)上でも開発環境のデータを参照しながら開発が行えるようになり、開発体験が大幅に向上しました。 背景 基盤チームでは定期的にバックエンドチームのメンバーに対…
4ヶ月前

StorybookとVitestではじめるフロントエンドのかんたん自動テスト
Mirrativ Tech Blog
こんにちは フロントエンドエンジニアの どじねこ です。 今回は Storybook 8.3 から追加された Vitest 統合機能を活用して、フロントエンドアプリの自動テストを強化した事例をご紹介します。 Storybook とは storybook.js.org Storybook は OSS として開発される UI コンポーネントワークショップです。 具体的には、フロントエンドアプリケーションの UI コンポーネントを開発する際の作業環境、ドキュメンテーションツール、テスティングフレームワークとして活用できる開発環境が提供されます。 React や Vue、Angular、Svelte、…
4ヶ月前

iOS 18 で Animated WebP 再生時のパフォーマンスが著しく悪くなった問題と対応
Mirrativ Tech Blog
こんにちは、iOSエンジニアのいっちー(@0IcchI)です。 ミラティブでは、iOS 18のリリースに備えて、アプリ上に新しい不具合が発生していないかの調査とその対応を進めてきました。 その過程でAnimated WebPの再生に起因する致命的な不具合に出会ったので問題とその対応について紹介します。 背景 ミラティブではアプリ内で画像を表示する際にSDWebImageを使用しており、Animated WebPの再生にも用いています。 SDWebImageはAnimated WebPの再生に2種類のコーダーを提供しています。 SDImageAWebPCoder iOS標準のImageIOフレー…
5ヶ月前

iOSDC Japan 2024のセッションを振り返る社内勉強会を開催しました!
Mirrativ Tech Blog
こんにちは!iOSエンジニアのmuneです。 今回は、2024年8月22日(木)〜8月24日(土)に開催されました iOSDC Japan 2024 について、セッション内容を振り返る勉強会を社内で開催いたしましたので、その様子をご紹介します! ミラティブはiOSDC Japan 2024をスポンサーとして協賛しております。 tech.mirrativ.stream 勉強会の前に:会場でのエピソード 今年のiOSDCからはスポンサーブースを楽しく回れるようスタンプ形式のビンゴの取り組みが行われていました。 弊社メンバーもスタンプを押してもらいながら気軽にスポンサーブースに立ち寄れるのでとても良…
5ヶ月前

DroidKaigi 2024 参加レポート
Mirrativ Tech Blog
Androidエンジニアの北川と藤原です。9月11日〜13日に開催された DroidKaigi 2024 に参加してきました! 3日間濃密な時間を過ごしてきましたので、その内容をレポートします。 ミラティブは 2022 年から DroidKaigi に協賛しており、今年で3年目を迎えます。 tech.mirrativ.stream Workshop Day 1日目は、JetBrainsのSebastian Aignerさんによるワークショップ「From 0 to 100 with Kotlin and Compose Multiplatform」が開催されました。 github.com こちら…
6ヶ月前

【ミラティブ】DroidKaigi 2024 にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの野呂です。 ミラティブは、2024年9月11日(水)〜13(金)の3日間にかけて開催される、「DroidKaigi 2024」に協賛します。 DroidKaigi とは 「DroidKaigi」は、Android技術情報の共有とコミュニケーションを目的に開催される、エンジニアが主役のAndroidカンファレンスです。 2024.droidkaigi.jp 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、ゲーム配信プラットフォーム「Mirrativ」を運営しています。 ミラティブは「Mirrativ Tech Community & Act…
7ヶ月前

メンバーの「スキ」をわかりあいたい!フロントエンドのLT会を開催しました
Mirrativ Tech Blog
こんにちは!フロントエンドエンジニアの どじねこ です。 今回は少し前となりますが 2024年5月に社内で開催したLT会についてご紹介したいと思います。 よろしければ先日公開されました「iOS・Android 合同のLT大会を開催しました!」も合わせてご覧ください tech.mirrativ.stream
7ヶ月前

iOS・Android 合同のLT大会を開催しました!
Mirrativ Tech Blog
こんにちは!Androidエンジニアの kitakkun です。 今回は、7月半ばに社内で実施した iOS・Android 合同のLT大会についてご紹介します。 モバイルエンジニアの社内勉強会事情 ミラティブでは、Androidチーム・iOSチーム双方が定期的に社内勉強会を実施しています(執筆時点ではAndroid隔週・iOS毎週)。 イベントのセッション動画を見たり、技術系記事の読み合わせをし、チームの方針決めや知見を広げるための時間として使っています。 例えば直近 Android チームでは、Kotlin Conf 2024 の「Guide to Improving Compose Per…
7ヶ月前

【ミラティブ】iOSDC Japan 2024 にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの野呂です。 ミラティブは、2024年8月22日(木)〜8月24日(土)に早稲田大学理工学部西早稲田キャンパス+ニコニコ生放送で開催される iOSDC Japan 2024 にスポンサーとして協賛させていただきます! iOSDC Japan 2024 については以下公式サイトをご覧ください。 iosdc.jp 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、ゲーム配信プラットフォーム「Mirrativ」を運営しています。 ミラティブは「Mirrativ Tech Community & Activity Policy」を掲げ、エンジニアの社…
8ヶ月前

ログ基盤のFluentdをFluent Bitに移行して監視ツールを実装した話
Mirrativ Tech Blog
はじめまして、Azuma(@azuma_alvin)です。現在大学院の1年生で、2024年2月から4ヶ月間ミラティブのインフラチームにインターンとして参加しました。普段はインフラやMLOpsといった領域に興味があり、最近はVim環境の整備がマイブームです。 本記事では、ログ基盤をFluentdからFluent Bitへ部分移行した経緯とその2種類の監視ツールの実装についてお話しします。 記事の最後に、インターンから見たインフラチームの特徴と私が4ヶ月間で学んだことを紹介しています。興味がある方は末尾までスクロールしてぜひご覧ください。 1. 背景と目的 2. ミラティブのログ基盤について 3.…
9ヶ月前

AddressableによりWebGLゲームのクラッシュ率が改善した話
Mirrativ Tech Blog
こんにちは、ミラティブ菅谷です。MirrativのWebGL製ライブゲームにて、アセットのロード方法をインスペクタでの直接参照からAddressable Asset System(以下Addressable)に変更したことで、クラッシュ率が大幅に改善し、クラッシュせずにプレイが終了した「正常プレイ率」は98%まで改善しました。本記事では、その具体的な手順と効果について紹介します。 課題背景 MirrativのライブゲームはWebGLで動いていますが、特にモバイルのWebGLではパフォーマンスに気をつける必要があります。今回改善を行ったプロジェクトではもともとAddressableを使用していま…
10ヶ月前

Kotlin Fest 2024 にミラティブのAndroidエンジニアが登壇します!
Mirrativ Tech Blog
こんにちは!Androidエンジニアの kitakkun(@kitakkun_pb)です。 6月22日 開催の Kotlin Fest 2024 にて、ミラティブから私が登壇します! www.kotlinfest.dev 登壇内容 ロング(40分) 2024/06/22 14:50〜 トラック2 もっとKotlinを好きになる!K2時代のKotlin Compiler Plugin開発 by kitakkun fortee.jp 本セッションでは、Kotlin Compiler Pluginの仕組みやその開発方法に興味をお持ちの方を対象として、 Kotlin Compilerの基礎知識、各種C…
10ヶ月前

memcached proxyで使うハッシュアルゴリズムを比較した話
Mirrativ Tech Blog
memcached proxyのハッシュアルゴリズム比較 はじめまして!hibikiです(@add_bakkers) 現在大学3年生で、最近はネットワークに興味があり勉強中です。2023年8月からインフラチームにインターンとして参加しました。 本記事ではmemcached proxyのハッシュアルゴリズム比較の結果を紹介します。 memcached proxyのハッシュアルゴリズム比較 1. 背景と目的 ミラティブでのmemcachedの利用 課題: クライアントサイドでサーバ決定をしている memcached proxyの検討 2. memcached proxyに求められるアルゴリズム キ…
10ヶ月前

CLIツールの管理をSPMからMintに移行した経緯とその課題
Mirrativ Tech Blog
はじめに お久しぶりです、iOSチームにインターンとして参加させて頂いておりますMと申します。 MirrativのiOSアプリでは、これまでSwift製のCLIツールをBuildToolsという名前のSwift Packageを作成してこれにまとめて管理していました。 しかしこの度、ある課題や利便性の観点からyonaskolb/Mintでの管理に移行しました。 今回はMintへの移行に至るまでの背景や経緯、および移行に際して起こったいくつかの課題をどのように解決したかについて書いていこうと思います。 目次 はじめに 目次 Mintへの移行に至る背景 CLIツールの利用 SPMによる管理における…
10ヶ月前

【ミラティブ】Go Conference 2024 にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの野呂です。 ミラティブは、2024年6月8日(土)にAbema Towersで開催される Go Conference 2024 に協賛させていただきます! Go Conference 2024については以下公式サイトをご覧ください。 gocon.jp 協賛する背景 ミラティブはミッションである「わかりあう願いをつなごう」のもとゲーム配信プラットフォーム「Mirrativ(ミラティブ)」を運営しています。 そして「Mirrativ Tech Community & Activity Policy」を掲げ、ミラティブエンジニアの社内外への発信を強く奨励しています。 ミラティ…
1年前

PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜
Mirrativ Tech Blog
こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレ…
1年前

SwiftGenとSwift-DocCを活用してコード上の画像を一瞬でプレビューする方法
Mirrativ Tech Blog
こんにちはiOS開発をしている福山です。 この記事では、SwiftGenとSwift-DocCを用いて、xcassetsを開かずにコード内の画像をQuick Help(右パネルまたは⌥オプションキー+クリック)で直接確認する方法を紹介します。 各ツールの簡単な説明 Swift-DocCは、Swift言語用のドキュメント生成ツールです。Swiftコード内に書かれたコメントから、ナビゲーションが容易で、見た目も美しいドキュメントを生成することができます。 SwiftGenは、Xcodeプロジェクトで使われるリソース(画像、フォント、色、ローカライズなど)を静的に型付けされたSwiftコードに変換す…
1年前

モバイルアプリ上の WebAssembly 製ライブゲームで発生した例外を捕捉して計測する
Mirrativ Tech Blog
こんにちは、エンジニアのちぎら(@_naru_jpn)です。ミラティブでは、配信中のゲームに視聴者が介入できるゲームとライブ配信が融合した次世代のゲーム体験を提供しており、この体験を ライブゲーミング と呼んでいます。 ライブゲーミングは、Unity から WebGL 向けにビルドされた WebAssembly 製のゲームを、アプリに配置したウェブブラウザ上で動作させることによって実現しています。*1 今回は UnityでモバイルWebGLゲーム開発を頑張る話 の「メモリリークによって発生するクラッシュ」にも書かれているような、捕捉は難しいがユーザー影響があるような例外の発生を捕捉して、計測を…
1年前

Neural Audio Codec を用いた大規模配信文字起こしシステムの構築
Mirrativ Tech Blog
こんにちは ハタ です。 最近Mirrativ上に構築した配信の文字起こしシステムを紹介したいなと思います 音声からの文字起こしは、各社SaaSでAPI提供されているものがあると思いますが、今回紹介するものはセルフホスト型(自前のGPUマシンを使う)になります 構築していく上で色々試行錯誤したのでそれが紹介できればなと思っています どんなものを作ったか 前提知識: 配信基盤 前提知識: Unix Domain Socket Live Recorder Archiver DS Filter VAD Filter NAC / Compress Transcriber NAC / Decompres…
1年前