YOKOHAMA SPORTS COMPLEX / ロビーサイネージ

仕様書・編集ガイド

運用担当者・デザイナー・開発者向け

1. 概要

ロビーに設置したiPad(縦置き2台)に表示する、タッチ操作式の館内案内です。来場者がボタンを押すと該当の案内が表示され、しばらく操作がなければ自動でトップに戻り、さらに続けば待機画面になります。

設計の前提

  • 掲載内容の更新はすべて遠隔で完結します。現地に行くのは初期設置と機器故障時のみです。
  • 画面階層はトップと各項目の往復のみ。深い階層は作りません。
  • ネットワークが切れても白画面にはせず、案内文を表示します。
  • 設定ファイルが壊れていても既定値で表示を続けます。案内が止まらないことを最優先にしています。

3プランの違い

プラン掲載内容画面の器営業カレンダー
ライト提供データを画像で掲載共通なし
スタンダードCanvaで制作し埋め込み共通なし
プレミアムCanva+データ連携拡張版あり(自動生成)

ライトとスタンダードは同じファイル

index.html style.css app.js は両者で内容が同一です。違いは config.json が画像を指すか Canva の URL を指すかだけです。片方を修正したら、もう片方にも同じファイルをコピーしてください。

2. ファイル構成

light/ ・ standard/ ├─ index.html 画面の構造。id は app.js が参照するため変更しない ├─ style.css 見た目。冒頭の「01. 設定値」に色をまとめている ├─ app.js 動作 ├─ config.json 文言・掲載内容・秒数などの設定 ├─ README.md 運用手順 └─ assets/ ロゴ、掲載画像(ライトのみ) premium/ ├─ index.html ├─ style.css ├─ app.js カレンダー生成・スライド・集計を含む拡張版 ├─ config.json ├─ schedule.csv 営業カレンダーのデータ元 ├─ README.md └─ assets/ ロゴ、待機画面のスライド画像

更新時はフォルダごとアップロードしてください

ファイルを分割したため、style.css だけ差し替えて index.html を古いまま残すと表示が崩れます。Cloudflare Pages はフォルダ単位のドラッグ&ドロップで上書きされるので、常にフォルダごと上げてください。

3. どこを編集するか

変えたいもの編集するファイル備考
ボタンの名前config.jsonitemsja / en
掲載する内容config.jsonimage(画像)または url(Canva)
トップの案内文config.jsonlead / footerNote
トップに戻る秒数config.jsonidleSeconds
営業日・営業時間schedule.csvプレミアムのみ
待機画面のスライドconfig.jsonプレミアムのみ。slides
style.css冒頭の :root ブロック
文字サイズ・余白style.css該当セクション。単位は cqw
ボタンの並び順・数config.jsonitems の順序。2列で並ぶため偶数が収まりよい
画面の構造そのものindex.htmlid は変更しない
動作・挙動app.js冒頭の目次を参照

まず config.json を疑ってください

日常の変更のほとんどは config.json だけで完結します。style.cssapp.js を触る必要があるのは、デザインや挙動そのものを変えるときだけです。

4. config.json 仕様

文字コードは UTF-8。末尾のカンマは付けないでください。編集後は jsonlint.com などで構文を確認すると安全です。壊れていても画面は白くならず、既定値で表示を続けます。

共通項目

キー内容初期値
brandNoteロゴ下と待機画面に出る施設名ゴルフドライビングレンジ
leadトップ中央の案内文ご覧になりたい項目にお触れください
footerNoteトップ右下の一言
unsetNote未設定項目に出す文言。\n で改行
idleSeconds詳細画面からトップに戻るまでの秒数60
attractIdleSecondsトップから待機画面になるまでの秒数90
lockIframetrue で Canva 画面内のタップを無効化true
reloadHour自動再読込を行う時刻(0〜23)。-1 で無効5
maxZoom拡大の上限倍率3
offlineTitle
offlineNote
通信断・読み込み失敗時の文言
itemsボタン項目の配列8項目

