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




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

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


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

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


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

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


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

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


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

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


【ガンダムコント風】ザクとは違うのだよ!LLMアプリ開発の設計図集「awesome-llm-apps」解説

モビルスーツ開発に明け暮れる皆さん、ご苦労様です!今日はですね、なんと、ザクとは違うのだよ、ザクとは!…と言いたくなるくらい、最先端の技術が詰まった「設計図集」をご紹介します。それが、この「Shubhamsaboo/awesome-llm-apps」というプロジェクトです!


開発効率を劇的に向上!MODSetter/SurfSense導入ガイド

こんにちは!今日も推しのコスプレ衣装に四苦八苦しているそこのあなた!僕も同じく、日々新しい技術の波に乗り遅れないか、実装がうまくいかないかと悩んでいます。この「MODSetter/SurfSense」は、そんな僕たちエンジニアの悩みを解決してくれる、まるでコスプレの小道具作りに役立つ「万能工具セット」のような存在です。


ソフトウェアエンジニアのためのFrappe/ERPNext徹底解説:酒の飲み比べで学ぶ導入と活用

皆さん、こんにちは!ソフトウェアエンジニアとして日々コードと格闘されている皆さん、お疲れ様です!今回は、ビジネスの世界でよく耳にする「ERP」という言葉と、それを実現する素晴らしいフレームワーク「Frappe」、そしてその上に構築された「ERPNext」について、まるで日本酒の銘柄をじっくり味わうように、その魅力と使い方を深掘りしていきましょう!


DockerとGoで実現!遠隔操作ブラウザ「ネコ」があなたの開発を変える

やあ、諸君! プロのソフトウェアエンジニアである君なら、きっと「もっと自由に、もっと安全に、ウェブの向こう側を覗き見たい」なんて考えたことがあるはずだ。まるでルパン三世がどんな厳重なセキュリティも掻い潜るようにね。今日紹介するのは、そんな君の願いを叶えるかもしれない、とびきりのツール「m1k1o/neko」、通称「ネコ」だ。


血液型占い風解説!AIエージェントのチームマネジメントツール「agent-squad」とは?

今回は、ソフトウェアエンジニアの視点から、ちょっと面白いツール「agent-squad」について、血液型占いの運勢みたいに、楽しく分かりやすく解説していきますね。全体運最高潮!まるで優秀なチームを瞬時に結成できる魔法の杖を手に入れたかのよう。これまで一人で抱え込んでいた複雑なタスクも、チームで分担することでサクサクこなせるようになります。特に、複数のAIを組み合わせて、まるで人間同士が話し合っているかのように協調させたい場面で、その真価を発揮します。