Communityコーディング&開発github.com

hostel-platforms

ホステルプラットフォームを理解し、変更するためのスキルです。デフォルトプラットフォーム(iOS、Android、macOS、Windows、Linux)や各プラットフォームに必要なマシン設定、デバイスとラベル、さらに独自のプラットフォーム(スクリプト付き)を管理します。ユーザーが「マシンにiOS/Androidを追加」「MacにiOS開発に必要なものは?」「Androidエミュレータが起動しない」「デバイスを追加」「独自プラットフォームを作成(例:tvOS)」「プロビジョン/準備スクリプトを変更」と言った場合に使用します。

hostel-platforms とは?

このスキルは、ホステル(Hostel)インフラストラクチャにおけるプラットフォーム管理を担当します。OSプラットフォーム(linux、macos、windows)とデバイスプラットフォーム(ios、android、またはユーザー定義)の2種類を扱い、各プラットフォームがどのマシンで利用可能か、どのような前提条件が必要か(Xcode、Java 17、/dev/kvm、OpenSSHなど)を定義します。内蔵プラットフォームはデフォルトで使用でき、独自のプラットフォーム(例:tvos)を作成してプッシュすることも可能です。デバイス名(例:iphone-17-pro、pixel-9)やラベル(例:xcode-26.5、desktop、kvm)による選択、排他リース(desktopラベルが必要な場合など)もサポートします。コマンドラインからプラットフォーム一覧の表示、カスタムプラットフォームの作成・変更・削除、スクリプト(provision、prepare、screenshot、reset、health)の管理が行えます。このスキルは、CI/CDパイプラインでのテスト実行や開発環境の自動プロビジョニングに特に有用です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/csansoon/hostel/tree/HEAD/skills/hostel-platforms

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

プラットフォーム

プラットフォームとは、ゲストが要求するものです(hostel acquire <platform>)。2種類あります。

種類名前それを提供するマシン
OSプラットフォームlinux、macos、windowsそのOSを搭載するすべてのマシン(自動的に割り当てられます)。platforms に記載する必要はありません。
デバイスプラットフォームios、android、または独自のものplatforms に記載されているマシン。

Node、Java、pnpmなどのツールはプラットフォームではありません。リポジトリの mise ファイルで宣言するか(hostel-use)、マシンの tools キー(hostel-rooms)で指定します。

hostel platforms              # 全員向け: 空きスロット、キュー、待機、デバイス
hostel config platforms       # 管理者向け: 名前、種類、マシン、ソース

デフォルトプラットフォーム

バイナリには ios、android、macos、windows が組み込まれています。linux はスクリプトのないOSプラットフォームです。

プラットフォームデバイスマシンのOSマシンに必要なもの
iosiphone-17-pro、ipad-pro-13(最大2台)macOSXcodeとiOSシミュレータランタイム。人がインストールする必要があります。ラベル xcode-26.5 が必要です。オプションのマシン env: HOSTEL_IOS_RUNTIME(例:26.5)、DEVELOPER_DIR。
androidpixel-9、pixel-tablet(最大2台)Linux または macOSJava 17以降: マシンに tools = { java = "21" } を設定します。Linux: /dev/kvm がルームユーザーに使用可能であること(マシンに kvm などのラベルを付けます)。エミュレータのパッケージか、パスワードなしの sudo が必要です。プロビジョンは約5GBをダウンロードします(タイムアウト30分)。オプションの env: HOSTEL_ANDROID_API(36)、HOSTEL_ANDROID_TAG(google_apis)、HOSTEL_ANDROID_PORT(5554)。
macosなしmacOSヘッドレスビルド: 不要。デスクトップアプリ: ラベル desktop、ルームユーザーの自動ログイン、ロック解除された画面、/usr/libexec/sshd-keygen-wrapper の画面収録許可、自動化モード(パスワードなし、sudo automationmodetool enable-automationmode-without-authentication)。
windowsなしWindowsOpenSSH Server。デスクトップアプリ: ラベル desktop、サインイン済みでロック解除されたデスクトップセッション内の "Hostel desktop" タスク。
linuxなしLinuxSSHサーバー。

プラットフォームがコマンドに提供するもの:

  • ios: リースごとに新しくクリーンなシミュレータ。SIMULATOR_UDID(最初のデバイス)と SIMULATOR_UDIDS。
  • android: クリーンなスナップショットからの読み取り専用エミュレータ。ANDROID_SERIAL、ANDROID_SERIALS、ANDROID_HOME。
  • desktop を必要とするリースは排他的です。マシン全体を占有します。

各ルームはさらに agent-device(タップ、タイプ、画面読み取り)を取得します。Windowsでは winapp も取得します。mise.agent_device = false(hostel config settings set)でオフにできます。