items の書き方

// 画像を掲載する(ライト)
{ "ja": "料金のご案内", "en": "FEES", "image": "assets/content-fee.jpg" }

// Canva を埋め込む(スタンダード・プレミアム)
{ "ja": "料金のご案内", "en": "FEES", "url": "https://www.canva.com/design/XXXX/view?embed" }

// 営業カレンダーを表示する(プレミアムのみ。1項目だけ)
{ "ja": "営業スケジュール", "en": "SCHEDULE", "type": "calendar" }

// 未設定(点線の「コンテンツエリア」表示になる)
{ "ja": "ご利用約款", "en": "TERMS OF USE", "url": "" }

プレミアム固有

キー内容初期値
scheduleUrlカレンダーの外部データ元。空欄なら schedule.csv空欄
scheduleRefreshMinutesカレンダーを取り直す間隔(分)。0 で無効30
lastBallMinutes球貸最終を営業終了の何分前とするか50
slides待機画面のスライド。{"type":"logo"} はロゴ画面3枚
slideSecondsスライドの切替秒数6
adminPin動作状況画面のPIN(4桁)1234
logEndpointタップ集計の送信先。空欄なら画面内集計のみ空欄

5. schedule.csv 仕様(プレミアム)

上段に曜日ごとの通常営業、下段に変更・例外を書きます。日常の入力は下段だけです。

[通常営業(曜日ごと)]
曜日,開始,終了
日,連続,24:00
月,06:00,24:00
火,09:00,24:00
金,06:00,連続
土,連続,連続

[変更・例外(下の行が優先)]
開始日,終了日,対象曜日,開始,終了,備考
2027-01-05,2027-02-26,金土日,06:00,24:00,オールナイト営業休止
2027-02-27,,,06:00,連続,オールナイト営業を再開
2027-03-10,,,,,設備点検のため休業

記法

書き方意味
06:00通常の時刻
24:00その日の終わり(深夜0時)
29:00翌朝5時。画面には「翌05:00」と表示
連続前日から継続、または翌日へ継続。両方が「連続」なら終日営業
開始・終了とも空欄休業日

変更・例外の考え方

  • 下に書いた行が、上の行を上書きします。変更が決まったら末尾に1行足すだけです。過去の行を消したり直したりする必要はありません。
  • 終了日 を空欄にすると、その日1日だけの指定になります。
  • 対象曜日金土日 のように書くと、期間内のその曜日だけに適用されます。空欄なら全日。
  • 書式が不正な行は無視され、残りの行で表示が続きます。無視した行数は動作状況画面で確認できます。

Googleスプレッドシートを使う場合

同じ内容をA列から入力し、ファイル → 共有 → ウェブに公開 → カンマ区切り形式(.csv)で公開します。発行されたURLを config.jsonscheduleUrl に設定してください。公開設定が正しくないと取得に失敗するため、設定後は必ず実機で表示を確認してください。

6. 画面の動作仕様

画面遷移

  • トップのボタンを押すと詳細画面へ。「もどる」でトップへ戻ります。階層はこの1段のみです。
  • 詳細画面で idleSeconds 秒(初期値60)操作がなければトップへ戻ります。
  • トップで attractIdleSeconds 秒(初期値90)操作がなければ待機画面になります。
  • 待機画面はどこを触ってもトップに戻ります。

コンテンツエリアの拡大

  • 拡大されるのはコンテンツエリアだけで、メニューやヘッダーは変わりません。
  • 操作は3通り。二本指のピンチ二回続けてタップ(等倍と2倍の切替)、右上の + / − ボタン
  • 初回表示時に「二本指で広げると拡大できます」の案内が4秒間出ます。
  • 拡大中は指1本でスクロールできます。トップに戻ると倍率は元に戻ります。
  • Canva は拡大時に再描画されるため文字がぼやけません。画像も元データの解像度で拡大されます。

