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

SpecをTruthにする:AIエージェント時代の大規模機能開発 〜 Checklist & Session Notesで"AIの文脈"を外部化する 〜
82
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアのユンです。 現在あるプロジェクトで、AIコーディングエージェントをフルに使って開発を進めています。その中で、作成・修正などの触るファイル数が増えてくると、AIの記憶力は目に見えて低下してました。細かい指示をせずに任せた結果、アーキテクチャルールを無視してControllerがUseCaseを経由せずRepositoryを直接呼び出したり、まだ存在しないメソッドを平気で呼び出したり。命名もUserRepositoryとuserRepoなど混在し、テストは「後で書きます」のコメントだけ、もしくはテストが落ちて修正を振り返るとセッション内のコンテキストを使い切りセ…
3日前
Go製ベンチマーカーによる分散オブジェクトストレージ「b3」のピーク性能検証
Mirrativ Tech Blog
ミラティブ社内製の分散オブジェクトストレージであるb3のピーク性能検証についてインターンの取り組み
1ヶ月前

ミラティブのバックエンド基盤チームのご紹介 〜開発者体験の向上とコスト最適化の取り組み〜
Mirrativ Tech Blog
こんにちは、バックエンドのテックリード兼バックエンド基盤チームマネージャーの夏(なつ)です。 採用面接などの場で「バックエンド基盤チームって具体的に何をしているの?」と聞かれることがよくありました。これまでもバックエンド基盤チームのメンバーが取り組んできた内容は、個別のテックブログとして紹介してきました。 2022/12/15 ミラティブのインターンで趣味開発と大規模開発のギャップを体験しました 2022/12/22 Goのtestingパッケージにコミットした話 2023/09/04 GitHub APIを利用したスケーラブルなマスターデータ管理システム 2024/02/29 Cloud B…
1ヶ月前

EnvoyでVM内のトラフィックをコントロールしてデプロイを高速化した
Mirrativ Tech Blog
こんにちは、ミラティブのインフラを担当している清水です。 ミラティブは2025年8月28日に10周年を迎え、ユーザーの皆さまに長年ご愛顧いただけて感謝の極みです。 一方で、長年の運用で刷新できないまま残ったレガシーなシステムもあり、古いものと新しいものを混在したまま運用を続けています。 過去記事でもサーバサイドの技術をPerlからGoへシステム移行することを紹介していますが、ミラティブのサーバサイドのアプリケーションは現在も継続してPerlからGoへ移行しています。 このため、GoとPerlをデプロイする必要があり、それぞれの言語特性にあったデプロイの仕組みでアプリケーションを更新しています。…
1ヶ月前

Pub/Sub障害からの学び:JSONメッセージをOpenAPI Validationで守る
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアの山倉です。 MirrativではPub/Subサーバーを使ってサーバー - クライアント間のリアルタイム通信を行っており、メッセージ形式はJSONを採用しています。HTTP APIについては従来からOpenAPI Validationをかけていましたが、Pub/Subサーバーで使われるJSONメッセージに対しては十分なバリデーションができていませんでした。 本記事ではJSONメッセージにOpenAPI Validationを適用する仕組みを導入した経緯と実装方法を紹介します。 きっかけは、サーバー - クライアント間のJSONの型不一致による障害でした。…
1ヶ月前

ModifierのdropShadowは何が新しいのかを考える
Mirrativ Tech Blog
Androidエンジニアの藤原(@fuji_tech7)です。 Jetpack Compose を使った UI 実装で、最近私が悩まされているのが Shadow(影)表現 です。 Material Design の仕様に忠実にしたい デザイナー指定の微妙な影を再現したい それでいてパフォーマンスは落としたくない こうした要求に対して、従来の Compose の shadow() API では 「微調整が難しい」「表現に限界がある」と感じています。 ミラティブでもFigmaで表現している影の再現に苦労する、または妥協案で許容してもらうことがありました。 Compose 1.9 では、こうした課題…
2ヶ月前

2026年の開発を気持ちよく始めるためのiOSDC Japan 2025セッションまとめ
Mirrativ Tech Blog
はじめに & 今年の振り返り みなさん、お疲れ様です!ミラティブのiOSエンジニア[いっちー]です。 年末が近づき、開発チームでもリリースやメンテナンス対応に追われる時期になりました。 思えば、iOSエンジニアにとっては今年もずっと忙しい1年間だったかもしれませんね? ちょうど1年ほど前にはCocoaPods Trunk Read-only Planが発表され、我々もSwift Package Managerへの完全移行を本格的に進め始めました。 さらに 5月にはAppleからTN3187: Migrating to the UIKit scene-based life cycleがリリースさ…
2ヶ月前

