PLAY DEVELOPERS BLOG
https://developers.play.jp/
HuluやTVerなどの日本最大級の動画配信を支える株式会社PLAYが運営するテックブログです。
フィード

LinuxTV 向けアプリ開発者が Vega OS と向き合った話 〜フォーカス編〜
PLAY DEVELOPERS BLOG
こんにちは、OTT サービス技術部の宮田です。 今回はAmazonから発表された新型FireTVのOSである「Vega OS」向けアプリの開発にチャレンジする中でハマったことと、その解決策を一つ紹介します。 本題に入る前に フォーカス管理 LinuxTVでのフォーカス管理手法 自前フォーカス管理の問題点 ネイティブでのフォーカス管理 ネイティブフォーカスの問題 TVFocusGuideView おわりに 本題に入る前に 本題に入る前に、状況を説明させていただきます。 タイトルで触れているLinuxTVとは、Linux系OSが搭載されているTVを指し、アプリはHTMLで動作するWebアプリを用意…
7日前

就業型インターン参加レポート:動画配信サービスの裏側とエンジニアリングの本質
PLAY DEVELOPERS BLOG
こんにちは!インターン生の畑です。 今回は、就業型インターンの参加レポートをお届けします。 なかなかに濃い期間でしたので、得られた学びのアウトプットも兼ねて書きました! インターンについて 期間 出会い 業務内容 担当業務 使用技術 動画配信サービスの裏側 再生ビーコンなるものがあるらしい SDUI (Server-Driven UI) LTもしてきました! AIとの向き合い方 規模の大きなシステムの洗礼 タスクの先にあるもの 最後に インターンについて play.jp 期間 2025/9/17~2025/10/31 (約1.5ヶ月間) 出会い 私は現在大学院一年で絶賛就活中なのですが、とある…
21日前

Visual Studio Code のデバッガーで Out of Memory を解消する
PLAY DEVELOPERS BLOG
こんにちは。PLAY CLOUD本部プラットフォーム技術部 開発第2グループ所属のガリです。 とあるサーバーレス関数で Out of Memory (OOM) が発生しました。処理するデータ量が増えたため、暫定対応としてメモリ割り当てを増やしたところ、問題は一時的に解消されたようです。しかし、メモリを増やすことでコストが上がってしまい、さらにデータ量が増えれば増えるほど、将来的に再発する可能性があります。コストを抑えつつ再発を防止するためには、サーバーレス関数の最適化が必要でした。 問題となったボトルネックを特定するために、プロファイラを使用してみました。 対象のサーバーレス関数はそれほど複雑…
24日前

Observability Conference Tokyo 2025 に現地参加してきました! #o11yconjp
PLAY DEVELOPERS BLOG
こんにちは、テックリードの丸山 @maruyamaworks です。 弊社が提供しているプラットフォーム PLAY CLOUD では、パフォーマンスの改善や不具合の早期発見等を目的として、昨年 11 月ごろから Observability を高めるためのツールとして New Relic を導入しています。導入からまもなく 1 年を迎えようというタイミングで、ちょうど Observability (o11y) を主題としたカンファレンスが開催されるとのことでしたので、他社様でのノウハウや最新の活用事例等を学ぶため、このたび現地参加してまいりました。今回はそのレポートをお届けしたいと思います。 イ…
24日前

社内 LT 会「てっくじゃむ」10月16日のイベントレポート
PLAY DEVELOPERS BLOG
2025年10月16日(木)に、PLAY 社内で 「てっくじゃむ」を開催しました。 このイベントは PLAY の技術情報交流を活発化させるため不定期で開催している社内の LT 会です。 ジャムセッション(即興で行われる演奏会)のように、普段はあまり関わりがない人たちが、ふらりと立ち寄って話をするような場であってほしい、また、パンにジャムを塗るようにエンジニアにも知識を塗り足していきたい、といった想いを込めて「てっくじゃむ」と名付けています。 今回はインターン生を含む3名が登壇しました! 登壇者 タイトル 畑 エンジニアリングの難しさを垣間見た話 鈴木 Claude Codeでどんなことができる…
25日前