通信・データ取得の失敗時

  • Canva の読み込みが8秒を超える、または通信断のときは、白画面ではなく案内文を表示します。
  • config.json が読めない場合は、app.js 内の既定値で表示を続けます。
  • カレンダーの取得に失敗した場合は、直前に取得できた内容で表示を継続します。

更新の反映

  • Canva は保存すると次回の画面読み込み時に反映されます。
  • プレミアムのカレンダーは scheduleRefreshMinutes(初期値30分)ごとに取り直します。トップ表示中のみ実行するため、閲覧中に画面が変わることはありません。
  • 毎日 reloadHour(初期値5時)に一度だけ全体を再読込します。これにより、iPadに触れずに設定変更が反映されます。

キオスクとしての制御

  • OS標準のピンチズーム・長押しメニューは無効化しています。
  • lockIframetrue のとき、Canva 画面内のタップを受け付けません。来場者が Canva のロゴに触れて外部サイトへ離脱する事故を防ぎます。

7. デザイン仕様

変数使用箇所
--brand#9DAF88(Pantone 7494 C)上部の帯、罫線、英字表記、待機画面の地色
--leaf#74AA50(Pantone 7489 C)カレンダーの本日枠のみ
--ink#1B2119画面の地色
--ivory#F2F1EAコンテンツエリアの地色、本文の白

ブランドカラーの変更には確認が必要です

--brand は施設のロゴ規定色です。変更する場合は先方の了承を得てください。なお帯の上のロゴは白ヌキ、機能文字は濃色という使い分けにしています。ロゴのように大きい要素なら白で成立しますが、ボタンや見出しのサイズでは白だと視認性が不足するためです。

書体

  • 見出し・項目名は明朝(--serif)。欧文は Didot 系で、ロゴのワードマークと合わせています。
  • 本文・UI はゴシック(--sans)。
  • いずれもiPadに標準搭載の書体のみを使用しており、Webフォントは読み込みません。通信が切れても文字化けしません。

寸法

  • 基準はiPad縦置き 820 × 1180pt。
  • 寸法の単位は cqw(画面幅に対する割合)。1cqw ≒ 8.2px。px を直接書かないでください。機種が変わったときに比率が崩れます。
  • 本文は最小でも 1.9cqw(実寸約16px)。高齢の来場者を想定し、通常は 2.1cqw 以上を使っています。
  • タップ対象は最小 13.8cqw(実寸約113px)四方以上を確保しています。

Canva側のデザインサイズ

コンテンツエリアの比率に合わせて 横820 × 縦980px で作成してください。この比率で作ると、拡大せずに全体が読めます。

8. よくある作業

ボタンの名前を変えたい
config.jsonitems にある該当項目の ja(日本語)と en(英字)を書き換え、フォルダごとアップロードします。翌朝5時に自動反映されます。すぐ反映したい場合はiPadで再読込してください。
掲載する画像を差し替えたい(ライト)
新しい画像を assets/ に置き、config.jsonimage にパスを書きます。横幅1200〜1600px、1枚500KB以内が目安です。同じファイル名で上書きすると古い画像が残る場合があるため、ファイル名を変えるのが確実です。
Canvaの内容を直したい(スタンダード・プレミアム)
Canvaで修正して保存するだけです。ファイルの操作は不要です。翌朝5時の自動再読込で画面に反映されます。
臨時休業を登録したい(プレミアム)
schedule.csv の下段の末尾に1行足します。
例:2027-03-10,,,,,設備点検のため休業
カレンダー・本日の営業時間・球貸最終時間が同時に更新されます。
待機画面のスライドを差し替えたい(プレミアム)
画像を assets/ に置き、config.jsonslides に追記します。
{ "image": "assets/slide-lesson.jpg", "kicker": "GOLF LESSON", "title": "はじめての方も安心" }
kickertitle は省略できます。
ボタンを7個や6個に減らしたい
config.jsonitems から要素ごと削除します。2列で並ぶため偶数のほうが収まりよく見えます。奇数にすると最終行に空きができます。
トップに戻る秒数を変えたい
idleSeconds(詳細→トップ)と attractIdleSeconds(トップ→待機画面)を変更します。長文の掲載物がある場合は90〜120秒を推奨します。読んでいる最中に画面が戻ると混乱を招くためです。
色を変えたい
style.css の冒頭「01. 設定値」にある :root ブロックだけを編集します。ここを変えると画面全体に反映されます。個別の箇所だけ変えたい場合は、該当セクションのコメントを目印に探してください。