sqldefとkin-openapiにコントリビュートした話
Mirrativ Tech Blog
こんにちは、バックエンド基盤チームの徳森です。 バックエンド基盤チームでは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題の発見や解決を行っています。 今回は、チームでの具体的な業務内容の一部として、二つのOSSにコントリビュートした話を紹介します。 要約 バックエンド基盤チームでは定常業務として依存モジュールの更新を行っていますが、必要に応じてアップストリームへのコントリビュートも行っています。 今回はその中から、sqldef/sqldefとgetkin/kin-openapiに貢献した事例を紹介します。 ミラティブではバックエンド基盤チームを含め、技術的な課題…
3ヶ月前

DroidKaigi 2025 参加レポート
Mirrativ Tech Blog
Androidエンジニアの藤原(@fuji_tech7)です。9月10日〜12日に DroidKaigi 2025 が開催されました。 私はカンファレンスデーの11日、12日に参加してきたので、その内容をレポートします。 ミラティブは 2022 年から DroidKaigi に協賛しており、今年で4年目を迎えます。 tech.mirrativ.stream 更に今回はDroidKaigiカンファレンスアプリの開発リードを弊社のkitakkun (@kitakkun_pb)が務めていました。かなり大変だったと思いますがお疲れ様でした! (私自身、軽微ではありますがコントリビュートさせてもらいまし…
5ヶ月前

Dockerコンテナ上のプロセスが残り続ける問題をPTYを使って回避した話
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアのogatasoです。今回はDockerコンテナ上でプロセスが残り続けてしまう問題をPTY(pseudo terminal)を噛ませたタイムアウト処理で対応した話を紹介します。 はじめに ミラティブでは、開発環境や本番環境のMySQLのレコードを確認する際、sshで踏み台サーバに接続し、docker exec -it を使ってdockerコンテナ上でMySQL接続用のスクリプトを実行しています。しかし、このときMySQLクライアントのプロセスを終了させずにターミナルを閉じてしまうと、プロセスがサーバ上に残り続けてしまうという現象に悩まされていました。 原因調査…
5ヶ月前

次世代JS標準時刻API Temporal を3年先行利用して得た知見を共有します!
Mirrativ Tech Blog
Dateに代わる新たな日時表現・操作API Temporal を3年先行利用して得た知見を共有します!
6ヶ月前

【ミラティブ】iOSDC Japan 2025 にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの新嘉喜です。 ミラティブは、2025年9月19日(金)〜9月21日(日)に有明セントラルタワーホール&カンファレンス+ニコニコ生放送で開催される iOSDC Japan 2025 にスポンサーとして協賛させていただきます! iOSDC Japan 2025 については以下公式サイトをご覧ください。 iosdc.jp 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、ゲーム配信プラットフォーム「Mirrativ」を運営しています。 ミラティブは「Mirrativ Tech Community & Activity Policy」を掲げ、エンジ…
6ヶ月前

【ミラティブ】DroidKaigi 2025 にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの新嘉喜です。 ミラティブは、2025年9月10日(水)〜12日(金)の3日間にかけて開催される、「DroidKaigi 2025」に協賛することをお知らせいたします。 DroidKaigi とは 「DroidKaigi」は、Android技術情報の共有とコミュニケーションを目的に開催される、エンジニアが主役のAndroidカンファレンスです。 2025.droidkaigi.jp また、今年はミラティブのAndroidエンジニア kitakkun (@kitakkun_pb)が、DroidKaigi 2025 公式アプリの開発リードを担当しております! 公式アプリはオー…
6ヶ月前

Vaporを活用しMacとiPhone間で双方向通信を行う
Mirrativ Tech Blog
iOSチームの福山です。 Mirrativ iOSでは Flipper (Meta社のOSS) を使っていました。しかし Xcode 16.3 から Flipper が動かなくなるという事象が発生し、リポジトリもアーカイブされていることから、Vapor を利用して代替となる機能を作成しようと考えました。今回の記事では、その基礎となるサンプルの実装をご紹介します。 VaporはSwift言語で書かれたオープンソースのWebフレームワークです。 サンプル作成のフローは次のようになります。 VaporでMac上のWebブラウザにWebページを表示するローカルサーバーをたてる VaporでWebSoc…
6ヶ月前

みんなの「スキ」でつながろう! Mirrativ LT Party 2025Q1 を開催しました
Mirrativ Tech Blog
はいこんにちは!フロントエンドやらバックエンドやらUnityやらなんでもやってるエンジニアの どじねこ です。 今回は少し前の話題になりますが、2025年3月12日に社内で開催した「Mirrativ LT Party 2025Q1」をご紹介します。 よろしければ過去に開催したLT会についてもご覧ください。 tech.mirrativ.stream tech.mirrativ.stream
6ヶ月前

App Storeの返金情報を取得する方法
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアのogatasoです。 Mirrativでは、配信者にギフトを贈る際に必要なコインをアプリ内課金で購入できます。 今回、不正の検知と対策を目的として、過去および今後のすべての返金履歴を取得し、データベースに取り込む仕組みを導入しました。 本記事では、App Storeから送られてくる返金通知をリアルタイムで受け取る方法と、過去の課金が返金されていないか調べる方法について解説します。 目次 目次 App Store Server Notificationsとは 設定 テスト通知を送る JWTの生成 通知の検証とデコード サンドボックス環境でREFUND通知を取得…
7ヶ月前

Renovateをセルフホスト with Google Cloud & Go
Mirrativ Tech Blog
こんにちは、バックエンド基盤チームの藤井脩紀です。 バックエンド基盤チームは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題を発見・解決している部署です。 このチームではCIの整備や依存関係の更新なども担当しており、その一環としてRenovateというソフトウェアのセルフホストを行ったのでそれについてお話しさせてください。 目次 Renovateとは セルフホストに至った背景 セルフホスト GitHubの下準備 Cloud Buildの設定 構成ファイルを準備 script/create-github-token.sh cloudbuild.yaml シークレット…
7ヶ月前

シェーダーでアニメーションカーブを使う
Mirrativ Tech Blog
こんにちは、Unityエンジニアのrioil(@rioil_dev)です。 Mirrativの3Dアバター(エモモ)の描画には、カスタム実装されたシェーダーを使用しています。 カスタムシェーダーにテクスチャシートを用いたアニメーション機能を追加するにあたって、シェーダーでアニメーションカーブを使えるようにしたため、今回はその方法を解説します。 検討した方法 アニメーションカーブをシェーダーで使う方法として、以下の2つの方法を検討しました。 毎フレーム、スクリプトでアニメーションカーブの値を計算して、マテリアルのプロパティにセットする アニメーションカーブをテクスチャにベイクして、シェーダーで参…
7ヶ月前

【ミラティブ】CEDEC2025 にスポンサーとして登壇 & 協賛します
Mirrativ Tech Blog
こんにちは、ミラティブの広報の新嘉喜です。 ミラティブは、2025年8月22日(火)〜24日(木)に開催される「CEDEC 2025」に、スポンサーとしてセッション登壇と協賛をすることを決定いたしました。 ※CEDEC2025については、公式サイトをご覧ください https://cedec.cesa.or.jp/2025/ セッションの内容は、以下の通りです。 ミラティブ登壇者によるセッション 登壇者 井本 大登(技術戦略本部 技術部 Unityグループ マネージャー)@adarapata タイトル ライブゲームという新しい遊びの作り方 〜スラポンコロシアム開発事例から学ぶ配信者・視聴者一体型…
8ヶ月前

AtCoderで ミラティブ プログラミングコンテスト2025 を開催します
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアの makino です! この度、ミラティブは 2025年7月12日(土) にAtCoderにおいて ミラティブ プログラミングコンテスト2025 を開催します。 atcoder.jp 私自身、数年前まで競技プログラミングに熱心に取り組んでおり、夜な夜なコンテストに参加してはレートの増減に一喜一憂する日々を過ごしていました。 今では競技プログラミングから少し離れていますが、あのとき培ったスキルや知識は、日々の業務に確実に活かされていると感じています。 そんな自身の経験から、「AtCoderユーザーにもっとミラティブを知ってもらいたい」「一緒に働く仲間になってほ…
8ヶ月前

Jetpack ComposeのonLayoutRectChangedとonGloballyPositionedを比較してみた
Mirrativ Tech Blog
こんにちは、Androidエンジニアの藤原(@fuji_tech7)です。 先日、Google I/Oが開催され新しいJetpack Composeが発表されました。 www.youtube.com AutoSize textやMaterial Expressiveなど気になるものは多いのですが、個人的にはModifierに追加されたonLayoutRectChangedが最も気になっています。 onLayoutRectChangedを簡単に説明すると、Composableの座標やサイズを取得する現行のonGloballyPositionedに近いものになっています。 今回はonLayoutR…
8ヶ月前

Jetpack Composeのスクロール可能なTabRowにminWidthが設定できるようになります
Mirrativ Tech Blog
こんにちは、Androidエンジニアの藤原(@fuji_tech7)です。 Jetpack ComposeのコンポーネントにScrollableTabRowがあります。 TabRowが指定領域にタブを敷き詰めて配置するのに対しScrollableTabRowはスクロール可能にすることでより多くのタブを配置することができます。 ただし、ScrollableTabRowは制限があり期待するレイアウトを作れませんでした。 その一つがScrollableTabRow内の子要素であるTabにminWidthを設定できないことです。 この課題について、最近動きがありましたので紹介します。 本記事内では正式…
10ヶ月前

iOS 18 x AirPods Pro2 で配信の音声が聞こえづらいことがある問題の調査
Mirrativ Tech Blog
こんにちは、エンジニアのちぎら(@_naru_jpn)です。ゲーム配信アプリであるミラティブではイヤホンを使用しながら配信をすることができますが、動作の安定のために 有線のイヤホンの使用を推奨しています。 昨年 iOS 18 がリリースされてから、稀に AirPods Pro2 で配信の音声が途切れるといったようなお問い合わせがユーザーさんから届くようになりました。サービスとしては無線のイヤホンは推奨していないものの、技術的にどのような事象が発生しているのかは興味がありました。今回は ReplayKit を介して取得した音声の波形を手軽に記録・可視化できるようにした仕組みの話と、その調査結果を…
10ヶ月前

ビジネス職向けに、Webプログラミング研修をしました。
Mirrativ Tech Blog
こんにちは、ミラティブでデータ分析基盤を担当しております芝尾です。 ミラティブでは本年度新卒研修の一環として、エンジニアではないビジネス職向けに、Web開発の研修を行いました。 Web開発研修の様子 研修の目的 この研修の目的は、ビジネス職にエンジニアになってもらおうという意図ではなく、以下のことを意図しています。 エンジニアがどのようなことをしているかをざっくり知ってもらう。 Webの基礎的な概念(HTTP,TCP,DNSなど)を知ってもらう。 研修背景 Web開発では、ビジネス職が企画を考えその企画職の考えた仕様を元にエンジニアが機能を実装することは一般的です。 Web開発を体験してもらう…
10ヶ月前

Swift Macroを事前コンパイルしてビルドを高速化!.xcodeprojとSwift Packageへの導入方法
Mirrativ Tech Blog
iOSチームの福山です。 Mirrativ iOSの開発ではSwift Macroを使ってイニシャライザやXcode Previews用のダミー要素を生成するなど活用しています。 しかし、ビルドが成功するにもかかわらず、Swift Macroが展開するコードを利用する部分でエラーが表示されることがありました。XcodeのコンパイルチェックとSwift Macroの展開するタイミングがずれて上手く機能していないのではないかと調べているうちに、Swift Macroをバイナリ化して使う方法があることを知りました。 結果的に表示のみのエラー解消に加えてクリーンビルドの時間を1分以上(約16%)短縮で…
1年前

【ミラティブ】try! Swift Tokyo 2025にスポンサーとして協賛します
Mirrativ Tech Blog
こんにちは、ミラティブのエンジニア採用担当の野呂です。 いよいよ明日、Swiftに関する世界的な技術カンファレンス 「try! Swift Tokyo 2025」 が開催されます! 株式会社ミラティブは、ブロンズスポンサーとして協賛させていただいております。 try! Swift とは Swiftに関する国際的なカンファレンスです。Swiftの開発のコツや最新の事例を共有し、スキルを磨くことを目的としています。 開催日時: 2025年4月9日(水)〜11日(金) 場所: 立川ステージガーデン 公式URL: try! Swift Tokyo 協賛する背景 ミラティブは、ミッションである「わかり…
1年前

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

時間がかかっていた 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 開幕💃⁾⁾\\💥新モード💥🎶🪩パーリーチャンス🪩🎶が登場…
1年前