Amazon Bedrockを使ってナレッジベースを作ってみよう
PLAY DEVELOPERS BLOG
みなさん、こんにちは。4月に入社しました、メディアサプライチェーン技術部開発第2グループの山本です。普段の開発やビジネスの業務において、以下のような場面に遭遇したことはないでしょうか? 「あのファイル、どこにあったっけ...?」「情報が点在していてどこからみたらいいか分からない」「探すのに時間がかかるし、もう諦めよう・・・」 今回、Bedrockを使ってナレッジベースを作成し、このような課題を解決したいと思います。 システム構成図 料金について S3 Vectors OpenSearch Serverless 比較 構築 ナレッジベースを作成 Lambda関数の作成 Slackアプリの作成 質…
1ヶ月前

iOSDC Japan 2025で登壇しました
PLAY DEVELOPERS BLOG
こんにちは! iOSエンジニアの鈴木斗夢です。 iOSDC Japan 2025の参加レポートをお届けします! iOSDC Japan 2025とは 「iOSDC Japan 2025」は、国内最大級のiOSエンジニア向けカンファレンスです。 PLAYはシルバースポンサーとして協賛しました! PLAY シルバースポンサー iOSDCに登壇するためプロポーザルに応募した 今年は、登壇を目指してプロポーザルに応募しました。 いくつか応募していたんですが、 モバイルチームのマネージャーの上野さんに相談したところ、 「位置判定にAIを組み込んだ話も刺さるんじゃない?」とアドバイスをいただき、応募したプ…
1ヶ月前

これから GitHub Enterprise Cloud を導入する企業に EMU をおすすめする 4 つの理由
PLAY DEVELOPERS BLOG
こんにちは。テックリードの丸山 @maruyamaworks です。 みなさん、GitHub は使っていますか? GitHub は企業向けに 複数のプラン を提供していますが、ある程度の規模の会社であれば GitHub Enterprise を利用しているというケースも多いのではないかと思います。弊社もこれまで、GitHub Enterprise を利用していました。 GitHub Enterprise では、通常のクラウド環境 github.com だけではなく、自社で用意したサーバー(EC2 等)に GitHub をインストールして使う方式も選択することができます。これらを区別して、前者の…
1ヶ月前

VerdaccioからGitHub Packagesへのnpmパッケージ移行
PLAY DEVELOPERS BLOG
背景 当初想定していた作業フロー 実際の作業フロー(と起こった問題) 1. GitHub Packagesの初期設定 Personal Access Token(PAT)の設定 ローカルマシンの初期設定 ~/.npmrcの修正 ~/.yarnrcの修正 2. 既存のnpmパッケージをGitHub Packagesにアップロード registry設定の追加 既存のnpmパッケージのスコープの問題 npm scriptsでエラー 修正済のpackage.json 移行用スクリプト(Ruby) 3. GitHub Packagesからインストール productionでインストール出来ない問題 4.…
1ヶ月前

サービス間の差異をなくす共通 Node.js モジュール管理
PLAY DEVELOPERS BLOG
こんにちは、PLAY CLOUD本部 技術推進室の市川です。 弊社の提供するプラットフォーム「PLAY CLOUD」は、さまざまな機能を持った複数のサービスから構成されています。 技術推進室ではこれらのサービスを横断して技術的な課題を解決し、より良いサービスを提供するための取り組みを行っています。 今回は、PLAY CLOUDの管理画面で利用している共通モジュールをnpmパッケージとして分離し各サービスで利用できるようにしたことに関して話そうと思います。 背景 共通モジュールとは 従来の課題 サービス間の差異をなくす施策 共通モジュールのnpmパッケージ化 サービス側のnpmパッケージ利用への…
2ヶ月前

