ゲームをどこでも!ラーメン屋に学ぶ「Sunshine」の導入と活用法


ゲームをどこでも!ラーメン屋に学ぶ「Sunshine」の導入と活用法

LizardByte/Sunshine

2025-09-23

想像してみてください。あなたは最高に美味しいラーメンを作る天才的な職人。あなたのラーメン(ゲーム)を求めて、遠くからお客様(Moonlight)がやってきます。

お客様 (Moonlight)
「あぁ、あの店のラーメンが食べたい!でも遠いな...」

ラーメン職人 (Sunshine)
「大丈夫!私が作ったラーメンの香りを、遠くのあなたに届けてあげましょう。そして、あなたの"いただきます"(操作)を、私の厨房に素早く伝えてもらえれば、本物のラーメンのように楽しめるはずです!」

これが「Sunshine」と「Moonlight」の関係です。 Sunshine(ラーメン職人)はあなたのPCにインストールされ、PCのゲーム画面(ラーメン)を圧縮・エンコードして、ネットワーク経由でMoonlight(お客様のデバイス)に送信します。同時に、Moonlightからのキーボードやコントローラーの入力("いただきます"という合図)を素早く受け取り、ゲームに反映させます。

つまり、このツールを使えば、高性能なゲームPCをリモートで操作し、別のデバイス(スマートフォン、タブレット、別のPCなど)でゲームをストリーミングプレイできます。

単なるゲームツールとしてだけでなく、ソフトウェアエンジニアの視点から見ると、このプロジェクトは非常に魅力的です。

セルフホスト型であること
クラウドサービスのように、月額利用料や通信料を気にせず、自分の環境を完全にコントロールできます。セキュリティやプライバシーの面でも安心。

オープンソースであること
ソースコードが公開されているため、どのように動いているかを深く理解でき、自分のニーズに合わせてカスタマイズや機能追加も可能です。

技術スタック
pythondockercpp といった、モダンな開発で広く使われる技術が使われています。プロジェクトを通じて、これらの技術を使った開発や運用スキルを磨く良い機会になります。例えば、C++でパフォーマンスが求められるエンコーディング処理を実装し、PythonでWebインターフェースや設定ツールを開発するといった構成は、よくあるアーキテクチャパターンです。

パフォーマンス最適化
ゲームストリーミングでは、いかに低遅延で高画質な映像を転送するかが鍵となります。このプロジェクトのコードを分析することで、リアルタイム通信や動画エンコーディングに関する技術的な知見を深められます。

Sunshineの導入方法はいくつかありますが、ソフトウェアエンジニアに一番おすすめなのはDockerを使う方法です。環境構築の手間が省けて、クリーンに始められます。

まるで、ラーメン屋の厨房をあっという間に組み立てるようなものです。

まずは、お使いのPCにDockerをインストールしてください。

次に、コマンドプロンプトやターミナルを開いて、以下のコマンドを実行します。

docker run -it --network=host --name sunshine \
  -v /var/run/dbus:/var/run/dbus \
  -v /dev/dri:/dev/dri \
  -v /etc/machine-id:/etc/machine-id \
  -e PUID=$(id -u) \
  -e PGID=$(id -g) \
  lizardbyte/sunshine:latest

解説

docker run
コンテナを起動するおまじない。

-it
インタラクティブな操作を可能にします。

--network=host
ホストPCのネットワークを直接使います。これにより、ポートフォワーディングなどを気にせずMoonlightと通信できます。

-v
ボリュームのマウント。PCの特定ディレクトリをコンテナ内に共有します。

/dev/dri
GPUへのアクセスに必要です。高速なエンコーディングには欠かせません。

/etc/machine-id
一部のシステム識別情報に必要です。

コンテナが起動したら、http://localhost:47990 にアクセスして、SunshineのウェブUIを開きます。ここで、ゲームの追加やストリーミング品質の設定などを行います。

ポイント

PINコード
Moonlightから接続する際に必要なPINコードが表示されます。メモしておきましょう。

アプリケーション
「アプリケーション」タブで、ストリーミングしたいゲームやアプリケーションを追加します。Steam、Epic Games Launcher、特定のゲームの実行ファイルなど、何でも追加できます。

最後に、ストリーミングしたいデバイス(スマホ、タブレットなど)にMoonlightクライアントをインストールします。Moonlightを起動すると、ネットワーク上のSunshineホストが自動的に検出されます。

ホストを選択し、表示されたPINコードを入力すれば、接続完了!これで、どこにいてもあなたの作ったラーメン(ゲーム)が楽しめるようになります。

もしあなたが、Sunshineの機能を拡張したいと考えたなら、Pythonで以下のようなスクリプトを作成することができます。これは、特定のゲームが起動したときに、自動的にSunshineの設定を最適化するという例です。

import requests
import time

SUNSHINE_API_URL = "http://localhost:47990/api/v1"
SECRET_KEY = "your_secret_key" # UIで設定したAPIキー

def get_status():
    """Sunshineの現在の状態を取得する"""
    headers = {"Authorization": f"Bearer {SECRET_KEY}"}
    response = requests.get(f"{SUNSHINE_API_URL}/status", headers=headers)
    return response.json()

def set_quality(quality_preset):
    """ストリーミング品質を設定する"""
    headers = {"Authorization": f"Bearer {SECRET_KEY}"}
    data = {"quality_preset": quality_preset}
    requests.post(f"{SUNSHINE_API_URL}/config", json=data, headers=headers)

