概要
openGym は、セルフホスト型のフィットネス・体重トラッキングアプリで、データはすべて自分のサーバーに保存されます。1300以上のエクササイズを収録したトレーニングプラン、休憩タイマーとPR検出機能付きのガイド付きトレーニング、筋肉回復ヒートマップを提供し、FitNotes、Strong、Hevy からのデータインポートに対応しています。PWAとしてインストール可能で、パスキーログイン、オフライン利用、複数デバイス間の同期をサポートしています。
README プレビュー
\n\n\n\n**A self-hosted gym and body-weight tracker you actually own.**\n\nPlan your week, run guided workouts, log every set and your body weight —\non your phone, synced across your devices, behind your own passkey login.\n\n[](https://discord.gg/e62jY6fwVb)\n[](https://discord.gg/e62jY6fwVb)\n[](https://github.com/DuarteSantos8/openGym/stargazers)\n\n[](https://github.com/DuarteSantos8/openGym/releases)\n[](https://github.com/DuarteSantos8/openGym/actions/workflows/test.yml)\n[](https://gitlab.com/DuarteSantos8/opengym/-/pipelines)\n[](https://gitlab.com/DuarteSantos8/opengym/-/pipelines?ref=main)\n[](LICENSE)\n\n[Website](https://opengym.duarte-santos.ch) ·\n[Live demo](https://opengym.duarte-santos.ch/demo/) ·\n[Android APK](https://github.com/DuarteSantos8/openGym/releases/latest) ·\n[Self-hosting guide](docs/SELF_HOSTING.md) ·\n[Roadmap](ROADMAP.md) ·\n[Changelog](CHANGELOG.md)\n\n\n\n\n\nHome · today's workout and weight\nGuided workout · demos and sets\nStats · heatmap, charts and PRs\n\n\n\n## Why openGym\n\nMost workout apps keep your data on their servers, push you towards a subscription, or vanish\nwhen the company does. openGym runs on your own box, keeps your data in a folder you control, and\nis yours to fork. It still behaves like a modern app: installable on the home screen, passkey\nsign-in, works offline, syncs between your phone and your laptop.\n\nNo account on someone else's server, no subscription, no ads, no telemetry. One\n`docker compose up` and it's running.\n\nThe [in-browser demo](https://opengym.duarte-santos.ch/demo/) is the real app with example data,\nif you want to try it before installing anything.\n\n## Features\n\n**Planning**\n\n- A routine per weekday over a library of **1,324 exercises** with animated demos, searchable and\n browsable by muscle on a body map. Filter by the equipment you own.\n- Four starter plans (Push/Pull/Legs, Upper/Lower, Full Body, 5×5) that load as ordinary,\n editable routines.\n- Move a session to a
FAQ (4)
トラブル対応openGym AndroidアプリがプライベートCA証明書を使用するセルフホストサーバーに接続できないのはなぜですか?
根本原因: Android API 24 以降、networkSecurityConfig を設定していないアプリはシステム CA のみを信頼し、ユーザーがインストールした CA は無視されます。WebView はこのポリシーを継承するため、プライベート CA のサーバーへの TLS ハンドシェイクがサイレントに失敗し、リクエスト(例: POST /api/pair/redeem)はサーバーに一切届きません。Chrome が動作するのは、ユーザー CA を信頼しているためです。修正方法(APK の再ビルドが必要): frontend/android/app/src/main/res/xml/network_security_config.xml を作成して <network-security-config><base-config cleartextTrafficPermitted="false"><trust-anchors><certificates src="system" /><certificates src="user" /></trust-anchors></base-config></network-security-config> と記述し、続いて AndroidManifest.xml の <application> タグに android:networkSecurityConfig="@xml/network_security_config" を追加します。再ビルドなしの回避策: ネイティブアプリの代わりに、スマートフォンの Chrome から PWA をインストールしてください。Chrome はユーザー CA を信頼するため、パスキーによるサインインと同期が機能します。注意: LAN IP 経由の平文 HTTP も失敗します。WebView のオリジンが https://localhost であり、allowMixedContent が false になっているためです。
トラブル対応AI Coach が /v1 プレフィックスのない OpenAI 互換エンドポイント(例: Open WebUI の /openai マウント)に接続すると 404 を返すのはなぜですか?
openGym v1.4.0 では、Coach は常にベース URL に /v1 を付与するため、{base}/v1/chat/completions を呼び出します。これは、バージョンセグメントのないパスにマウントされたサーバー(llama.cpp/llama-swap の前段に置かれた Open WebUI の /openai プロキシ、リバースプロキシ経由の Ollama など)では 404 になります。修正方法: openGym v1.4.1 にアップグレードしてください。v1.4.1 では、{base}/v1 が 404 を返した場合、Coach は自動的に {base} に直接リトライし、動作する形式を記憶するため、プロバイダーのドキュメントに記載されている通りのエンドポイント(例: http://127.0.0.1:8099/openai)をそのまま貼り付ければ、List models と Test the Coach の両方が動作します。
トラブル対応StrongまたはHevyからインポートすると、同じ日の2つのワークアウトが1つに統合されてしまうのはなぜですか?
これは openGym v1.4.0 のバグです:CSV インポートと Hevy API インポートはカレンダー上の日付のみでワークアウトをグループ化するため(frontend/src/lib/import-csv.js の byDate と frontend/src/lib/import-hevy.js の parseHevyWorkouts を参照)、午前と午後のセッションが1つのワークアウトに結合されてしまいます。修正方法:openGym v1.4.1 以降にアップグレードしてください。v1.4.1 以降、Strong、Hevy CSV、Hevy API からのインポートは日付に加えてワークアウトの開始時刻でもグループ化されるため、同じ日の2つのセッションは2つの別々のワークアウトとして保持されます。FitNotes のインポートは影響を受けません。FitNotes のエクスポートには日付のみが含まれ(開始時刻は含まれない)ため、引き続き日単位でグループ化されます。
トラブル対応openGymでワークアウト中にエクササイズを追加する際に、「Type」(エクササイズタイプ)の行が表示されないのはなぜですか?
これは openGym v1.4.1 で修正された UI のバグです。以前のバージョンでは、ワークアウト中の「Add exercise」ビューには「Muscle」と「Equipment」の行のみが表示され、Exercise browser に表示されている「Type」の行が省略されていました。openGym を v1.4.1 以降にアップデートすると、エクササイズを追加する際に Type の行が正しく表示されます。