OAuth 2.0 クライアントID作成から Gmail API 呼び出しまで
PLAY DEVELOPERS BLOG
皆さん、こんにちは。 プラットフォーム技術部の林と申します。 前回の投稿から気づけば2年が経ってしまいました。 しばらくご無沙汰しておりましたが、また記事を書いてみようと思います。 もし以前の記事の Playwright にご興味がある方は、こちらもぜひご覧ください。 developers.play.jp 今回は、個人的に学習している Google API の OAuth 認証について、Google Cloud Console とバックエンドに焦点を当てて解説します。フロントエンドとバックエンドの役割を分け、バックエンドで Gmail API を使って実際にメールを送信するまでの流れを紹介しま…
2ヶ月前

AWSのランニングコストを削減しよう! opswitchを使った定期停止・起動について
PLAY DEVELOPERS BLOG
OTT サービス技術部の赤澤です。 前回のブログではAWSリソースのコスト削減のためにAmazon EventBridgeを利用した定期的なリソースの停止、起動の方法を紹介しました。 developers.play.jp 約2年前に執筆したブログですが、現在はCloudFormationテンプレートからの設定ではなく、クラスメソッド株式会社様が提供しているopswitchというツールを使っています。 なぜ「opswitch」に切り替えたのか? 実際に「opswitch」でスケジュールを設定してみる AWSアカウントの連携 タスクの作成 ジョブの作成 まとめ なぜ「opswitch」に切り替えた…
2ヶ月前

AWS Elemental LinkからMediaLiveへ打ち上げてライブ配信する
PLAY DEVELOPERS BLOG
こんにちは。2024年度に入社しました、PLAY CLOUD本部プラットフォーム技術部 開発第1グループ所属の朱です。 本記事では、AWS Elemental Linkを用いてMediaLiveにライブ映像を入力し、最終的にMediaPackageを経由してHLSストリーム(.m3u8)を配信する基本的なフローを整理します。Link導入の具体的な手順や考慮ポイントを整理する際の参考になれば幸いです。 AWS MediaLiveの基本構造とライブ配信フロー Input Channel Output Elemental Linkとは Elemental Linkを用いたMediaLive配信の設定…
2ヶ月前

チーム開発におけるGitHubのおすすめ設定
PLAY DEVELOPERS BLOG
こんにちは、4月にPLAYに入社した原田です。 入社してすぐに、前職で活用していたGitHubの設定を思い出し、現在の案件リポジトリにもいくつか適用してみました。 その結果、開発チームの生産効率が向上しました! この記事では、私が実際に設定して効果を感じた、GitHubのおすすめ設定をご紹介します。 チーム開発の参考になれば幸いです。 ① Allow squash merging ② Always suggest updating pull request branches ③ Automatically delete head branches ④ Require pull request …
2ヶ月前

Figma で実現!チームコミュニケーションを高めるルール作り
PLAY DEVELOPERS BLOG
こんにちは、デザイングループの荒木です。去年、育休から復帰した一児の母デザイナーです。家事や育児の合間に仕事の効率やチームとのやり取りを考えながら、毎日バタバタしています。最近の悩みは、運動する時間がなかなか取れないことです。 デザイナーもエンジニアも迷わない環境を作るために 復帰後、久しぶりの案件参加でまず感じたのは、チーム内でデザインの作り方やデータ構成が人それぞれで、引き継ぎや案件理解に時間がかかることでした。コンポーネントや色、要件定義書、スプレッドシート、GitHubのURLなども散らばっており、全体を把握するだけでも少々手間がかかります。 その結果、「この色は正式?」「このボタンパ…
3ヶ月前

