{"id":47775054,"url":"https://github.com/yoset77/shogihome-lab","last_synced_at":"2026-04-21T07:01:53.995Z","repository":{"id":332893371,"uuid":"1118583619","full_name":"yoset77/shogihome-lab","owner":"yoset77","description":"ShogiHome をフォークしたセルフホストサーバー型 GUI","archived":false,"fork":false,"pushed_at":"2026-04-21T04:29:07.000Z","size":9453,"stargazers_count":1,"open_issues_count":14,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-21T04:42:39.339Z","etag":null,"topics":["shogi","typescript","usi","vue","websocket"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yoset77.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-18T01:34:05.000Z","updated_at":"2026-04-21T02:58:05.000Z","dependencies_parsed_at":"2026-04-11T04:03:49.755Z","dependency_job_id":null,"html_url":"https://github.com/yoset77/shogihome-lab","commit_stats":null,"previous_names":["yoset77/shogihome-lan","yoset77/shogihome-lab"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/yoset77/shogihome-lab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoset77%2Fshogihome-lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoset77%2Fshogihome-lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoset77%2Fshogihome-lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoset77%2Fshogihome-lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yoset77","download_url":"https://codeload.github.com/yoset77/shogihome-lab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoset77%2Fshogihome-lab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32081122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T06:27:27.065Z","status":"ssl_error","status_checked_at":"2026-04-21T06:27:21.250Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["shogi","typescript","usi","vue","websocket"],"created_at":"2026-04-03T11:18:50.407Z","updated_at":"2026-04-21T07:01:53.990Z","avatar_url":"https://github.com/yoset77.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ShogiHome Lab\n\n[![AI-Driven Development](https://img.shields.io/badge/AI%20Driven-Development-9b59b6.svg)](https://github.com/yoset77/shogihome-lab/blob/main/AGENTS.md)\n[![CI](https://github.com/yoset77/shogihome-lab/actions/workflows/test.yml/badge.svg)](https://github.com/yoset77/shogihome-lab/actions/workflows/test.yml)\n\n[ShogiHome](https://github.com/sunfish-shogi/shogihome) をフォークし、サーバーサイドでUSIエンジンを実行する機能を追加した改造版です。  \nPC上のUSI将棋エンジンをスマートフォンやタブレットからWebブラウザ経由で利用し、ShogiHomeの快適なUIで局面の検討や対局を行うことができます。\n\n\u003e **セキュリティに関する注意**\n\u003e \n\u003e 本アプリケーションは、**信頼できるプライベートネットワーク（自宅のWi-FiやVPN内など）での個人利用**を前提に設計されています。\n\u003e ポート開放を行ってインターネットに直接公開することは推奨しません。外出先からの利用にはVPN（Tailscale等）をご利用ください。\n\n## スクリーンショット\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"./images/research-mobile.webp\" width=\"250\"\u003e\n    \u003cbr\u003e\n     \u003cem\u003e検討画面\u003c/em\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"./images/pvpreview-mobile.webp\" width=\"250\"\u003e\n    \u003cbr\u003e\n     \u003cem\u003ePVプレビュー画面\u003c/em\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 主な機能\n\n- **エンジン対局・検討:** PC上の強力なUSIエンジンを、スマホやタブレットのブラウザから利用できます。\n- **セッション継続機能:** ネットワークの一時的な切断が発生しても、サーバー側でエンジンプロセスを一定時間（デフォルト60秒）維持し、再接続時に状態を復元します。クライアント側で切断を検知した場合は自動で再接続を試みます。\n- **思考結果データベース:** 検討・対局時の評価値や読み筋をサーバー側（SQLite）に自動蓄積します。思考結果は、別の棋譜やデバイスでその局面を表示した際にも即座に参照できます。\n- **サーバー側棋譜・定跡管理:** サーバー上の特定のディレクトリにある棋譜・定跡ファイルを、スマホやタブレットから閲覧・編集することができます。棋譜ファイルは、局面やヘッダー情報で検索することも可能です。\n- **次の一手問題:** SFEN形式の局面データをJSONファイルとして配置することで、アプリ上で次の一手問題を出題・解答できます。\n\n---\n\n## ディレクトリ構成\n\n本リポジトリは、以下の2つの主要なモジュールで構成されています。\n\n- **`shogihome/`**: Webサーバーおよびフロントエンド（TypeScript/Vue.js）。\n- **`engine-wrapper/`**: 将棋エンジンを制御するエンジンラッパー（Python/Node.js）。`engines.json` で複数のエンジンを管理します。\n\n---\n\n## 利用方法\n\n### A. 配布パッケージ（exe）を利用する場合\n\n[Releases](https://github.com/yoset77/shogihome-lab/releases) からWindows用のビルド済みファイルをダウンロードできます。\n\n1. ダウンロードしたファイルを展開し、ルートディレクトリの **`ShogiHomeLab.exe`**（ランチャー）を実行すると、Webサーバーとエンジンラッパーがバックグラウンドで起動します。\n2. ランチャーの「Engine Settings」をクリックして、エンジンの登録を行ってください。\n3. 表示されているQRコードをスマホで読み取るか、ブラウザで `http://localhost:8140` にアクセスしてください。\n\n詳細なセットアップ手順やトラブルシューティングについては、同梱の **[ユーザーガイド (README.txt)](./assets/release/README.txt)** を参照してください。\n\n### B. ソースコードから実行・ビルドする場合\n\n#### 前提条件\n- **Node.js:** v24以上\n- **Python:** 3.10以上\n\n#### 1. インストール\n\n```shell\ngit clone https://github.com/yoset77/shogihome-lab.git\ncd shogihome-lab\n```\n\n#### 2. Webサーバー (shogihome) のセットアップ\n\n```shell\ncd shogihome\nnpm ci\n\n# 設定ファイルの作成\ncp .env.example .env\n# .env を編集して PORT=8140 等を設定\n\n# フロントエンドのビルド\nnpm run build\n```\n\n#### 3. エンジンラッパー (engine-wrapper) のセットアップ\n\n```shell\ncd engine-wrapper\nuv sync\ncp .env.example .env\n\n# 設定ツールの起動\nuv run config_editor.py\n# エンジンの登録と設定\n```\n\n#### 4. サーバーの起動\n\n**Webサーバー:**\n```shell\ncd shogihome\nnpm run server:start\n```\n\n**エンジンラッパー:**\n```shell\ncd engine-wrapper\nuv run engine_wrapper.py\n# または\nnpm run start\n```\n\n### C. Docker を利用する場合 (Webサーバーのみ)\n\n`shogihome/` (Webサーバー) は Docker コンテナとして実行することも可能です。\n\n```shell\ncd shogihome\ncp .env.example .env\n# .env の編集 (REMOTE_ENGINE_HOST 等)\ndocker compose up -d --build\n```\n※ エンジンラッパー (`engine-wrapper/`) は別途ホストマシン等で起動する必要があります。\n\n---\n\n## アーキテクチャ概要\n\n本アプリケーションは、Webサーバーとエンジンラッパーの役割が分離されています。\n\n```mermaid\ngraph LR\n    A[\"Browser (Frontend)\"] -- \"WebSocket (ws)\" --\u003e B[\"Middle Server (Node.js)\"]\n    B -- \"TCP Socket (run \u003cid\u003e)\" --\u003e C[\"Engine Wrapper\"]\n    C -- \"Stdin/Stdout\" --\u003e D[\"USI Engine (YaneuraOu, etc.)\"]\n```\n\n- **エンジンラッパー (`engine-wrapper`):**\n  - 将棋エンジン（`YaneuraOu`など）を管理し、TCPソケット(4082番)で待ち受けます。\n  - フロントエンドからのリクエストに応じてエンジンを起動・操作します。\n\n- **Webサーバー (`shogihome`):**\n  - ブラウザ向けにShogiHomeのアプリ画面（HTML/JS）を配信します(8140番)。\n  - ブラウザからのWebSocket通信を、TCP通信に変換してエンジンラッパーに中継します。\n\n### セキュリティ機能\n\n本アプリケーションは、以下のセキュリティ対策を実装しています。\n\n- **USIコマンドバリデーション:** サーバー側でコマンドを検証し、コマンドインジェクションを防ぎます。\n- **オリジン制限:** WebSocket接続時にオリジンを検証し、許可されたオリジン以外からの接続を拒否します。\n- **HTTPヘッダー保護:** Helmetを使用し、適切なCSP (Content Security Policy) 等を設定しています。\n- **エンジン接続認証:** 環境変数 (`WRAPPER_ACCESS_TOKEN`) を設定することで、Webサーバーとエンジンラッパー間の通信を認証（HMAC-SHA256）し、不正な接続を防ぐことができます。\n\n---\n\n## 応用\n\n### 外部からのアクセス (VPN / PWA)\n\n[Tailscale](https://tailscale.com/) などのVPNサービスを利用することで、外出先からもアクセスすることができます。\n\n1.  **VPN接続:** PCとスマホをVPN（Tailscale等）で接続します。\n2.  **アクセス:** スマホのブラウザから `http://[PCのIPアドレス]:8140` にアクセスします。\n3.  **HTTPS化 (オプション):** `tailscale serve` などを使うことで、HTTPS化してPWAとしてインストールすることも可能です。\n\n---\n\n## Contribution\n\n本プロジェクトは個人の趣味として開発されており、メンテナンスのリソースが限られています。  \nそのため、**Issue や Pull Request をいただいても、対応できない場合や返信が遅れる場合があります。**\nあらかじめご了承ください。\n\n---\n\n## Acknowledgements\n\nShogiHome Lab は、[Kubo Ryosuke (sunfish-shogi)](https://github.com/sunfish-shogi) 氏によって開発された [ShogiHome](https://github.com/sunfish-shogi/shogihome) をベースにしたハードフォークです。  \nオリジナルの作者に深く感謝いたします。\n\n---\n\n## Licences\n\n### ShogiHome Lab\n\n[MIT License](LICENSE)\n\n### Icon Images\n\n[/shogihome/public/icon](https://github.com/yoset77/shogihome-lab/tree/main/shogihome/public/icon) 配下のアイコン画像は [Material Icons](https://google.github.io/material-design-icons/) を使用しています。\nこれには [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) が適用されます。\n\n### Dependencies\n\n本ソフトウェアは多数のオープンソースソフトウェアを使用しています。詳細はアプリ内の「Third Party Libraries」画面でご確認ください。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoset77%2Fshogihome-lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoset77%2Fshogihome-lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoset77%2Fshogihome-lab/lists"}