ゲームをどこでも!ラーメン屋に学ぶ「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




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

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


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

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


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

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


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

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


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

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


エンジニアの時短革命:Docker/Kubernetesのベストプラクティスを瞬時に手に入れるテンプレート活用ガイド

ソフトウェアエンジニアリングの世界で「デキる人」になるための秘訣の一つは、「車輪の再発明をしない」ことです。今回ご紹介する「ChristianLempa/boilerplates」は、まさにそれを実現するための強力なツールです。これは、よく使われるインフラ構築・デプロイに関する設定ファイルやコードの「お決まりのひな形(テンプレート)」をまとめたコレクションです。


ディフュージョンモデルGUI「ComfyUI」:魔法の呪文で画像を創る!

ComfyUIは、まるで魔法少女が魔法のアイテムを使って呪文を唱えるように、画像を生成するAIモデル「Diffusion Model」を直感的に操作できるグラフィカルユーザーインターフェース(GUI)です。通常の画像生成AIは、呪文(プロンプト)を入力するだけでもすごいのですが、ComfyUIを使うと、まるで魔法の回路図を描くように、様々な処理を組み合わせてもっと複雑で美しい画像を、まるで自分の手で描いたかのように作れてしまうんです!


【保存版】Ultralytics YOLOで切り拓くコンピュータビジョンの新大陸:導入から追跡まで

ソフトウェアエンジニアという熟練の探検家にとって、このツールがなぜ「最強の装備」となり得るのか、その秘密を解き明かしていこう!Ultralytics は、物体検出(Object Detection)の世界で最も有名なフレームワークの一つだ。もともと複雑だったディープラーニングのモデルを、まるで「標準装備のナイフ」のように、誰でも簡単に、かつ超高速に扱えるようにしたのが彼らの功績だよ。


サーバーレス&シングルファイル!Pythonライブラリ「memvid」で実現する最小構成のAI長期記憶

Aさん(部長)「いや〜、最近のAIエージェントは物忘れがひどくて困るよ。昨日の打ち合わせ内容を忘れて、また同じ質問をしてくるんだ。まるで私のスライスショットの癖を忘れて、毎回池に打ち込むキャディみたいだよ!」Bさん(エンジニア)「部長、それは『長期記憶』が足りないんですよ。普通はRAG(ラグ)っていう複雑な仕組みを作るんですけど、データベースを立てたり、ベクトル検索の設定をしたり……。例えるなら、パター一本でいいのに、わざわざ大型ダンプカーで芝を整えに行くような手間がかかるんです。」


カクテルバーへようこそ!Agentic AIが拓く未来のアプリ開発

お客様、最近「Agentic AI」って言葉をよく耳にしませんか?これはね、ただ言われたことだけをこなすAIとは一味違う、まさに"自分で考えて行動する"AIのことなんです。バーテンダーに例えるなら、レシピ通りにカクテルを作るだけでなく、「お客様の好みに合わせて、今日はこんな気分だろうから、この新しいカクテルを提案してみよう!」と、自律的に判断して行動するようなものです。