AWS Lambda のログの S3 出力が簡単になりました
PLAY DEVELOPERS BLOG
今年の5月よりLambdaのログ出力に仕様変更がありました。料金計算の際に Vended Logs として計上されるようになったほか、Vended Logs として S3 や Data Firehose へ出力できるようになりました。CloudWatch Logs 以外でのログ管理がしやすくなった他、S3 や Firehose へログ出力する際は料金面でも優遇されます。今まで通りにLambda関数を作成した場合、ログはこれまで通りにCloudWatch Logsで取込・保存され、参照もCloudWatch Logsの機能で行うことになります。ログ運用を変える予定が無い場合は、今回のローンチ以降も変更すべきことはありません。一方、CloudWatch Logsに取り込まれたログをS3へファイル出力したい場合、従来はAWSコンソールなどから手動でエクスポートするか、Data Firehose を使う必要がありました。これが今回のローンチ以降、Lambda から取り込むログを CloudWatch Logs で取り込んだ後、S3 バケットに直接出力することが可能になりました。また Lambda から取り込まれるログは Vended Logs に分類されるようになったため、 S3 や Data Firehose への出力に変更する場合は、CloudWatch Logs のログ取込料金が大幅に安くなります。
3ヶ月前

Node.js 組み込みテストランナー「node:test」の使用方法について
PLAY DEVELOPERS BLOG
メディアサプライチェーン技術部開発第2グループの長谷川です。 2023年4月にリリースされた Node.js v20 から、組み込みのテストランナーとして node:test が安定版機能となりました。新しく開発に取り組んだバックエンドのNode.jsのプロジェクトでユニットテストを整備するにあたり、外部ライブラリに依存せずに手軽にテストを書ける組み込みテストランナーを使用してみた経験から機能の概要、実際にテストコードを書く方法、主要なオプションなどをご紹介します。バックエンドの Node.js プロジェクトにテストを導入したい方の参考になれば幸いです。 node:test とは 基本的な使い…
3ヶ月前

動画配信技術を実装して理解する〜HLS配信編〜
PLAY DEVELOPERS BLOG
こんにちは、PLAY CLOUD本部 技術推進室 の石川です。「動画配信技術を実装して理解する」シリーズも4回目の記事となりました。 前回の記事はこちらになります。 developers.play.jp 今回は、前回のRTMPからHTTP-TS配信を行うプログラムを、インターネット配信のデファクトスタンダードであるHLSに変更するという部分を取り扱います。 HLS化は前回のMPEG-TSへのトランスマックスができてしまえばサクッとできますし、HLSで配信できると感動もひとしおです。 実際にデファクトスタンダードの配信プロトコルで配信する部分まで自作してしまいましょう。 では、RTMPをHLSに…
3ヶ月前

【 AWS GameDay イベントレポート】PLAY、HJホールディングス、日本テレビ、TVer 初の合同開催!
PLAY DEVELOPERS BLOG
2025年7月17日(木)にエンジニアの技術力向上を目的として開催した AWS GameDay の様子を余すことなくレポートします! AWS GameDayとは AWS GameDay は、チームベースの環境で、AWS ソリューションを利用して現実世界の技術的問題を解決することを参加者に課題として提示する、ゲーム化された学習イベントです。 AWS GameDay 公式サイト 今回は、PLAY のエンジニアだけでなく、日頃から強固な連携をいただいている HJホールディングス様、日本テレビ様、TVer 様 にもお声がけし、初の合同開催が実現しました! 『参加者がお互いに学び合うこと』を通じて AW…
3ヶ月前

社内 LT 会「てっくじゃむ」7月24日のイベントレポート
PLAY DEVELOPERS BLOG
2025年7月24日(木)に、PLAY 社内で 「てっくじゃむ」を開催しました。 このイベントは PLAY の技術情報交流を活発化させるため不定期で開催している社内の LT 会です。 ジャムセッション(即興で行われる演奏会)のように、普段はあまり関わりがない人たちが、ふらりと立ち寄って話をするような場であってほしい、また、パンにジャムを塗るようにエンジニアにも知識を塗り足していきたい、といった想いを込めて「てっくじゃむ」と名付けています。 今回は3名の社員が登壇しました! 登壇者 タイトル 土谷 Obsidianで始めるデイリーノート 坂本 n8nを使ってみよう! 杉嵜 AWS Lambda …
4ヶ月前