if __name__ == "__main__":
    game_running = False
    
    while True:
        status = get_status()
        
        # 例: 「MyGame.exe」が実行中かチェック
        if "MyGame.exe" in status["current_application"] and not game_running:
            print("MyGameが起動しました。高品質設定に切り替えます。")
            set_quality("high_quality") # 高品質プリセットに設定
            game_running = True
        elif "MyGame.exe" not in status["current_application"] and game_running:
            print("MyGameが終了しました。デフォルト設定に戻します。")
            set_quality("default") # デフォルトプリセットに設定
            game_running = False
            
        time.sleep(5)

このサンプルコードは、SunshineのRESTful APIを利用しています。 APIを使えば、外部のスクリプトからSunshineの設定をプログラム的に変更できるので、自動化や他のサービスとの連携が簡単にできます。


LizardByte/Sunshine




IBM/mcp-context-forge入門:LLMアプリケーション開発を加速する秘訣

まず、大前提として、mcp-context-forgeは、大規模言語モデル(LLM)アプリケーションを開発する際に、その管理を効率化し、開発を円滑に進めるためのツールです。マクドナルドのハンバーガーとケンタッキーのフライドチキンのような関係、という例えについて考えてみましょう。


LinearやJIRAに負けない操作感!セルフホスト可能なタスク管理の決定版「Plane」とは?

その名も……「Plane(プレーン)」だ! 「JIRAは重いし、Linearはお金がかかるし、あぁ〜!!」ってなっている君、必見だよ!さあ、ミュージック、スタート!はい、まずは屈伸運動から〜! Planeがどうしてすごいのか、3つのポイントで説明するよ!


22世紀のチャット運用術:AstrBotによるマルチプラットフォーム抽象化とエージェント基盤

のび太「ドラえも〜ん!LINEとかDiscordとか、いろんなSNSで動く自分専用のAI秘書を作りたいんだけど、設定が難しすぎて頭がパンクしそうだよ〜!」ドラえもん「やれやれ、のび太くんは相変わらずだね。でも安心しなよ!そんなときのために……(四次元ポケットをガサゴソ)……『AstrBot(アストラ・ボット)』!!」


35の雑音をAIが「大吟醸」に精製!ソフトウェア開発者のための情報過多対策ツール最前線

さあ、今宵は情報過多を乗りこなすための特選ツールの飲み比べです!これが今回ご紹介する「TrendRadar」です!口に含むと、情報が雑味なく整理されて、まるでクリアな大吟醸のようにスッと入ってきます。味わい(機能) 35以上のプラットフォーム(ニュース、SNS、専門メディア)から熱点を集約し、AIが「これは重要だ!」という情報だけを厳選してくれます。さらに、AI対話分析でトレンド追跡、感情分析、相似検索など13種のディープな分析が可能。


仮想通貨ボットの最前線!Hummingbotで始めるアルゴリズム取引入門

まずは、Hummingbotがどんなもんなのか、ざっくり説明しとくわな。Hummingbotいうのはな、仮想通貨の自動売買ボットを作るためのオープンソースソフトウェアのことどす。しかも、普通の自動売買と違ごうて、高頻度取引(High-Frequency Trading、HFT)にも対応できるように設計されとるんや。Pythonで書かれとって、Dockerも使えるから、環境構築も比較的楽にできるのがええところやね。


北斗の拳に学ぶ:winappsがもたらす開発環境の革命

北斗の拳の世界観になぞらえて、winappsを解説していきますね。北斗の拳の世界では、強敵(とも)と戦うために、さまざまな技を駆使しますよね。ソフトウェア開発の世界でも、WindowsとLinuxという二つの異なるOSの間で、それぞれの強みを生かし、弱点を克服することが求められることがあります。


WindowsアプリがLinuxで動く!「winboat」がエンジニアの働き方を激変させる

もしあなたが、WindowsとLinuxの両方を使いこなしたい、でも仮想マシンは重くて面倒…、WindowsアプリケーションをLinux上でシームレスに動かしたい…とお考えなら、今日ご紹介するTibixDev/winboatがまさにあなたのためのツールです!


動画ファイルが賢くなる?NLPとOpenCVでテキスト検索を可能にする「memvid」とは

「memvid」は、Olow304/memvid というGitHubリポジトリで公開されている、Pythonで書かれたライブラリです。NLP(自然言語処理)とOpenCV(コンピュータービジョンライブラリ)を組み合わせて、テキスト情報を動画ファイル(MP4)の中に効率的に保存し、高速な意味検索を可能にします。


オフラインAWS開発を実現するLocalStack入門:サーバーレス時代のテスト戦略を革新せよ

LocalStack は、フル機能を持つローカルの AWS クラウドスタックです。つまり、Amazon Web Services (AWS) のサービス(S3、Lambda、DynamoDB、SQSなど)を、自分のPC上やCI/CD環境でオフラインで動作させることができるツールなんです。


ソフトウェアエンジニアのためのAIエージェント入門:自律的なデバッグと実行のループを設計する

「本当のAIエージェント(Claude Codeのようなもの)」をどう作るのか、実際に手を動かした時のワクワク感を込めて解説します!これまで僕たちが使ってきたチャットAIは、言わば「アドバイスをくれる同僚」でした。でも、Claude CodeのようなAIエージェントは違います。彼は「実際にキーボードを叩いて、コマンドを実行し、バグを直して、テストを通す実務担当者」なんです。