自己ホスト型のダッシュボードアプリGlanceを試す
概要
セルフホスト型のダッシュボードアプリのGlanceを試した際の記事になります。Glanceが一般的なダッシュボードのWidgetの他に Twitch top games, Custom API, iframe, html, … などなど面白いWidgetをサポートしているので、色々試してみました。
Glanceとは?
Glanceは高速かつ軽量で、様々なウィジェットとカスタマイズ可能なレイアウトを備えており、モバイルデバイスにも最適化されています
- 自己ホスト型情報ダッシュボード ― RSS・Reddit・Hacker News・天気・株価など多数のフィードを1画面に集約できるホームページアプリです
- Go 製・超軽量 ― 依存が少なく、単体 < 20 MB のスタンドアロン実行ファイルまたは極小 Docker イメージで動作し、メモリ消費も控えめ
- 豊富なウィジェット + カスタム拡張 ― 公式で十数種のウィジェットを提供し、iframe・HTML・API などで独自ウィジェットも追加可能
- YAML でフルカスタマイズ ― ページ/列レイアウトや各ウィジェット設定、テーマ・CSS まで YAML ファイルで柔軟に定義
- モバイル最適化 & テーマ切替 ― レスポンシブ UI とテーマ機能で、スマホ閲覧や外観変更も簡単
- 導入が簡単 ― Docker Compose テンプレート、公式コンテナ、Linux/Windows/macOS 向けバイナリが用意され、即デプロイ可能
docker composeでサクッと動作させてみる
まずは以下の内容で docker-compose.yml
を作成します。
services:
glance:
container_name: glance
image: glanceapp/glance
restart: unless-stopped
volumes:
- ./config:/app/config
ports:
- 8080:8080
次に以下を実施します。
mkdir config && curl -o config/glance.yml https://raw.githubusercontent.com/glanceapp/glance/refs/heads/main/docs/glance.yml
あとは docker compose up -d
で起動し、http://localhost:8080/ にアクセスすると、うまくいってれば以下の様なダッシュボードが表示されます。
config/glance.yml
の中身は以下の様になっており、大体雰囲気がわかります。
pages:
- name: Home
# Optionally, if you only have a single page you can hide the desktop navigation for a cleaner look
# hide-desktop-navigation: true
columns:
- size: small
widgets:
- type: calendar
first-day-of-week: monday
- type: rss
limit: 10
collapse-after: 3
cache: 12h
feeds:
- url: https://selfh.st/rss/
title: selfh.st
limit: 4
- url: https://ciechanow.ski/atom.xml
- url: https://www.joshwcomeau.com/rss.xml
title: Josh Comeau
- url: https://samwho.dev/rss.xml
- url: https://ishadeed.com/feed.xml
title: Ahmad Shadeed
- type: twitch-channels
channels:
- theprimeagen
- j_blow
- piratesoftware
- cohhcarnage
- christitustech
- EJ_SA
- size: full
widgets:
- type: group
widgets:
- type: hacker-news
- type: lobsters
- type: videos
channels:
- UCXuqSBlHAE6Xw-yeJA0Tunw # Linus Tech Tips
- UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling
- UCsBjURrPoezykLs9EqgamOA # Fireship
- UCBJycsmduvYEL83R_U4JriQ # Marques Brownlee
- UCHnyfMqiRRG1u-2MsSQLbXA # Veritasium
- type: group
widgets:
- type: reddit
subreddit: technology
show-thumbnails: true
- type: reddit
subreddit: selfhosted
show-thumbnails: true
- size: small
widgets:
- type: weather
location: London, United Kingdom
units: metric # alternatively "imperial"
hour-format: 12h # alternatively "24h"
# Optionally hide the location from being displayed in the widget
# hide-location: true
- type: markets
markets:
- symbol: SPY
name: S&P 500
- symbol: BTC-USD
name: Bitcoin
- symbol: NVDA
name: NVIDIA
- symbol: AAPL
name: Apple
- symbol: MSFT
name: Microsoft
- type: releases
cache: 1d
# Without authentication the Github API allows for up to 60 requests per hour. You can create a
# read-only token from your Github account settings and use it here to increase the limit.
# token: ...
repositories:
- glanceapp/glance
- go-gitea/gitea
- immich-app/immich
- syncthing/syncthing
# Add more pages here:
# - name: Your page name
# columns:
# - size: small
# widgets:
# # Add widgets here
# - size: full
# widgets:
# # Add widgets here
# - size: small
# widgets:
# # Add widgets here
テーマを変更させてみる
こちらのドキュメントにもある通り、HSLで設定する様です。
試しに用意されているテーマを反映させてみます。config/glance.yml
の一番上に以下を追加します。
# ↓追加
theme:
background-color: 186 21 20
contrast-multiplier: 1.2
primary-color: 97 13 80
# ここまで
pages:
- name: Home
# ....
画面をリロードすると以下の様にテーマが変更されます ✨
よく使いそうなWidgetを試す
こちらで用意されているWidgetが確認できます。設定できるプロパティ内で cache
があり、これで更新タイミングをある程度設定できる様です。
cache: 30s # 30 seconds
cache: 5m # 5 minutes
cache: 2h # 2 hours
cache: 1d # 1 day
Calendar
早速Calendar Widgetを試してみます。config/glance.yml
を以下に変更します。
(分かりやすくする為、1つのWidgetのみ表示する様にしてます)
pages:
- name: Home
columns:
- size: full
widgets:
- type: calendar
first-day-of-week: monday
- first-day-of-week
-
カレンダーの開始曜日。すべての曜日を指定できます
-
friday
にした様子👇
-
Weather
次に、特定の場所の天気情報を表示するWidgetで こちら のデータを使っている様です。
例) 東京の天気
pages:
- name: Home
columns:
- size: full
widgets:
- type: weather
location: Tokyo, Japan
units: metric
hour-format: 24h
Clock
現在の日付と時刻を表示するWidgetになります。 timezones
で複数のタイムゾーンを設定できる様です。
例) Europe/Paris
と America/New_York
のタイムゾーンも表示
pages:
- name: Home
columns:
- size: full
widgets:
- type: clock
hour-format: 24h
timezones:
- timezone: Europe/Paris
label: Paris
- timezone: America/New_York
label: New York
RSS
複数のRSSフィードの記事一覧を表示できるWidgetになります。
例) Github Trending Daily
pages:
- name: Home
columns:
- size: full
widgets:
- type: rss
title: RSS
feeds:
- url: https://mshibanami.github.io/GitHubTrendingRSS/daily/all.xml
title: Github Trending Daily
style
style
に以下の値を設定する事ができ、好みに応じて表示できる様です。
レイアウト名 | 適したカラムサイズ |
---|---|
vertical-list | フルカラムおよびスモールカラムに適している (デフォルト) |
detailed-list | フルカラムに適している |
horizontal-cards | フルカラムに適している |
horizontal-cards-2 | フルカラムに適している |
-
detailed-list
-
horizontal-cards
-
horizontal-cards-2
Hacker News
Hacker News の投稿一覧を表示します。
例) デフォルトの設定で一覧表示
pages:
- name: Home
columns:
- size: full
widgets:
- type: hacker-news
-
sort-by
- 指定可能な値は top, new, bes
-
comments-url-template
- リンク先を別のページにする
- 例)
comments-url-template: https://www.hckrnws.com/stories/{POST-ID}
面白そうなWidgetを試す
ここからは他になさそうな面白そうなWidgetを試していこうと思います。
Twitch top games
Twitchで最も視聴者の多いゲームのリストを表示します。他に Twitch Channels というのもあります。
例)
pages:
- name: Home
columns:
- size: full
widgets:
- type: twitch-top-games
exclude:
- just-chatting
- pools-hot-tubs-and-beaches
- music
- art
- asmr
- exclude
- カテゴリーのURLを見てslugを指定する必要があります
Custom API
カスタムテンプレートを使用して、JSON APIからのデータを表示することができます。
例)
pages:
- name: Home
columns:
- size: full
widgets:
- type: custom-api
title: Users
cache: 6h
url: https://jsonplaceholder.typicode.com/users
template: |
<ul class="list list-gap-10 collapsible-container" data-collapse-after="5">
{{ range .JSON.Array "" }}
<li>{{ .String "name" }}</li>
{{ end }}
</ul>
-
headers
-
ヘッダの指定ができる
headers: x-api-key: your-api-key Accept: application/json
-
-
template
- こちらのドキュメントを参照
iframe
iframeをウィジェットとして埋め込むことができます。
例) Google Maps 埋め込み
pages:
- name: Home
columns:
- size: full
widgets:
- type: iframe
source: https://www.google.com/maps/embed?pb=....
height: 400
HTML
簡単なhtmlを埋め込むことができます。
例)
pages:
- name: Home
columns:
- size: full
widgets:
- type: html
source: |
<video width="400" controls>
<source src="xxxxx.mp4" type="video/mp4">
</video>
他にも色々Widgetがあるので、こちらから是非面白そうなのを探してみて下さい。
参考URL
Discussion