動画配信技術を実装して理解する〜MPEG-TS トランスマックス編〜
PLAY DEVELOPERS BLOG
こんにちは、PLAY CLOUD本部 技術推進室 の石川です。「動画配信技術を実装して理解する」も3回目の記事となりました。 前回の記事はこちらになります。 developers.play.jp 今回は、前回のHTTP-FLV配信のベースに対して、MPEG-TSにトランスマックスし、HTTP-TS配信を実装します。 本当はHLSにして配信するまでをまとめて書きたかったのですが、HLSで使うMPEG-TSへのトランスマックス処理だけで、非常に長くなってしまいました。 このため、FLVからMPEG-TSへのトランスマックス単体で記事にしたという次第です。 トランスマックスについての基礎知識は、以前…
4ヶ月前

AWS Summit Japan 2025 に現地参加してきました!
PLAY DEVELOPERS BLOG
2025年6月25,26日は AWS Summit Japan 2025 の開催日。前日に台風が接近したので心配でしたが無事に開催され、私も幕張現地まで出向いて2日間参加しました。クラウドベースのコンタクトセンターを構築できる Amazon Connect は、日本国内では東京リージョンでのみ提供されてましたが、大阪リージョンでも近日中に提供されると発表されました。加えて Amazon Connect Global Resiliency に対応するため、日本国内でのマルチリージョン構成が可能になります。申し込みは同日6月25日に開始しました。日本における生成 AI 技術の実用化を支援するプログラムとして「AWS ジャパン生成 AI 実用化推進プログラム」があります。今回、経済産業省と NEDO主催の懸賞金型プロジェクト「GENIAC-PRIZE」への応募者を支援するプランと、Agentic AI実用化への取り組みを総合的に支援するプランの追加が発表されました。生成AIの「Claude」を展開している Anthropic 社が、日本オフィスを今年の秋に開設することを発表しました。アジア太平洋地域で初の拠点となります。
5ヶ月前

Storybook を MCP サーバ化したらフロントエンド開発が自動化される未来が見えた
PLAY DEVELOPERS BLOG
こんにちは。テックリードの丸山 @maruyamaworks です。最近は Claude Code に全部賭けています。 前回、GitHub Copilot を使って Storybook を作った話を書きました。 developers.play.jp 今回はその応用編として、Storybook を MCP サーバ化して LLM に提供することで、社内 UI コンポーネントを使用したフロントエンドの開発を自動化できるのではないか、ということで実験してみたいと思います。(これをやるために Storybook を作ったといっても過言ではない) 何をやろうとしているのか まずは先駆者から学ぼう MCP…
5ヶ月前

GitHub Copilot を活用して社内 UI コンポーネントの Storybook カタログを作った話
PLAY DEVELOPERS BLOG
こんにちは。テックリードの丸山 @maruyamaworks です。最近は Claude Code に全部賭けています。 弊社も生成 AI を活用することで開発効率を圧倒的に高めるべく、さまざまなツールの検証や導入、社内ルールの整備などを急ピッチで進めています。また、実際に開発支援系 AI を活用してうまくいった事例もいくつか出てきています。今回はその中から、GitHub Copilot を活用して社内 UI コンポーネントのカタログを作った話をご紹介したいと思います。 社内 UI コンポーネントについて Storybook を利用した UI カタログの整備 Story ファイルを作成してもら…
5ヶ月前

AWS のコスト可視化ツール「Budget Falcon」を公開しました
PLAY DEVELOPERS BLOG
クラウドサービスを使う上でコスト管理は避けて通れない課題です。今回、AWS のコスト状況をグラフ画像にして Slack に投稿する社内ツール「Budget Falcon」を作りましたので、作った際に考えたことなどを書いていきます。弊社 Slack には元々、コストを通知するツールが点在していました。しかし、どうしても社内ツールにかけられる時間は多くなく、使いにくい状態のまま動き続けていたものもしばしば。後回しにされがちだった社内ツール改修ですが、とうとう重い腰を上げて、AWSコストを可視化するツールを全社共有で使えるように1つ作ることになりました。
5ヶ月前

