Mirrativ Tech Blog

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

Neural Audio Codec を用いた大規模配信文字起こしシステムの構築

こんにちは ハタ です。 最近Mirrativ上に構築した配信の文字起こしシステムを紹介したいなと思います 音声からの文字起こしは、各社SaaSでAPI提供されているものがあると思いますが、今回紹介するものはセルフホスト型(自前のGPUマシンを使う)になります 構…

Cloud BuildでDockerのマルチプラットフォームイメージをビルド

こんにちは、バックエンドエンジニアの藤井脩紀です。 今回は表題の通りCloud Buildを活用してDockerのマルチプラットフォームイメージをビルドする方法をご紹介しようと思います。 マルチプラットフォーム is 何 まず、マルチプラットフォームイメージとは…

input type=“date” の沼から、ライブラリを導入する意義を考える

はじめまして!2023年7月からミラティブでフロントエンドインターンをしております、かずえもんと申します 今回は、インターンでの作業中にハマってしまった Safari のバグについて調査していたら、なんと10年モノの issue だったことが判明し、ライブラリを…

ミラティブCTO交代の挨拶

みなさまこんにちは、ちぎら @naru_jpn とよこて @n0mimono です。noteの方に対談を掲載していますが、テックブログのほうでも記事を書いてみようと思います。社内外の多くの方に読んでいただければ幸いです。 note.com prtimes.jp CTOを交代しました! 今の…

iOSプロジェクトに対してモジュール分割しながらSwiftUIを部分適用している事例

iOS

こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 MirrativのiOSチームでは、開発効率の最大化を狙い以下に取り組んでいます。 データフローの単方向化 (Fluxアーキテクチャの強制) 宣言的UIによるView実装 (SwiftUIの部分適用) 責務分割 (モジュー…

UnityチームでGodot勉強会をしました

こんにちは、ミラティブ菅谷です。ミラティブではUnityチームで定期的に勉強会を行っています。今回はその取り組みの一つとして行ったGodot勉強会について紹介します。Unityエンジニアから見たGodotの特徴や触ってみての感想を記載しました。 背景:Unityラ…

クラウドネイティブなVPNを構築して運用している話

インフラストリーミングチームの近藤(@udzura)です。 今日は、ミラティブ社内向けツールの話をします。ミラティブではVPNの仕組みをクラウドをフル活用して自前で構築し、1年ほど運用しています。運用中にいろいろ課題はありつつ、現在かなり安定して動作…

サービスの管理画面を継続的に改善するためのReact Hook FormとZod活用術

こんにちは!ミラティブのフロントエンドエンジニア どじねこ です。 今回は、ミラティブを支える社内向けの管理システムにおいて、機能開発の体験を改善する取り組みを「MUI と Zod、React Hook Form の活用術」としてご紹介させていただきます。 前提 ミラ…

インターン中、タスクに付随する予想外のエラーと戦った話

初めまして。9月から10月にかけて、インターンとしてミラティブのバックエンド基盤に関わっていた、logicaと申します。 今回は、期間中に扱っていたある1つのタスクにフォーカスしながら、インターンを振り返りたいと思います。 割り当てられたタスク 背景 …

【Go】time.Time.AddDateの注意点と対策

こんにちは、バックエンドエンジニアの藤井脩紀です。 今回の記事では日付計算に潜む罠についてお話しさせていただきます。 なお今回はGoでの事例をご紹介しますが、原理的には他の言語やライブラリでも同様の事象が発生する可能性があります点にご注意くだ…

内製オブジェクトストレージサーバ「b3」でコスト最適化を目指した話

ミラティブで内製しているオブジェクトストレージサーバ「b3」の紹介記事を書きたいと思います。 今回の記事は、6月にGopher Talkというイベントで発表した「Go製ミドルウェアを実践投入するにあたりやったこと」をベースに、内容を詳細にしたり直近の開発状…

SwiftyJSONからDecodableへ移行する際に気をつけてよかったこと

こんにちは、iOSエンジニアのいっちー(icchi (@0IcchI) / X)です。 MirrativのiOSアプリでは4年ほど前にレスポンスパラメータとレスポンスクラスのマッピングにDecodableを採用したAPIクライアントを作成し運用してきました。 新規の実装ではDecodable対応の…

【インフラ】xDS API の EDS に手を加えて動的に Envoy で weight 調整できるようにした

こんにちは、ミラティブのインフラを担当している清水です。 ミラティブではクラウドに Google Cloud を利用しているのですが、稀にインスタンスの性能劣化が発生し動かしているアプリケーションの応答時間が長くなることがあります。 非同期な処理の場合は…

DroidKaigi 2023に参加しました!

こんにちは。Androidエンジニアの北川と久賀です。去年に続き、今年も参加させていただきました!今年は2人とも3日間フルで参加し、本記事ではそこで経験したこと、学んだことを紹介いたします。 DroidKaigi2023について 2023.droidkaigi.jp 去年の記事はこ…

ミラティブでのアウトゲーム設計の紹介

こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。 今回はミラティブのライブゲーム開発で行ったアウトゲームの設計について紹介します。 以前アウトゲーム設計に関してXでポストしたらレスポンスをいただけたのでできるだけ丁寧に解説してみま…

Mirrativ iOSアプリでのメモリ使用量削減への取り組み

こんにちは、iOSエンジニアのふじのです。 Mirrativの機能開発を進める傍ら、iOSアプリのメモリ使用量の改善に取り組んでいます。 今回は、アプリ内でメモリ使用量を増やしている問題点を見つける方法と、それらをクライアント実装で解決する具体的なアプロ…

GitHub APIを利用したスケーラブルなマスターデータ管理システム

こんにちは、バックエンド基盤チームマネージャーの夏(なつ)と申します。ミラティブの基盤チームはユーザが直接触れる機能よりかは、開発者や会社全体の生産性を向上させるためにエンジニア主導で課題を発見・解決している部署です。 今回は基盤チームが主…

UnityでモバイルWebGLゲーム開発を頑張る話

こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。 ミラティブのライブゲームはUnityで開発し、MirrativアプリのWebGLで動いています。 ライブゲームを支える仕組みと実際のライブゲーム開発で使用した技術については過去の記事で紹介していま…

あてっこ!ぷにまるずで利用したVisualScriptingとデザイナーフレンドリーな開発

皆さんこんにちは。Unityエンジニアのおはぎです。 ミラティブでは先日「あてっこ!ぷにまるず」(以下ぷにまるず)というライブゲームをリリースしました。 使っている技術については以下の記事に概要が書かれています。 tech.mirrativ.stream 本稿ではその…

【Go/GCP】ライブゲーム「あてっこ!ぷにまるず」を支えるバックエンド技術

ライブゲーム「あてっこ!ぷにまるず」のバックエンド技術について紹介します。

あてっこ!ぷにまるずを支える技術紹介 〜モバイルWebGLの開発事例〜

Unityエンジニアのいも(@adarapata)です。 みなさんはUnityでWebGLプラットフォーム開発していますか? ミラティブでは先日「あてっこ!ぷにまるず」というライブゲームをリリースしました。 これはモバイルブラウザで動くWebGLです。 PCブラウザ想定のWebGL…

Unityチームでの輪読会の取り組み紹介とUniRx/UniTaskクイズ

こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。Unityチームの一員として、私たちが週に1時間を費やして行っている輪読会について紹介したいと思います。輪読会では、チーム内で読む本を都度決め、それを読み進めていきます。これまでにはパ…

iOSプロジェクト内の神クラス解体の進め方

iOS

こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 Mirrativでは、リアルタイムの配信視聴時のコメントやギフト機能を実現するために、WebSocket ベースの仕組みを利用して、サーバー・クライアント間でPub/Subのメッセージングを行っています。*1 …

Flipperを使ったiOSアプリの開発体験向上&iOSエンジニア目線でのミラティブ社の魅力について

iOS

はじめに 初めまして!Mと申します。 私は、2022年8月中旬より現在まで、iOSチームでインターンとして参加させて頂いています。 (実はこのミラティブのTechブログを読んだことがきっかけで、インターンに参加することになりました) これまでの期間、特に私…

Go Conference 2023 にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルでお話してきました

こんにちは ハタ です。 このたび Go Conference 2023 Online にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルで発表しました 久しぶりの大きなカンファレンスでの登壇だったのでとても緊張しましたが、10周年を迎えた機会に登…

新しいUnity AnalyticsとUnity Cloud Diagnosticsの紹介と使い方

こんにちは。ミラティブUnityエンジニアの菅谷です。今回はUnityのサービスであるUnity AnalyticsとUnity Cloud Diagnosticsについて紹介します。2つのサービスはゲーム開発者がゲームのパフォーマンスを追跡し、ユーザーエクスペリエンスを改善するための強…

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

こんにちは、ミラティブの野呂です。 2023年6月2日(金)に開催される Go Conference 2023にて、ミラティブから2名のエンジニアが登壇します。さらに、ミラティブもスポンサーとして協賛をさせていただきます! Go Conference 2023については以下公式サイトを…

iOSの音声読み上げ時のメモリ消費量について

iOS

こんにちはミラティブ2年目突入の福山です。 今回は、ユーザーが追加でインストール可能な拡張版の読み上げ音声がiOS 16で多くのメモリを消費するということがわかったので、ライブ配信用のアプリ拡張内で対策を行いました。 メモリ使用量50MB制限 Mirrativ…

LeSS Huge を参考にしたスクラムのスケーリング

こんにちは、エンジニアのちぎらです。先日 開発組織にはじめてのスクラムを導入する という記事を公開しました。先日の記事にも課題として記述した通り、組織の一つのチームにスクラムを導入した後は、他のチームにどのようにスクラムを展開していくか、全…

Jetpack ComposeにおけるViewの多重タップ、複数同時タップの防止策

こんにちは。ミラティブのAndroidエンジニアのかねき@kanesyです。 以前の記事でも何度か紹介していますが、MirrativのAndroidアプリでは新規で作る画面には積極的にJetpack Composeを活用しています。 tech.mirrativ.stream Jetpack Composeでの開発が活発…