Mirrativ Tech Blog

https://tech.mirrativ.stream/

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

フィード

記事のアイキャッチ画像
【ミラティブ】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」を掲げ、ミラティブエンジニアの社内外への発信を強く奨励しています。 ミラティ…
15日前
記事のアイキャッチ画像
PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜
Mirrativ Tech Blog
こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレ…
16日前
記事のアイキャッチ画像
SwiftGenとSwift-DocCを活用してコード上の画像を一瞬でプレビューする方法
Mirrativ Tech Blog
こんにちはiOS開発をしている福山です。 この記事では、SwiftGenとSwift-DocCを用いて、xcassetsを開かずにコード内の画像をQuick Help(右パネルまたは⌥オプションキー+クリック)で直接確認する方法を紹介します。 各ツールの簡単な説明 Swift-DocCは、Swift言語用のドキュメント生成ツールです。Swiftコード内に書かれたコメントから、ナビゲーションが容易で、見た目も美しいドキュメントを生成することができます。 SwiftGenは、Xcodeプロジェクトで使われるリソース(画像、フォント、色、ローカライズなど)を静的に型付けされたSwiftコードに変換す…
2ヶ月前
記事のアイキャッチ画像
モバイルアプリ上の WebAssembly 製ライブゲームで発生した例外を捕捉して計測する
Mirrativ Tech Blog
こんにちは、エンジニアのちぎら(@_naru_jpn)です。ミラティブでは、配信中のゲームに視聴者が介入できるゲームとライブ配信が融合した次世代のゲーム体験を提供しており、この体験を ライブゲーミング と呼んでいます。 ライブゲーミングは、Unity から WebGL 向けにビルドされた WebAssembly 製のゲームを、アプリに配置したウェブブラウザ上で動作させることによって実現しています。*1 今回は UnityでモバイルWebGLゲーム開発を頑張る話 の「メモリリークによって発生するクラッシュ」にも書かれているような、捕捉は難しいがユーザー影響があるような例外の発生を捕捉して、計測を…
2ヶ月前
記事のアイキャッチ画像
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…
2ヶ月前
記事のアイキャッチ画像
Cloud BuildでDockerのマルチプラットフォームイメージをビルド
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアの藤井脩紀です。 今回は表題の通りCloud Buildを活用してDockerのマルチプラットフォームイメージをビルドする方法をご紹介しようと思います。 マルチプラットフォーム is 何 まず、マルチプラットフォームイメージとは何かから説明すると、複数のCPUアーキテクチャやOSに対応したイメージのことです。 より具体的にはDockerの公式ドキュメントとブログが参考になるかと思いますので挙げておきます。 Multi-platform images | Docker Docs マルチプラットフォームドッカービルド | Docker 動機 そしてマルチプラットフ…
2ヶ月前
記事のアイキャッチ画像
input type=“date” の沼から、ライブラリを導入する意義を考える
Mirrativ Tech Blog
はじめまして!2023年7月からミラティブでフロントエンドインターンをしております、かずえもんと申します😺 今回は、インターンでの作業中にハマってしまった Safari のバグについて調査していたら、なんと10年モノの issue だったことが判明し、ライブラリを導入する意義について考える機会となった話を書いてみたいと思います。 Safari の日付入力欄に無効な日付を入れると起こるバグ onChange が正しく呼ばれないのは Safari が原因? Safari 17 以降で再現しないので原因は Safari で間違いなさそう Safari 17 以前での解決方法として DatePicke…
3ヶ月前
記事のアイキャッチ画像
ミラティブCTO交代の挨拶
Mirrativ Tech Blog
みなさまこんにちは、ちぎら @naru_jpn とよこて @n0mimono です。noteの方に対談を掲載していますが、テックブログのほうでも記事を書いてみようと思います。社内外の多くの方に読んでいただければ幸いです。 note.com prtimes.jp CTOを交代しました! 今のCTOより こんにちは、ミラティブ3代目CTOの千吉良(ちぎら)です。プレスリリースにあるように2024年1月よりCTOに就任しました、よろしくお願いいたします。 夏さん、横手さんと組織の中でCTOの移り変わりを眺めていて自分がその立場になるとは夢にも思わず生活をしていた訳ですが、せっかく挑戦する機会をいただ…
4ヶ月前
記事のアイキャッチ画像
iOSプロジェクトに対してモジュール分割しながらSwiftUIを部分適用している事例
Mirrativ Tech Blog
こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 MirrativのiOSチームでは、開発効率の最大化を狙い以下に取り組んでいます。 データフローの単方向化 (Fluxアーキテクチャの強制) 宣言的UIによるView実装 (SwiftUIの部分適用) 責務分割 (モジュール分割) 今回の記事では、どのような構成でSwiftUIを適用し始めたか、また、MirrativのiOSプロジェクトの構成やプロダクト特性の課題感からセットでモジュール分割を進めている点を紹介します。 背景 前提となるプロジェクト構成 導入に向けて決めたこと SwiftUIでどこまで実装するか 本体アプリではな…
4ヶ月前
記事のアイキャッチ画像
UnityチームでGodot勉強会をしました
Mirrativ Tech Blog
こんにちは、ミラティブ菅谷です。ミラティブではUnityチームで定期的に勉強会を行っています。今回はその取り組みの一つとして行ったGodot勉強会について紹介します。Unityエンジニアから見たGodotの特徴や触ってみての感想を記載しました。 背景:Unityライセンス体系の変更 2023年9月、Unityはライセンス体系の変更を発表しました。この変更は、多くのUnityユーザーに影響を与え、さまざまなゲームエンジンに関する議論を促しました。ミラティブのUnityチームもこの動きに注目し、ゲームエンジンの多様化に関する議論を行いました。最終的にライセンス体系は再変更されたため、ミラティブでも…
4ヶ月前
記事のアイキャッチ画像
クラウドネイティブなVPNを構築して運用している話
Mirrativ Tech Blog
インフラストリーミングチームの近藤(@udzura)です。 今日は、ミラティブ社内向けツールの話をします。ミラティブではVPNの仕組みをクラウドをフル活用して自前で構築し、1年ほど運用しています。運用中にいろいろ課題はありつつ、現在かなり安定して動作してます。 今回の記事は、そのVPNの仕組みを紹介します。 既存VPNの課題 災害時に稼働できないリスクを避けたい どこに誰がアクセスできるか楽に管理したい 新しいVPNをハッカソンで開発した話 新VPNの設計思想 災害時でも稼働できる どこに誰がアクセスできるか管理できる 攻撃時の影響を限定する 12時間でインスタンスを停止する クラウドネイティ…
4ヶ月前
記事のアイキャッチ画像
サービスの管理画面を継続的に改善するためのReact Hook FormとZod活用術
Mirrativ Tech Blog
こんにちは!ミラティブのフロントエンドエンジニア どじねこ です。 今回は、ミラティブを支える社内向けの管理システムにおいて、機能開発の体験を改善する取り組みを「MUI と Zod、React Hook Form の活用術」としてご紹介させていただきます。 前提 ミラティブでは、他の多くの Web サービスと同様に配信者さんの登録した情報や配信の履歴を管理する社内向けのシステムが存在しています。 特に管理システムのフロントエンドにおいては、その特性上入力フォームの実装がその大半を占めています。 日々の機能開発においては、そうした管理システムに実装された入力フォームの新規実装や機能拡張が行われて…
6ヶ月前
記事のアイキャッチ画像
インターン中、タスクに付随する予想外のエラーと戦った話
Mirrativ Tech Blog
初めまして。9月から10月にかけて、インターンとしてミラティブのバックエンド基盤に関わっていた、logicaと申します。 今回は、期間中に扱っていたある1つのタスクにフォーカスしながら、インターンを振り返りたいと思います。 割り当てられたタスク 背景 すぐに終わる想定だった 検証用環境で問題発生! 管理画面へのログインができない タスクの続行 原因究明 403エラー CSRFトークン セッションの非永続性 対処 そもそもCSRFトークンは永続化するべきか セッション用Clientのみ、一定確率で値を返さなくする対応を止める 今回のタスクを振り返って 終わりに 割り当てられたタスク 比較的簡単な…
6ヶ月前
記事のアイキャッチ画像
【Go】time.Time.AddDateの注意点と対策
Mirrativ Tech Blog
こんにちは、バックエンドエンジニアの藤井脩紀です。 今回の記事では日付計算に潜む罠についてお話しさせていただきます。 なお今回はGoでの事例をご紹介しますが、原理的には他の言語やライブラリでも同様の事象が発生する可能性があります点にご注意ください。 time.Time.AddDateの注意点 突然ですがここでクイズです。 来月が何月か知りたいので以下のようなコードを書きました。 このコードを実行したのは10月だとします。 結果は何になるでしょう? // AddDateの引数は順に年、月、日でそれらの値を加算したtime.Timeを返してくれます fmt.Printf("%d月\n", time…
6ヶ月前
記事のアイキャッチ画像
内製オブジェクトストレージサーバ「b3」でコスト最適化を目指した話
Mirrativ Tech Blog
ミラティブで内製しているオブジェクトストレージサーバ「b3」の紹介記事を書きたいと思います。今回の記事は、6月にGopher Talkというイベントで発表した「Go製ミドルウェアを実践投入するにあたりやったこと」をベースに、内容を詳細にしたり直近の開発状況に合わせて更新したものです。一部内容はこの発表と重複していますがご了承ください。
7ヶ月前
記事のアイキャッチ画像
SwiftyJSONからDecodableへ移行する際に気をつけてよかったこと
Mirrativ Tech Blog
こんにちは、iOSエンジニアのいっちー(icchi (@0IcchI) / X)です。 MirrativのiOSアプリでは4年ほど前にレスポンスパラメータとレスポンスクラスのマッピングにDecodableを採用したAPIクライアントを作成し運用してきました。 新規の実装ではDecodable対応のAPIクライアントを採用していましたが、旧式APIクライアントを用いた膨大な量の実装はそのままにしていたので、今年から気持ちを高めてAPIクライアントの移行作業を開始しました。 気持ちを高めたものの、レスポンスクラスのデコード処理をSwiftyJSONからDecodableへ移行する際に、「レスポンス…
7ヶ月前
記事のアイキャッチ画像
【インフラ】xDS API の EDS に手を加えて動的に Envoy で weight 調整できるようにした
Mirrativ Tech Blog
こんにちは、ミラティブのインフラを担当している清水です。 ミラティブではクラウドに Google Cloud を利用しているのですが、稀にインスタンスの性能劣化が発生し動かしているアプリケーションの応答時間が長くなることがあります。 非同期な処理の場合は一時的にタスクキューの時間あたりの処理数が減るものの、遅延を許容できる機能であれば時間経過で回復するのでシステムを継続稼働できます。 一方で、web サーバのように同期処理の場合はリクエストを時間内に返すことができずに timeout したりだとか、worker が埋まって新たにリクエストが返せなくなったりと、正常にリクエストを返すことができず…
7ヶ月前
記事のアイキャッチ画像
DroidKaigi 2023に参加しました!
Mirrativ Tech Blog
こんにちは。Androidエンジニアの北川と久賀です。去年に続き、今年も参加させていただきました!今年は2人とも3日間フルで参加し、本記事ではそこで経験したこと、学んだことを紹介いたします。 DroidKaigi2023について 2023.droidkaigi.jp 去年の記事はこちら tech.mirrativ.stream 気になったセッション 北川編 最も印象的だったセッションは、「Kotlinハイパフォーマンスプログラミング」でした。普段の開発ではあまり意識しない、プログラムの記述方法によって生じるパフォーマンス差異について考える良い機会になりました。出力用インスタンスの使い回しによる…
7ヶ月前
記事のアイキャッチ画像
ミラティブでのアウトゲーム設計の紹介
Mirrativ Tech Blog
こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。 今回はミラティブのライブゲーム開発で行ったアウトゲームの設計について紹介します。 以前アウトゲーム設計に関してXでポストしたらレスポンスをいただけたのでできるだけ丁寧に解説してみました。こんな話も聞きたいよというのがあったら是非教えてください。 よくありそうなソシャゲアウトゲームの設計について今更記事化してるんだけどどれだけ需要あるんだろう。MVPの概念とかクリーンアーキテクチャライクな知識って業界的な浸透率どんなもんなんだ。— 鉄 -TETSU- (@tetsujp84) 2023年8月28日 アウトゲームについて…
8ヶ月前
記事のアイキャッチ画像
Mirrativ iOSアプリでのメモリ使用量削減への取り組み
Mirrativ Tech Blog
こんにちは、iOSエンジニアのふじのです。 Mirrativの機能開発を進める傍ら、iOSアプリのメモリ使用量の改善に取り組んでいます。 今回は、アプリ内でメモリ使用量を増やしている問題点を見つける方法と、それらをクライアント実装で解決する具体的なアプローチについて紹介します。 Mirrativアプリが抱える課題 着眼点とアプローチ 画像キャッシュの効率化 UIImageのリサイズ 画像のメモリキャッシュの上限サイズ設定 メモリリークへの対策 Allocationsやmemory graphを利用した手動検出 XCTestを利用したCI上での自動検出 改善の成果と今後の課題 We are hi…
8ヶ月前
記事のアイキャッチ画像
GitHub APIを利用したスケーラブルなマスターデータ管理システム
Mirrativ Tech Blog
こんにちは、バックエンド基盤チームマネージャーの夏(なつ)と申します。ミラティブの基盤チームはユーザが直接触れる機能よりかは、開発者や会社全体の生産性を向上させるためにエンジニア主導で課題を発見・解決している部署です。 今回は基盤チームが主体となって運用しているマスターデータ管理システムについて紹介したいと思います。ゲーム運営などではエクセルやスプレッドシートで管理されることがよくありますが、学習コストや安全性の観点で入力者を増やしづらい場合があります。このような問題に対応するため、ミラティブでは一部のマスターデータをGitHub APIを利用した専用の管理画面を実装することで入力作業をスケー…
8ヶ月前
記事のアイキャッチ画像
UnityでモバイルWebGLゲーム開発を頑張る話
Mirrativ Tech Blog
こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。 ミラティブのライブゲームはUnityで開発し、MirrativアプリのWebGLで動いています。 ライブゲームを支える仕組みと実際のライブゲーム開発で使用した技術については過去の記事で紹介しています。 tech.mirrativ.stream tech.mirrativ.stream UnityはWebGL向けにもビルドでき、モバイルのWebGLであってもUnity製プロダクトが動くようになっています。一方で、Unityは正式にはモバイルWebGL対応をサポートしておらず、ネイティブのモバイル開発と比べると開発の難易…
9ヶ月前
記事のアイキャッチ画像
あてっこ!ぷにまるずで利用したVisualScriptingとデザイナーフレンドリーな開発
Mirrativ Tech Blog
皆さんこんにちは。Unityエンジニアのおはぎです。 ミラティブでは先日「あてっこ!ぷにまるず」(以下ぷにまるず)というライブゲームをリリースしました。 使っている技術については以下の記事に概要が書かれています。 tech.mirrativ.stream 本稿ではその中からVisualScriptingについて詳細を記述していきます。 VisualScripting VisualScriptingはUnity公式が提供しているノードベースのノーコードツールです。 Unity2018からBoltとしてAssetStoreで有料販売されていましたが、 Unity社が買い取りUnity2021からは…
9ヶ月前
記事のアイキャッチ画像
【Go/GCP】ライブゲーム「あてっこ!ぷにまるず」を支えるバックエンド技術
Mirrativ Tech Blog
ライブゲーム「あてっこ!ぷにまるず」のバックエンド技術について紹介します。
9ヶ月前
記事のアイキャッチ画像
あてっこ!ぷにまるずを支える技術紹介 〜モバイルWebGLの開発事例〜
Mirrativ Tech Blog
Unityエンジニアのいも(@adarapata)です。 みなさんはUnityでWebGLプラットフォーム開発していますか? ミラティブでは先日「あてっこ!ぷにまるず」というライブゲームをリリースしました。 これはモバイルブラウザで動くWebGLです。 PCブラウザ想定のWebGLは多くありますが、モバイルブラウザを想定したゲームはあまり多くはありません。 いざ開発しようとしてもそもそも動くのか?このライブラリは対応しているのか?要求水準は満たせるのか?といったさまざまな課題が待ち受けているでしょう。 本エントリーでは、あてっこ!ぷにまるず(以下ぷにまるず)を実際にリリースするにあたって利用し…
9ヶ月前
記事のアイキャッチ画像
Unityチームでの輪読会の取り組み紹介とUniRx/UniTaskクイズ
Mirrativ Tech Blog
こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。Unityチームの一員として、私たちが週に1時間を費やして行っている輪読会について紹介したいと思います。輪読会では、チーム内で読む本を都度決め、それを読み進めていきます。これまでにはパフォーマンスチューニングの本やUniRx/UniTaskの本を読みました。また、後半にはUniRx/UniTaskの本で学んだことを元にクイズを作成しましたので是非挑戦してみてください。 具体的な流れ チーム内で読む本を決め、全員が本(現物 or 電子書籍)を用意します。輪読会では、前回の続きから読み始め、15分程度経ったら区切って次の人…
10ヶ月前
記事のアイキャッチ画像
iOSプロジェクト内の神クラス解体の進め方
Mirrativ Tech Blog
こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 Mirrativでは、リアルタイムの配信視聴時のコメントやギフト機能を実現するために、WebSocket ベースの仕組みを利用して、サーバー・クライアント間でPub/Subのメッセージングを行っています。*1 サーバーからのHTTPレスポンスをマッピングするように、ペイロードのJSONを受け取り、それをクライアントで扱う型に変換して使用していますが扱いにくい点がありました。本記事では改善に取り組んだ内容と進め方を紹介します。 目次 課題 ゴールと進め方の認識あわせ 1. 最初にゴールの定義を行う 2. 段階的な進め方の方針と見通…
10ヶ月前
記事のアイキャッチ画像
Flipperを使ったiOSアプリの開発体験向上&iOSエンジニア目線でのミラティブ社の魅力について
Mirrativ Tech Blog
はじめに 初めまして!Mと申します。 私は、2022年8月中旬より現在まで、iOSチームでインターンとして参加させて頂いています。 (実はこのミラティブのTechブログを読んだことがきっかけで、インターンに参加することになりました) これまでの期間、特に私は、開発体験の向上のためのデバッグ環境改善に関するタスクを行なってきました。 本記事では、MirrativのiOSアプリ開発における、Flipperというデバッグツールの活用事例および実装のポイントについて説明します。 また、私がインターンの中で感じたミラティブ社の魅力や、どんなことが学べたのかについてお伝えしようと思います。 目次 はじめに…
1年前
記事のアイキャッチ画像
Go Conference 2023 にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルでお話してきました
Mirrativ Tech Blog
こんにちは ハタ です。 このたび Go Conference 2023 Online にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルで発表しました 久しぶりの大きなカンファレンスでの登壇だったのでとても緊張しましたが、10周年を迎えた機会に登壇できて光栄です gocon.jp 今回発表した資料はこちらになります、当日のアーカイブは近々公開されると思いますのでお待ち下さい speakerdeck.com (2023/06/28追記) アーカイブ公開されたようです! もし当日ご覧になれなかった方はこちらからご視聴ください! zenn.dev さて、今回登壇する…
1年前
記事のアイキャッチ画像
新しいUnity AnalyticsとUnity Cloud Diagnosticsの紹介と使い方
Mirrativ Tech Blog
こんにちは。ミラティブUnityエンジニアの菅谷です。今回はUnityのサービスであるUnity AnalyticsとUnity Cloud Diagnosticsについて紹介します。2つのサービスはゲーム開発者がゲームのパフォーマンスを追跡し、ユーザーエクスペリエンスを改善するための強力なツールです。ミラティブではUnity Cloud Diagnosticsはこれまでも使っていましたが、最近のプロダクトではUnity Analyticsも活用し始めています。 Unity Analytics Unity Analyticsは、ゲーム内のイベントやKPI(Key Performance Ind…
1年前