動画配信技術を実装して理解する〜HTTP-FLV 配信編〜
PLAY DEVELOPERS BLOG
こんにちは、技術推進室の石川です。「動画配信技術を実装して理解する」も2回目の記事となりました。不定期連載ですので、気ままに連載していこうと思います。 前回(第1回目)の記事はこちらになります。developers.play.jp 前回はRTMPを受信してFLVファイルに変換しましたが、今回はFLV出力をファイルではなくHTTPで配信する、いわゆるHTTP-FLV配信を実装してみたいと思います。今現在、FLVは使われてないように見えますが、実はFLVをHTTPのストリームとして配信しているという事例も存在します。今回は、その配信方式がどのような実装で成り立っているかを説明します。 では、HTT…
5ヶ月前

LocalStack を用いてローカルに AWS 環境を構築する
PLAY DEVELOPERS BLOG
こんにちは。2024年度に入社しました、PLAY CLOUD本部プラットフォーム技術部 開発第2グループ所属の成瀬です。 業務でAWS上にシステムを構築する機会があり、その開発において LocalStack を利用することで、失敗を恐れずに開発を進めることができました。 本記事では、LocalStack の使用方法と、Webブラウザから LocalStack 上のAWSリソースを管理できる「LocalStack Resource Browser」をご紹介します。ぜひ参考にしていただければと思います。 LocalStack とは インストール LocalStackへのデプロイ方法 デモ Loca…
6ヶ月前

@nestjs/swagger を活用して NestJS 製 API の仕様書を作る
PLAY DEVELOPERS BLOG
こんにちは、OTTサービス技術部 開発第1グループの清瀬です。 主にフロントエンドエンジニアを担当しております。 とあるプロダクトで、NestJSを触る機会がありました。 そのプロダクトではAPIドキュメントがなかったので、NestJSのdecoratorを利用してSwaggerSpec(APIドキュメント)を自動生成してみたので、その手順を紹介したいと思います。 そもそもNestJSって? APIドキュメント生成手順 @nestjs/swaggerのdecorator紹介 【Tips】カスタムデコレーターでエラーレスポンスを共通化しよう まとめ そもそもNestJSって? NestJSはNo…
6ヶ月前

型リポジトリの運用と GitHub Actions による自動化の取り組み
PLAY DEVELOPERS BLOG
こんにちは、OTTサービス技術部開発第一グループの麻田です。 今回は、案件で実施した型リポジトリの導入および運用効率化の取り組みについてご紹介します。 導入背景と課題 開発時の運用 GitHub Actions による CI/CD パイプライン構築 自動化の流れ 現状の課題と今後の展望 まとめ 導入背景と課題 私たちのチームでは、OTTサービス向けのWebおよびHTML5 TV(テレビ向けWebアプリ)のフロントエンドと、BFF(Backend for Frontend)の開発を担当しています。 直近でプロダクトをTypeScriptへ移行しましたが、ツールを使って一括変換したこともあり、型定…
7ヶ月前

AWS SAM でアプリケーションのデプロイと変更管理を効率化
PLAY DEVELOPERS BLOG
こんにちは。24年度に入社しました、PLAY CLOUD本部プラットフォーム技術部開発第3グループに所属しています、大城と申します。 業務でSAM (Serverless Application Model) を利用してサーバレスのAPIを構築する機会があり、その過程でSAM で利用する CloudFormation で関連リソースの構築まで行いました。コンソールから手作業でリソースを作成する方法もありますが、IaC(Infrastructure as Code)の考え方で実装することで、管理のしやすさと再現性を向上させることができます。 本記事では、AWS SAMテンプレートを使ったリソース…
7ヶ月前