サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
tech.mirrativ.stream
iOS開発の福山です。 現在Mirrativ iOSではSwift 6への移行を段階的に行なっています。その中でSwift 6に対応していないサードパーティライブラリに関連する問題にぶつかったため、その回避策を紹介します。 問題 open class Some3rdPartyClass { // サードパーティのライブラリなので変更が容易ではない open func doSomething(completion: @escaping (Bool) -> Void) { } } // ------------------------- final class SomeSubclass: Some3rdPartyClass { override func doSomething(completion: @escaping (Bool) -> Void) { // error: // Passi
はじめに こんにちは、Androidエンジニアの菅沼です。 ミラティブでは MediaProjection API を使用してリアルタイムに画面をキャプチャして配信を実現しています。 この MediaProjection API のスクリーンキャプチャの許可を求めるダイアログの仕様が 2024年3月にリリースされた Pixelシリーズ向けの Android 14 FeatureDrop (Android 14 QPR2) 以降から仕様変更がありました。 つまり Android 15 以降のみではなく Android 14 の途中のバージョンでも変化したという点に注意です。 公式のソースはこちらになります android-developers.googleblog.com 今回はこちらの変更点について紹介したいと思います。 異なる点 以下はスクリーンキャプチャを開始する際の Android
はじめに こんにちは、Androidエンジニアの菅沼です。 ミラティブは Android 5.0 (API Level 21)から実装された Media Projection API を使用して画面をキャプチャしてサーバーに送り、それを視聴者さんに映像として配信することでアプリを実現しています。 今回は画面をキャプチャする部分にフォーカスし、配信はせず画面をそのまま端末上で表示するだけのシンプルな実装を行う方法を紹介させていただこうと思います。 Media Projection API の公式のドキュメントはこちらにあります。 developer.android.com 順を追って実装してみる View を用意する まずは AndroidEmbeddedExternalSurface と Button をColumn で並べてみました。 AndroidEmbeddedExternalSur
こんにちは、Androidエンジニアの藤原です。 Android 15が配信されてから数ヶ月が経ちました。 Android ベータプログラムに参加しているとPixel端末にてQPR版のOSが入手できますが、そのAndroid 15 QPR1のバージョンでMirrativ Android版に影響のある変更があったので紹介します。 Android 15 QPR1での変更点とMirrativへの影響 developer.android.com 公式にも記載されていますが、アプリ内で画面共有を行っている際に、ステータスバーに画面共有中であることを示すチップが表示されるようになります。 画面共有中であることがひと目で判断できる、とてもありがたい変更です。 このチップをタップすることでシステム側から画面共有を停止できるのですが、Mirrativでそれを行うと画面共有だけが終了し配信画面だけが残る状態と
こんにちは、ミラティブの野呂です。 ミラティブは、いよいよ今週末12月8日(日)に開催される「ISUCON14」に協賛します。 ISUCONとは ISUCONとはLINEヤフー株式会社が運営窓口となって開催している、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです。 isucon.net 協賛する背景 ミラティブは、「わかりあう願いをつなごう」をミッションに、配信者数500万人超のゲーム配信サービス「Mirrativ」を運営しています。 「Mirrativ」では、配信者と視聴者がリアルタイムに繋がり、ゲーム配信や雑談など、様々なコミュニケーションを楽しんでいます。高トラフィック環境でも低遅延な配信を実現し、ユーザーに最高の体験を届けるために、パフォーマンスチューニングは非常に重要視しており、日々改良に向き合っています。 ISUCONは多く
こんにちは、バックエンドのリードエンジニア兼バックエンド基盤チームのマネージャーの夏(なつ)と申します。バックエンド基盤チームは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題を発見・解決している部署です。 今回は基盤チームが行った、Google CloudのIdentity-Aware Proxy(IAP)を利用したローカル環境での開発体験の向上について紹介したいと思います。この改善により、ローカル環境(Mac)上でも開発環境のデータを参照しながら開発が行えるようになり、開発体験が大幅に向上しました。 背景 基盤チームでは定期的にバックエンドチームのメンバーに対して「開発者体験に関するアンケート」を実施しています。基盤チームにとっての直接のユーザはバックエンドメンバーであるため、生の声を聞くことで、現在解決しようとしている問題や開発リソースの配分、優先順位が
こんにちは フロントエンドエンジニアの どじねこ です。 今回は Storybook 8.3 から追加された Vitest 統合機能を活用して、フロントエンドアプリの自動テストを強化した事例をご紹介します。 Storybook とは storybook.js.org Storybook は OSS として開発される UI コンポーネントワークショップです。 具体的には、フロントエンドアプリケーションの UI コンポーネントを開発する際の作業環境、ドキュメンテーションツール、テスティングフレームワークとして活用できる開発環境が提供されます。 React や Vue、Angular、Svelte、Web Component など幅広い環境に対応しており、うまく活用するとフロントエンドアプリケーションの開発をより柔軟に行えるようになります。 Storybook と Vitest の統合機能とは
こんにちは、iOSエンジニアのいっちー(@0IcchI)です。 ミラティブでは、iOS 18のリリースに備えて、アプリ上に新しい不具合が発生していないかの調査とその対応を進めてきました。 その過程でAnimated WebPの再生に起因する致命的な不具合に出会ったので問題とその対応について紹介します。 背景 ミラティブではアプリ内で画像を表示する際にSDWebImageを使用しており、Animated WebPの再生にも用いています。 SDWebImageはAnimated WebPの再生に2種類のコーダーを提供しています。 SDImageAWebPCoder iOS標準のImageIOフレームワークに含まれるコーダー SDImageWebPCoder SDWebImage独自のコーダー SDWebImageWebPCoderのREADMEではそれぞれの違いについて以下のように記述されてい
こんにちは!iOSエンジニアのmuneです。 今回は、2024年8月22日(木)〜8月24日(土)に開催されました iOSDC Japan 2024 について、セッション内容を振り返る勉強会を社内で開催いたしましたので、その様子をご紹介します! ミラティブはiOSDC Japan 2024をスポンサーとして協賛しております。 tech.mirrativ.stream 勉強会の前に:会場でのエピソード 今年のiOSDCからはスポンサーブースを楽しく回れるようスタンプ形式のビンゴの取り組みが行われていました。 弊社メンバーもスタンプを押してもらいながら気軽にスポンサーブースに立ち寄れるのでとても良い取り組みだと感じたようです! いつか弊社でもブースを出してみたいと話していました。 また弊社インターンのメンバーは初めての現地参加だったそうで、 「実際にiOS界隈で有名な方と直接話すことができたり
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 こちらは、Kotlin を活用したマルチプラットフォーム開発について、実際に手を動かしながら学ぶワークショップです。 前半は Kotlin Multiplatform、後半は Compose Multipl
こんにちは、ミラティブの野呂です。 ミラティブは、2024年9月11日(水)〜13(金)の3日間にかけて開催される、「DroidKaigi 2024」に協賛します。 DroidKaigi とは 「DroidKaigi」は、Android技術情報の共有とコミュニケーションを目的に開催される、エンジニアが主役のAndroidカンファレンスです。 2024.droidkaigi.jp 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、ゲーム配信プラットフォーム「Mirrativ」を運営しています。 ミラティブは「Mirrativ Tech Community & Activity Policy」を掲げ、エンジニアの社内外への発信を強く奨励しています。ミラティブのエンジニアは社外に対して積極的に発信し、イベントに参加し、OSSコミュニティに強く貢献しています。また、社
こんにちは!フロントエンドエンジニアの どじねこ です。 今回は少し前となりますが 2024年5月に社内で開催したLT会についてご紹介したいと思います。 よろしければ先日公開されました「iOS・Android 合同のLT大会を開催しました!」も合わせてご覧ください tech.mirrativ.stream ⛳️ LT会を開催した背景 ミラティブには多数のエンジニアが在籍しており、配信やライブゲームを楽しんでいただけるよう日々活動しています。メンバーの技術分野はバックエンド、フロントエンド、Unity、インフラなど多岐にわたり、それぞれの専門性を活かして課題解決に取り組んでいます。 Webフロントエンドではモバイルと異なりチームではなく、強く興味を持ったメンバーで構成されるギルドが主体となって定期的に勉強会や知見の共有会を行っています。今回はそうした勉強会の延長として、社内外に向けて発信する
こんにちは!Androidエンジニアの kitakkun です。 今回は、7月半ばに社内で実施した iOS・Android 合同のLT大会についてご紹介します。 モバイルエンジニアの社内勉強会事情 ミラティブでは、Androidチーム・iOSチーム双方が定期的に社内勉強会を実施しています(執筆時点ではAndroid隔週・iOS毎週)。 イベントのセッション動画を見たり、技術系記事の読み合わせをし、チームの方針決めや知見を広げるための時間として使っています。 例えば直近 Android チームでは、Kotlin Conf 2024 の「Guide to Improving Compose Performance | Mohit Sarveiya」を視聴しました。 youtu.be セッションでは、Compose Compiler Plugin の内部実装に目を向けて、パフォーマンス向上のため
こんにちは、ミラティブの野呂です。 ミラティブは、2024年8月22日(木)〜8月24日(土)に早稲田大学理工学部西早稲田キャンパス+ニコニコ生放送で開催される iOSDC Japan 2024 にスポンサーとして協賛させていただきます! iOSDC Japan 2024 については以下公式サイトをご覧ください。 iosdc.jp 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、ゲーム配信プラットフォーム「Mirrativ」を運営しています。 ミラティブは「Mirrativ Tech Community & Activity Policy」を掲げ、エンジニアの社内外への発信を強く奨励しています。ミラティブのエンジニアは社外に対して積極的に発信し、イベントに参加し、OSSコミュニティに強く貢献しています。また、社内においてもエンジニア同士が積極的に交流し、勉強
はじめまして、Azuma(@azuma_alvin)です。現在大学院の1年生で、2024年2月から4ヶ月間ミラティブのインフラチームにインターンとして参加しました。普段はインフラやMLOpsといった領域に興味があり、最近はVim環境の整備がマイブームです。 本記事では、ログ基盤をFluentdからFluent Bitへ部分移行した経緯とその2種類の監視ツールの実装についてお話しします。 記事の最後に、インターンから見たインフラチームの特徴と私が4ヶ月間で学んだことを紹介しています。興味がある方は末尾までスクロールしてぜひご覧ください。 1. 背景と目的 2. ミラティブのログ基盤について 3. ログ欠損の原因調査 Fluentdのバッファリングの仕組み fsnotifyを用いたバッファリングの観察 負荷試験 日付時刻フォーマットとワイルドカードによるログ欠損 ログ保存とサーバータイムスタン
こんにちは、ミラティブ菅谷です。MirrativのWebGL製ライブゲームにて、アセットのロード方法をインスペクタでの直接参照からAddressable Asset System(以下Addressable)に変更したことで、クラッシュ率が大幅に改善し、クラッシュせずにプレイが終了した「正常プレイ率」は98%まで改善しました。本記事では、その具体的な手順と効果について紹介します。 課題背景 MirrativのライブゲームはWebGLで動いていますが、特にモバイルのWebGLではパフォーマンスに気をつける必要があります。今回改善を行ったプロジェクトではもともとAddressableを使用していませんでした。プロジェクトの初期リリース時点では大きな問題もなく運用できていましたが、アセットやリソースを追加していくにつれてクラッシュが多く見られるようになりました。ただし、WebGLではクラッシュし
こんにちは!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の基礎知識、各種Compiler Plugin APIの使い方、そして実際の活用例についてお伝えします。 コンパイラまでも柔軟に拡張できるという、Kotlinのさらなる魅力に迫るセッションとなっています。 お時間に余裕
memcached proxyのハッシュアルゴリズム比較 はじめまして!hibikiです(@add_bakkers) 現在大学3年生で、最近はネットワークに興味があり勉強中です。2023年8月からインフラチームにインターンとして参加しました。 本記事ではmemcached proxyのハッシュアルゴリズム比較の結果を紹介します。 memcached proxyのハッシュアルゴリズム比較 1. 背景と目的 ミラティブでのmemcachedの利用 課題: クライアントサイドでサーバ決定をしている memcached proxyの検討 2. memcached proxyに求められるアルゴリズム キーの分散 移動率の抑制 パフォーマンス ハッシュアルゴリズムの比較 3. 今回行うベンチマークの概要 計測対象とシナリオ 分散と移動率のベンチ 処理性能のベンチ 4. ベンチマークの結果と比較 移動率
はじめに お久しぶりです、iOSチームにインターンとして参加させて頂いておりますMと申します。 MirrativのiOSアプリでは、これまでSwift製のCLIツールをBuildToolsという名前のSwift Packageを作成してこれにまとめて管理していました。 しかしこの度、ある課題や利便性の観点からyonaskolb/Mintでの管理に移行しました。 今回はMintへの移行に至るまでの背景や経緯、および移行に際して起こったいくつかの課題をどのように解決したかについて書いていこうと思います。 目次 はじめに 目次 Mintへの移行に至る背景 CLIツールの利用 SPMによる管理における課題 依存関係の不整合 依存解決の時間 Mintへの移行 Mintへの移行時に発生した課題とその解決 バージョンの自動更新 バージョン更新のためのコマンドを実装 1. Mintfileのパスを取得 2
こんにちは、ミラティブの野呂です。 ミラティブは、2024年6月8日(土)にAbema Towersで開催される Go Conference 2024 に協賛させていただきます! Go Conference 2024については以下公式サイトをご覧ください。 gocon.jp 協賛する背景 ミラティブはミッションである「わかりあう願いをつなごう」のもとゲーム配信プラットフォーム「Mirrativ(ミラティブ)」を運営しています。 そして「Mirrativ Tech Community & Activity Policy」を掲げ、ミラティブエンジニアの社内外への発信を強く奨励しています。 ミラティブのエンジニアは社外に対して積極的に発信し、イベントに参加し、OSSコミュニティに強く貢献するものであります。当然、社内においてもエンジニア同士が積極的に交流し、勉強会を開催し、互いの健やかな成長を促
こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレガシーな実装においては顕著) そこで PerlXS を利用することで Perl から Go を直接呼び出せるようにできないかと考え検証を進めることにしました Goの -buildmode=c-shar
こんにちはiOS開発をしている福山です。 この記事では、SwiftGenとSwift-DocCを用いて、xcassetsを開かずにコード内の画像をQuick Help(右パネルまたは⌥オプションキー+クリック)で直接確認する方法を紹介します。 各ツールの簡単な説明 Swift-DocCは、Swift言語用のドキュメント生成ツールです。Swiftコード内に書かれたコメントから、ナビゲーションが容易で、見た目も美しいドキュメントを生成することができます。 SwiftGenは、Xcodeプロジェクトで使われるリソース(画像、フォント、色、ローカライズなど)を静的に型付けされたSwiftコードに変換するツールです。自動生成された安全なコードを通じてリソースにアクセスできるため、タイプミスによるエラーや存在しないリソースへの参照をコンパイル時に検出するのに役立ちます。 SwiftGenの生成コード例
こんにちは、エンジニアのちぎら(@_naru_jpn)です。ミラティブでは、配信中のゲームに視聴者が介入できるゲームとライブ配信が融合した次世代のゲーム体験を提供しており、この体験を ライブゲーミング と呼んでいます。 ライブゲーミングは、Unity から WebGL 向けにビルドされた WebAssembly 製のゲームを、アプリに配置したウェブブラウザ上で動作させることによって実現しています。*1 今回は UnityでモバイルWebGLゲーム開発を頑張る話 の「メモリリークによって発生するクラッシュ」にも書かれているような、捕捉は難しいがユーザー影響があるような例外の発生を捕捉して、計測をするための仕組み作りについて解説をします。 ライブゲームが動作する仕組み 例外を捕捉することを考える前に、ライブゲームがどのように動作しているのかを知る必要があります。 Unity の WebGL 向
こんにちは ハタ です。 最近Mirrativ上に構築した配信の文字起こしシステムを紹介したいなと思います 音声からの文字起こしは、各社SaaSでAPI提供されているものがあると思いますが、今回紹介するものはセルフホスト型(自前のGPUマシンを使う)になります 構築していく上で色々試行錯誤したのでそれが紹介できればなと思っています どんなものを作ったか 前提知識: 配信基盤 前提知識: Unix Domain Socket Live Recorder Archiver DS Filter VAD Filter NAC / Compress Transcriber NAC / Decompress Speach To Text コンテナイメージ まとめ We are hiring! どんなものを作ったか 今回作ったものは Mirrativで配信されるすべての音声を対象に文字起こしを行う シス
こんにちは、バックエンドエンジニアの藤井脩紀です。 今回は表題の通りCloud Buildを活用してDockerのマルチプラットフォームイメージをビルドする方法をご紹介しようと思います。 マルチプラットフォーム is 何 まず、マルチプラットフォームイメージとは何かから説明すると、複数のCPUアーキテクチャやOSに対応したイメージのことです。 より具体的にはDockerの公式ドキュメントとブログが参考になるかと思いますので挙げておきます。 Multi-platform images | Docker Docs マルチプラットフォームドッカービルド | Docker 動機 そしてマルチプラットフォームのイメージが必要となった背景ですが、Appleシリコンの登場によりローカルでの開発ではARM、サーバー上ではAMDのイメージが欲しいというニーズが生まれました。これに応えるべくマルチプラットフォ
はじめまして!2023年7月からミラティブでフロントエンドインターンをしております、かずえもんと申します😺 今回は、インターンでの作業中にハマってしまった Safari のバグについて調査していたら、なんと10年モノの issue だったことが判明し、ライブラリを導入する意義について考える機会となった話を書いてみたいと思います。 Safari の日付入力欄に無効な日付を入れると起こるバグ onChange が正しく呼ばれないのは Safari が原因? Safari 17 以降で再現しないので原因は Safari で間違いなさそう Safari 17 以前での解決方法として DatePicker を使ってみる まとめ: ネイティブを補う存在としてのライブラリ We're Hiring!! Safari の日付入力欄に無効な日付を入れると起こるバグ 2023年8月、私はミラティブの管理シス
みなさまこんにちは、ちぎら @naru_jpn とよこて @n0mimono です。noteの方に対談を掲載していますが、テックブログのほうでも記事を書いてみようと思います。社内外の多くの方に読んでいただければ幸いです。 note.com prtimes.jp CTOを交代しました! 今のCTOより こんにちは、ミラティブ3代目CTOの千吉良(ちぎら)です。プレスリリースにあるように2024年1月よりCTOに就任しました、よろしくお願いいたします。 夏さん、横手さんと組織の中でCTOの移り変わりを眺めていて自分がその立場になるとは夢にも思わず生活をしていた訳ですが、せっかく挑戦する機会をいただいたのでお話を受けさせていただくことにしました。 私は2018年の8月からミラティブに副業ではじめて関わり、そのまま同年12月にミラティブに入社しました。 note.com インタビューにも書いたと思
こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 MirrativのiOSチームでは、開発効率の最大化を狙い以下に取り組んでいます。 データフローの単方向化 (Fluxアーキテクチャの強制) 宣言的UIによるView実装 (SwiftUIの部分適用) 責務分割 (モジュール分割) 今回の記事では、どのような構成でSwiftUIを適用し始めたか、また、MirrativのiOSプロジェクトの構成やプロダクト特性の課題感からセットでモジュール分割を進めている点を紹介します。 背景 前提となるプロジェクト構成 導入に向けて決めたこと SwiftUIでどこまで実装するか 本体アプリではなくSwiftPackageを活用する 垂直分割するか水平分割するか 方針やTipsを明文化し育てる 新規開発部分のUI開発をFeatureモジュールで行う SwiftPackage: SwiftUI.
こんにちは、ミラティブ菅谷です。ミラティブではUnityチームで定期的に勉強会を行っています。今回はその取り組みの一つとして行ったGodot勉強会について紹介します。Unityエンジニアから見たGodotの特徴や触ってみての感想を記載しました。 背景:Unityライセンス体系の変更 2023年9月、Unityはライセンス体系の変更を発表しました。この変更は、多くのUnityユーザーに影響を与え、さまざまなゲームエンジンに関する議論を促しました。ミラティブのUnityチームもこの動きに注目し、ゲームエンジンの多様化に関する議論を行いました。最終的にライセンス体系は再変更されたため、ミラティブでもUnityからの移行は見送りとなりましたが、この話題をきっかけに他のゲームエンジンへの理解を深めることでUnityの長所と短所をより明確に把握することが必要であるとの結論に至りました。 Godot選択
次のページ
このページを最初にブックマークしてみませんか?
『Mirrativ Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く