9. 公開手順

ローカルで確認する

index.html をダブルクリックで開くと、ブラウザの制限で config.json を読み込めません。簡易サーバーを立ててください。

cd standard
python3 -m http.server 8000

ブラウザで http://localhost:8000 を開きます。

Cloudflare Pages

  1. 「Workers と Pages」→「アプリケーションを作成する」
  2. 画面下部の「Pages を導入しようとお考えですか? 始める」をクリック(上部の「Upload your static files」は Workers に入ってしまいます)
  3. 「ファイルをドラッグアンドドロップする」→「始める」
  4. プロジェクト名を入力
  5. フォルダごとドラッグ&ドロップ

さくらインターネット(本番想定)

FTPで /kiosk/ を作り、ファイル一式を置きます。WordPress の固定ページとしては作らないでください。テーマやプラグインの更新で表示が壊れます。

/kiosk/.htaccess
RewriteEngine Off
Header set X-Robots-Tag "noindex, nofollow"
<FilesMatch "\.(html|json|css|js|csv)$">
  Header set Cache-Control "no-cache, must-revalidate"
</FilesMatch>

キャッシュ設定を忘れないでください

これがないと、設定を更新してもiPadが古い画面を表示し続けます。原因の特定に時間を取られる類の不具合です。

iPadの設定

  1. Safariで公開URLを開く
  2. 共有ボタン →「ホーム画面に追加」
  3. 追加されたアイコンから起動(アドレスバーが消えます)
  4. 設定 → アクセシビリティ → アクセスガイド をオン
  5. 画面を表示した状態でトップボタンを3回押して開始
  6. 自動ロックを「なし」に、常時給電にする

停電や再起動でアクセスガイドは自動復帰しません。自動で固定したい場合は Apple Configurator のシングルアプリモードを使用してください。

10. トラブル対応

症状確認すること
更新したのに変わらない翌朝5時の自動再読込を過ぎているか。急ぐ場合はアクセスガイドを終了し画面を下に引いて再読込。それでも変わらなければ、ホーム画面のアイコンを削除して再追加。
コンテンツエリアが白い/案内文が出るWi-Fi接続。Canvaのデザインが公開状態になっているか。config.jsonurl が正しいか。
ボタンが点線表示のままconfig.jsonurl または image が空。またはJSONの書式エラー(既定値で表示されている状態)。
レイアウトが崩れたstyle.css だけ、または index.html だけを差し替えていないか。フォルダごとアップロードし直してください。
カレンダーが更新されない(プレミアム)トップのロゴを2秒長押しし、PIN入力で動作状況画面を開く。データ元・最終取得時刻・無視した行数を確認。
カレンダーの一部の日だけ反映されないschedule.csv の日付書式(2027-03-10 形式)。全角の記号が混ざっていないか。動作状況画面の「無視した行」を確認。
拡大できない未設定項目や案内文の表示中は拡大できません(対象がないため)。右上のボタンが表示されていれば拡大可能な状態です。

切り分けの起点は動作状況画面です(プレミアム)

トップのロゴを2秒長押しし、PIN(初期値 1234)を入力すると、データ元・最終取得時刻・読み込んだ行数・無視した行数・タップ集計が確認できます。現地に行かずに、原因がデータ側か表示側かを判断できます。
‹ 一覧へ戻る