サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
tech.mirrativ.stream
こんにちは、バックエンド基盤チームの徳森です。 バックエンド基盤チームでは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題の発見や解決を行っています。 今回は、チームでの具体的な業務内容の一部として、二つのOSSにコントリビュートした話を紹介します。 要約 バックエンド基盤チームでは定常業務として依存モジュールの更新を行っていますが、必要に応じてアップストリームへのコントリビュートも行っています。 今回はその中から、sqldef/sqldefとgetkin/kin-openapiに貢献した事例を紹介します。 ミラティブではバックエンド基盤チームを含め、技術的な課題解決を共に楽しんでくれる方を募集しています。 背景 バックエンド基盤チームの定常業務の一つに、依存しているGoライブラリの更新があります。 私たちのプロジェクトではRenovateを導入しているため、
Androidエンジニアの藤原(@fuji_tech7)です。9月10日〜12日に DroidKaigi 2025 が開催されました。 私はカンファレンスデーの11日、12日に参加してきたので、その内容をレポートします。 ミラティブは 2022 年から DroidKaigi に協賛しており、今年で4年目を迎えます。 tech.mirrativ.stream 更に今回はDroidKaigiカンファレンスアプリの開発リードを弊社のkitakkun (@kitakkun_pb)が務めていました。かなり大変だったと思いますがお疲れ様でした! (私自身、軽微ではありますがコントリビュートさせてもらいました) github.com 2日間で48のセッションが行われましたが、その中から特に気になったものをピックアップしてご紹介します。 1日目 基礎から学ぶ大画面対応 〜「Large screen dif
こんにちは、バックエンドエンジニアのogatasoです。今回はDockerコンテナ上でプロセスが残り続けてしまう問題をPTY(pseudo terminal)を噛ませたタイムアウト処理で対応した話を紹介します。 はじめに ミラティブでは、開発環境や本番環境のMySQLのレコードを確認する際、sshで踏み台サーバに接続し、docker exec -it を使ってdockerコンテナ上でMySQL接続用のスクリプトを実行しています。しかし、このときMySQLクライアントのプロセスを終了させずにターミナルを閉じてしまうと、プロセスがサーバ上に残り続けてしまうという現象に悩まされていました。 原因調査 原因は docker exec -it にあったようです。このコマンドは、すでに動いているコンテナ内で追加のプロセスを起動し、擬似TTY (-t) と標準入出力のアタッチ (-i) を通して対話する
ミラティブでソフトウェアエンジニアをしている @8beeeaaat です。 去る2025/9/6に札幌で開催されたフロントエンドカンファレンス北海道2025 にて発表した内容を再構成して公開します! Dateに代わる新たな日時表現・操作APIとしてECMAScript標準化を目指し、2017年にプロポーザルが投稿された Temporal。ついに仕様策定も大詰めとなり、Firefox 139での正式実装リリースを始め、各ブラウザ・JSエンジンへの実装も進められています。 ミラティブでは2022年よりPolyfillを導入して社内業務管理機能を中心に導入を進めてきました。本記事では3年間の業務利用の中で培った業務で利用できるノウハウを共有します! 採用決定の現場 Date型の課題 次世代時刻標準 Temporal 主な特徴 Polyfillによる利用 今日から始めるTemporal移行 Dat
こんにちは、ミラティブの新嘉喜です。 ミラティブは、2025年9月19日(金)〜9月21日(日)に有明セントラルタワーホール&カンファレンス+ニコニコ生放送で開催される iOSDC Japan 2025 にスポンサーとして協賛させていただきます! iOSDC Japan 2025 については以下公式サイトをご覧ください。 iosdc.jp 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、ゲーム配信プラットフォーム「Mirrativ」を運営しています。 ミラティブは「Mirrativ Tech Community & Activity Policy」を掲げ、エンジニアの社内外への発信を強く奨励しています。ミラティブのエンジニアは社外に対して積極的に発信し、イベントに参加し、OSSコミュニティに強く貢献しています。また、社内においてもエンジニア同士が積極的に交流
iOSチームの福山です。 Mirrativ iOSでは Flipper (Meta社のOSS) を使っていました。しかし Xcode 16.3 から Flipper が動かなくなるという事象が発生し、リポジトリもアーカイブされていることから、Vapor を利用して代替となる機能を作成しようと考えました。今回の記事では、その基礎となるサンプルの実装をご紹介します。 VaporはSwift言語で書かれたオープンソースのwebフレームワークです。 サンプル作成のフローは次のようになります。 VaporでMac上のwebブラウザにwebページを表示するローカルサーバーをたてる VaporでwebSocket(双方向通信)を行うローカルサーバーをたてる VaporとiPhone上のアプリがwebSocketで双方向通信 VaporとwebページがwebSocketで双方向通信 Vaporの導入 Ho
こんにちは、ミラティブの新嘉喜です。 ミラティブは、2025年9月10日(水)〜12日(金)の3日間にかけて開催される、「DroidKaigi 2025」に協賛することをお知らせいたします。 DroidKaigi とは 「DroidKaigi」は、Android技術情報の共有とコミュニケーションを目的に開催される、エンジニアが主役のAndroidカンファレンスです。 2025.droidkaigi.jp また、今年はミラティブのAndroidエンジニア kitakkun (@kitakkun_pb)が、DroidKaigi 2025 公式アプリの開発リードを担当しております! 公式アプリはオープンソースで開発されており、どなたでもコントリビュートできるそうなので、興味のある方はぜひチェックしてみてください。 github.com 協賛する背景 ミラティブは、ミッションである「わかりあう願い
はいこんにちは!フロントエンドやらバックエンドやらUnityやらなんでもやってるエンジニアの どじねこ です。 今回は少し前の話題になりますが、2025年3月12日に社内で開催した「Mirrativ LT Party 2025Q1」をご紹介します。 よろしければ過去に開催したLT会についてもご覧ください。 tech.mirrativ.stream tech.mirrativ.stream ⛳️ Mirrativ LT Party へのリニューアルの動機 ミラティブでは「わかりあう願いをつなごう」をモットーに、配信やライブゲームを通してユーザーさんに「好きでつながり、自分の物語(ナラティブ)が生まれる居場所」を提供しています。 私たちミラティブを支えるメンバー同士も、業務をともにするだけでなく、好きなものや興味のあるトピックを通じて、より深くわかり合える機会があった方が良いと考えました。 そ
こんにちは、バックエンドエンジニアのogatasoです。 Mirrativでは、配信者にギフトを贈る際に必要なコインをアプリ内課金で購入できます。 今回、不正の検知と対策を目的として、過去および今後のすべての返金履歴を取得し、データベースに取り込む仕組みを導入しました。 本記事では、App Storeから送られてくる返金通知をリアルタイムで受け取る方法と、過去の課金が返金されていないか調べる方法について解説します。 目次 目次 App Store Server Notificationsとは 設定 テスト通知を送る JWTの生成 通知の検証とデコード サンドボックス環境でREFUND通知を取得する トランザクション情報のデコード 過去の返金履歴の取得方法 リトライ処理の必要性 返金トランザクションの見分け方 レートリミットについて We are hiring! App Store Serv
こんにちは、バックエンド基盤チームの藤井脩紀です。 バックエンド基盤チームは、バックエンドエンジニアの生産性向上やコスト削減を目的に、エンジニア主導で課題を発見・解決している部署です。 このチームではCIの整備や依存関係の更新なども担当しており、その一環としてRenovateというソフトウェアのセルフホストを行ったのでそれについてお話しさせてください。 目次 Renovateとは セルフホストに至った背景 セルフホスト GitHubの下準備 Cloud Buildの設定 構成ファイルを準備 script/create-github-token.sh cloudbuild.yaml シークレットの登録 Cloud Buildトリガーの作成 Cloud Schedulerの設定 リポジトリの個別設定 余談:自動生成コードを利用しているがそれをリポジトリに含まない場合の問題 まとめ We are
こんにちは、Unityエンジニアのrioil(@rioil_dev)です。 Mirrativの3Dアバター(エモモ)の描画には、カスタム実装されたシェーダーを使用しています。 カスタムシェーダーにテクスチャシートを用いたアニメーション機能を追加するにあたって、シェーダーでアニメーションカーブを使えるようにしたため、今回はその方法を解説します。 検討した方法 アニメーションカーブをシェーダーで使う方法として、以下の2つの方法を検討しました。 毎フレーム、スクリプトでアニメーションカーブの値を計算して、マテリアルのプロパティにセットする アニメーションカーブをテクスチャにベイクして、シェーダーで参照する 1つ目の方法は、アニメーションカーブを MonoBehaviour に持たせて、毎フレーム Material.SetFloat メソッドで値をセットする方法です。 この方法はシンプルで簡単に実
こんにちは、ミラティブの広報の新嘉喜です。 ミラティブは、2025年8月22日(火)〜24日(木)に開催される「CEDEC 2025」に、スポンサーとしてセッション登壇と協賛をすることを決定いたしました。 ※CEDEC2025については、公式サイトをご覧ください https://cedec.cesa.or.jp/2025/ セッションの内容は、以下の通りです。 ミラティブ登壇者によるセッション 登壇者 井本 大登(技術戦略本部 技術部 Unityグループ マネージャー)@adarapata タイトル ライブゲームという新しい遊びの作り方 〜スラポンコロシアム開発事例から学ぶ配信者・視聴者一体型ゲーム開発〜 セッション内容 株式会社ミラティブでは、配信者と視聴者が一緒に楽しめる新しい形のゲーム「ライブゲーム」の開発に取り組んでいます。 本セッションでは「スラポンコロシアム」の開発経験をもとに
こんにちは、バックエンドエンジニアの makino です! この度、ミラティブは 2025年7月12日(土) にAtCoderにおいて ミラティブ プログラミングコンテスト2025 を開催します。 atcoder.jp 私自身、数年前まで競技プログラミングに熱心に取り組んでおり、夜な夜なコンテストに参加してはレートの増減に一喜一憂する日々を過ごしていました。 今では競技プログラミングから少し離れていますが、あのとき培ったスキルや知識は、日々の業務に確実に活かされていると感じています。 そんな自身の経験から、「AtCoderユーザーにもっとミラティブを知ってもらいたい」「一緒に働く仲間になってほしい」という想いをずっと持っており、この度ついに AtCoder での公式コンテスト主催が実現しました。 この記事では、AtCoderでのコンテストをきっかけにミラティブのことを知っていただいた方に向
こんにちは、Androidエンジニアの藤原(@fuji_tech7)です。 先日、Google I/Oが開催され新しいJetpack Composeが発表されました。 www.youtube.com AutoSize textやMaterial Expressiveなど気になるものは多いのですが、個人的にはModifierに追加されたonLayoutRectChangedが最も気になっています。 onLayoutRectChangedを簡単に説明すると、Composableの座標やサイズを取得する現行のonGloballyPositionedに近いものになっています。 今回はonLayoutRectChangedを掘り下げて、onGloballyPositionedとの違いや活用方法を紹介します。 本記事では2025.06.01のCompose Bomを利用しています。実行環境によっては異
こんにちは、Androidエンジニアの藤原(@fuji_tech7)です。 Jetpack ComposeのコンポーネントにScrollableTabRowがあります。 TabRowが指定領域にタブを敷き詰めて配置するのに対しScrollableTabRowはスクロール可能にすることでより多くのタブを配置することができます。 ただし、ScrollableTabRowは制限があり期待するレイアウトを作れませんでした。 その一つがScrollableTabRow内の子要素であるTabにminWidthを設定できないことです。 この課題について、最近動きがありましたので紹介します。 本記事内では正式リリース前のalpha版の機能を利用しています。 動作環境によっては正常に動作しない、または将来的に仕様が変更される可能性もあるため、ご留意ください。 ScrollableTabRowを使う上での課題
こんにちは、エンジニアのちぎら(@_naru_jpn)です。ゲーム配信アプリであるミラティブではイヤホンを使用しながら配信をすることができますが、動作の安定のために 有線のイヤホンの使用を推奨しています。 昨年 iOS 18 がリリースされてから、稀に AirPods Pro2 で配信の音声が途切れるといったようなお問い合わせがユーザーさんから届くようになりました。サービスとしては無線のイヤホンは推奨していないものの、技術的にどのような事象が発生しているのかは興味がありました。今回は ReplayKit を介して取得した音声の波形を手軽に記録・可視化できるようにした仕組みの話と、その調査結果を書こうと思います。 前提 iOS では、ReplayKit というフレームワークを介して、端末から映像データと音声データを取得することができます。音声データには、アプリケーションが発する音(audio
こんにちは、ミラティブでデータ分析基盤を担当しております芝尾です。 ミラティブでは本年度新卒研修の一環として、エンジニアではないビジネス職向けに、web開発の研修を行いました。 web開発研修の様子 研修の目的 この研修の目的は、ビジネス職にエンジニアになってもらおうという意図ではなく、以下のことを意図しています。 エンジニアがどのようなことをしているかをざっくり知ってもらう。 webの基礎的な概念(HTTP,TCP,DNSなど)を知ってもらう。 研修背景 web開発では、ビジネス職が企画を考えその企画職の考えた仕様を元にエンジニアが機能を実装することは一般的です。 web開発を体験してもらうことでエンジニアに仕様を伝える際にどのようなように書くと伝わりやすいかなどの共有言語を身につけることを目的にしています。 研修参加者 研修は、新卒のビジネス職2名、エンジニア2名、中途社員の自由参加2
iOSチームの福山です。 Mirrativ iOSの開発ではSwift Macroを使ってイニシャライザやXcode Previews用のダミー要素を生成するなど活用しています。 しかし、ビルドが成功するにもかかわらず、Swift Macroが展開するコードを利用する部分でエラーが表示されることがありました。XcodeのコンパイルチェックとSwift Macroの展開するタイミングがずれて上手く機能していないのではないかと調べているうちに、Swift Macroをバイナリ化して使う方法があることを知りました。 結果的に表示のみのエラー解消に加えてクリーンビルドの時間を1分以上(約16%)短縮できました。Swift Macroを使う上で必須となるSwift Syntaxのビルドに時間がかかっていたのが原因です。 MyApp プロジェクトルート ├── 📦 MyLibrary (プロジェクト
こんにちは、ミラティブのエンジニア採用担当の野呂です。 いよいよ明日、Swiftに関する世界的な技術カンファレンス 「try! Swift Tokyo 2025」 が開催されます! 株式会社ミラティブは、ブロンズスポンサーとして協賛させていただいております。 try! Swift とは Swiftに関する国際的なカンファレンスです。Swiftの開発のコツや最新の事例を共有し、スキルを磨くことを目的としています。 開催日時: 2025年4月9日(水)〜11日(金) 場所: 立川ステージガーデン 公式URL: try! Swift Tokyo 協賛する背景 ミラティブは、ミッションである「わかりあう願いをつなごう」のもと、Swiftを活用してゲーム配信プラットフォーム「Mirrativ」を開発・運営しています。 エンジニア組織は「Mirrativ Tech Community & Activ
こんにちは!ミラティブの Android エンジニアの kitakkun です。 ミラティブでは年始に Android アプリの Material3 完全移行 QA を行いましたが、スクリーンショットテスト導入の成果もあり、ほとんどバグチケットの報告もなくスムーズに完了することができました。 Mirrativ の Android アプリでは、Jetpack Compose(以下、単に Compose)を2021年7月の1.0リリースから導入を開始しました。以来、新規画面は必ず Compose で実装しており、古い画面も積極的に Compose 化を進めています。 Jetpack Compose の Material ライブラリも2から3(以後簡単に M2, M3)へとバージョンアップし、M3 向けに開発されるコンポーネントも増えてきました。ミラティブの Android チームでは、昨年8月
環境 改善前 改善前計測 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 Git-146) 改善前 私の環境では改善前のgit statusは1.941秒かかっていました。 頻繁に実行するコマンドではないですが、若干ストレスになっていました。 $ time git sta
こんにちは フロントエンドエンジニアの どじねこです。 今回はミラティブのバックエンド開発環境の 2025 年上半期の現状を皆様にご紹介します。 なお 2021 年 12 月 時点での情報が別記事にまとまっておりますので、ここからのアップデート情報と言う形でご覧いただけるとより楽しめると思います。よろしければ併せてご覧ください。 tech.mirrativ.stream Multipass での運用と課題 2021 年 12 月 時点ではミラティブのバックエンド開発では Multipass を活用して VM 上でサーバーアプリケーションの実装が行われていました。より厳密には VM 上で dockerd が起動しておりそこでサーバーアプリのコンテナが Docker Compose により複数起動しています。 canonical.com 記事中では VM に SSH で接続し、VM 内部にコー
こんにちは、Unityエンジニアのいも(@adarapata)です。 今回は、ミラティブのライブゲーム「スラポンコロシアム」で活用しているリプレイデータについてMemoryPackを使って作成した話をします。 スラポンコロシアムとは スラポンコロシアム(スラコロ)はMirrativアプリ上で動作するライブゲームです。 他のライブゲームにも登場するスラポンなどのモンスターたちが戦う闘技場で、誰が最後まで生き残るかを予想するゲームです。 視聴者も配信者も一緒になって遊べるのが特徴です。 【1/23 ~ 1/30】 //#スラコロ Vol.35 開幕💃⁾⁾ \\ 💥新モード💥 🎶🪩パーリーチャンス🪩🎶が登場🕺 ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤ 1位🥇2位🥈を当てて🎯 メダルを大量GET🎰💫 そして🤩 ˗ˏˋ✨DJベルチャ🎧がペットに✨ˎˊ˗ 獲得メダル🪙250
こんいす!バックエンドエンジニアのogatasoです。 今回は12月8日に開催された ISUCON14 に、私とshirakawaさん、yamakuraさんの3人でチームMirrormanとして参加しました。全員ISUCON未経験の状態から挑戦し、楽しく学びの多い体験になったので、この記事で共有したいと思います。 ISUCONとは? ISUCON とは「Iikanjini Speed Up Contest」の略で、与えられた遅いwebサービスを制限時間内にどれだけ高速化できるかを競うコンテストです。 パフォーマンス改善を目的にインフラからアプリケーションまで多くのレイヤーに跨る技術知識を要求される総合格闘技的なところが魅力です。 ミラティブはISUCONのスポンサーであり、スポンサー枠が割り当てられていましたが、ISUCON経験者はすでに自分で枠を取っていたため余っており、私たちはmaki
目次 目次 背景 FCMとは 移行の流れ サービスアカウントキーを取得し、Goのライブラリに渡す メッセージの形式を決め、送信処理を書く ドキュメントのリトライポリシーに従ってエラーハンドリングを行う エラーハンドリングの概要 リトライポリシー 3% -> 10% -> 25% -> 50% -> 75% -> 100% と段階的にリリースする We are hiring! ミラティブでは一緒に開発してくれるエンジニアを募集しています! 背景 こんにちは、ミラティブの2024年新卒の山倉です。この記事ではプッシュ通知のAPIを移行するにあたって得た学びを共有したいと思います。 ミラティブではプッシュ通知をAndroid端末へ送信するのにFCM(Firebase Cloud Messaging)というサービスを利用しているのですが、7月22日ごろを境にFCMサーバーから送信失敗エラーが3%ほ
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でそれを行うと画面共有だけが終了し配信画面だけが残る状態と
次のページ
このページを最初にブックマークしてみませんか?
『Mirrativ Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く