MacとWindowsの完全な準備(ユーザー、リモートログイン、自動ログイン、デスクトップタスク)は docs/static-room-setup.md にあります。

デバイスとラベル

  • --device <d> でプラットフォームのデバイスを選択します(繰り返し指定可能、最大 max_devices)。指定しない場合、リポジトリの devices またはプラットフォームの最初のデバイスが適用されます。
  • ラベルはマシン上の自由な単語です(labels = [...])。マシンは、必要なラベル(プラットフォームの requires、リポジトリの hostel.toml の requires、および各 --require)をすべて持っている場合にのみ候補となります。
  • ラベルはマシンが持つものにちなんで名付けます: xcode-26.5、desktop、kvm。
  • 未知のプラットフォーム、デバイス、またはどのマシンも持っていないラベルは、すぐに終了コード69で失敗します。

独自のプラットフォーム

hostel config platforms new tvos ./tvos --os macos     # テンプレートフォルダを作成(--os linux|macos|windows)
# ./tvos/platform.toml とスクリプトを編集
hostel config platforms push ./tvos                    # チェックして保存。名前はフォルダ名になります。
hostel config rooms set mac-mini platforms=ios,tvos     # マシンで提供させる

デフォルトプラットフォームの変更:

hostel config platforms pull ios ./ios      # 現在のファイルを新しいフォルダに取得
hostel config platforms push ./ios          # バージョンを保存(ソース: changed)
hostel config platforms reset ios           # このリリースのバージョンに戻す
hostel config platforms remove tvos         # マシンがリストしている場合は拒否されます

push --name <n> で別の名前で保存します。プッシュは即座に適用されます。プラットフォームが変更された空きルームは、再度プロビジョンされます。プッシュでは platform.toml、README.md、スクリプトのみが送信されます。

platform.toml

description = "tvOS Simulator"
devices = ["apple-tv-4k"]          # 最初のものがデフォルト(デバイスプラットフォームのみ)
max_devices = 1                    # デフォルト 1
requires = ["xcode-26.5"]          # 各マシンが持つ必要のあるラベル
exclusive = false                  # true: リースがルーム全体を占有
script_timeouts = { provision = "20m" }   # デフォルト: provision 20m、それ以外 3m

OSプラットフォームフォルダ(linux、macos、windows)には、description、requires、exclusive、script_timeouts を設定できますが、devices は設定できません。

スクリプト

ファイル名: OSが macos または linux の場合は <step>.<os>.sh、OSが windows の場合は <step>.<os>.ps1 です。ルームのOSがファイルを選択します。スクリプト名のスペルミスはエラーになります。

ステップタイミング実行ディレクトリ
provision各ルームに対して1回(スクリプトが変更された場合は再度):プラットフォームに必要なものをインストールして確認hostel/
prepare各リース(準備完了前):デバイスを起動し、それらの情報を device.env に書き込むslots/<slot>/
screenshothostel screenshot:$1 は出力PNGパス、$2 はデバイスslots/<slot>/
resetクリーンアップ時:prepare で起動したものを停止して削除slots/<slot>/
healthクリーンアップ後、修復時、ウォームルームがリースを受け入れる前:ルームがプラットフォームを提供できない場合は非ゼロで終了hostel/

ルール:

  • すべてのステップはオプションですが、デバイスプラットフォームでそれをリストするマシンの各OSに対しては、prepare は必須です。
  • 各ステップは安全に再実行できる必要があります。
  • 非ゼロの終了コードは失敗です。プロビジョンまたは準備の失敗はルームを「Broken」状態にし、リースをキューに戻します。出力の最後の4KBはイベントログに記録されます(hostel status <room>)。
  • ヘルパーは /bin/sh <script> を実行し(実行ビットは不要)、タイムアウト時にプロセスグループを停止します。
  • マシンレベルの tools は provision の前にインストールされるため、スクリプトで使用できます。

スクリプトの環境変数: HOSTEL_PLATFORM、HOSTEL_PLATFORM_DEVICES(プラットフォームの全デバイス)、HOSTEL_SLOT、HOSTEL_SLOT_DIR、HOSTEL_WORK_DIR、HOSTEL_CACHE_DIR(リース間で保持)、HOSTEL_LEASE_ID、および prepare、screenshot、reset では: HOSTEL_DEVICES(リースのデバイス、カンマ区切り)、HOSTEL_EXCLUSIVE(ルーム全体のリースの場合は 1)。また MISE_* 変数、プロバイダー、マシン、スロットの env、および device.env(screenshot と reset 用)。マシンの env を使用して、スクリプトをマシン間で変えることができます。

device.env の行(NAME=value)は、すべてのリースコマンドの環境に取り込まれます。プラットフォームが書き込む名前を文書化してください。

確認

hostel config platforms
hostel status mac-mini       # イベントにプロビジョン出力とエラーが表示されます

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

関連スキル