@sayue_ltr/fleq 1.49.6 → 1.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +150 -361
  3. package/assets/icons/default.png +0 -0
  4. package/assets/icons/earthquake-cancel.png +0 -0
  5. package/assets/icons/earthquake-critical.png +0 -0
  6. package/assets/icons/earthquake-info.png +0 -0
  7. package/assets/icons/earthquake-normal.png +0 -0
  8. package/assets/icons/earthquake-warning.png +0 -0
  9. package/assets/icons/earthquake.png +0 -0
  10. package/assets/icons/eew-cancel.png +0 -0
  11. package/assets/icons/eew-critical.png +0 -0
  12. package/assets/icons/eew-info.png +0 -0
  13. package/assets/icons/eew-normal.png +0 -0
  14. package/assets/icons/eew-warning.png +0 -0
  15. package/assets/icons/eew.png +0 -0
  16. package/assets/icons/lg-observation-cancel.png +0 -0
  17. package/assets/icons/lg-observation-critical.png +0 -0
  18. package/assets/icons/lg-observation-info.png +0 -0
  19. package/assets/icons/lg-observation-normal.png +0 -0
  20. package/assets/icons/lg-observation-warning.png +0 -0
  21. package/assets/icons/lg-observation.png +0 -0
  22. package/assets/icons/nankai-trough-cancel.png +0 -0
  23. package/assets/icons/nankai-trough-critical.png +0 -0
  24. package/assets/icons/nankai-trough-info.png +0 -0
  25. package/assets/icons/nankai-trough-normal.png +0 -0
  26. package/assets/icons/nankai-trough-warning.png +0 -0
  27. package/assets/icons/nankai-trough.png +0 -0
  28. package/assets/icons/seismic-text-cancel.png +0 -0
  29. package/assets/icons/seismic-text-critical.png +0 -0
  30. package/assets/icons/seismic-text-info.png +0 -0
  31. package/assets/icons/seismic-text-normal.png +0 -0
  32. package/assets/icons/seismic-text-warning.png +0 -0
  33. package/assets/icons/seismic-text.png +0 -0
  34. package/assets/icons/tsunami-cancel.png +0 -0
  35. package/assets/icons/tsunami-critical.png +0 -0
  36. package/assets/icons/tsunami-info.png +0 -0
  37. package/assets/icons/tsunami-normal.png +0 -0
  38. package/assets/icons/tsunami-warning.png +0 -0
  39. package/assets/icons/tsunami.png +0 -0
  40. package/assets/icons/volcano-cancel.png +0 -0
  41. package/assets/icons/volcano-critical.png +0 -0
  42. package/assets/icons/volcano-info.png +0 -0
  43. package/assets/icons/volcano-normal.png +0 -0
  44. package/assets/icons/volcano-warning.png +0 -0
  45. package/assets/icons/volcano.png +0 -0
  46. package/dist/engine/notification/notifier.js +51 -19
  47. package/dist/ui/repl.js +21 -8
  48. package/dist/ui/waiting-tips.js +64 -31
  49. package/package.json +1 -1
package/README.md CHANGED
@@ -1,250 +1,148 @@
1
1
  # FlEq
2
2
 
3
- Project DM-D.S.S (dmdata.jp) のAPIを利用して、地震・津波・緊急地震速報・火山情報をリアルタイムにCLIで受信・表示するツールです。
3
+ [dmdata.jp](https://dmdata.jp/) の API を利用して、地震・津波・緊急地震速報(EEW)・火山情報をリアルタイムに CLI で受信・表示するツールです。
4
4
 
5
- > **前提条件:** 本ツールの利用には [dmdata.jp](https://dmdata.jp/) のアカウント登録および API キーの取得が必要です。受信する情報の種類によっては有料の契約プランへの加入が必要になります。詳しくは dmdata.jp の料金・契約ページをご確認ください。
5
+ npm パッケージ名: `@sayue_ltr/fleq` / CLI コマンド名: `fleq`
6
6
 
7
- ## クイックスタート
8
-
9
- FlEq を最短で使い始めるには、以下の手順を実行してください。
10
-
11
- ### 方法1: `fleq init` を使う(初回推奨)
7
+ ## 主な機能
12
8
 
13
- 対話形式で API キーや受信設定をまとめて行えます。
9
+ - WebSocket によるリアルタイム受信(自動再接続・複線接続対応)
10
+ - 地震・津波・EEW・火山情報を震度やレベルに応じた色分けで表示
11
+ - 緊急地震速報の同時追跡・ログ記録・差分表記
12
+ - デスクトップ通知・通知音(カテゴリ別 ON/OFF)
13
+ - REPL による実行中の設定変更・状態確認
14
+ - CUD 配色準拠のテーマシステム(カスタマイズ可能)
15
+ - Raspberry Pi 等の低メモリ環境でも動作
14
16
 
15
- ```bash
16
- npm install -g fleq
17
- fleq init
18
- fleq
19
- ```
17
+ ## 出力例
20
18
 
21
- ### 方法2: 手動で設定する
19
+ <!-- TODO: スクリーンショットまたは compact モードの出力例を追加 -->
22
20
 
23
- 対話なしで設定したい場合は、API キーを保存してから起動します。
21
+ 表示フォーマットの詳細は [表示リファレンス](docs/display-reference.md) を参照してください。
24
22
 
25
- ```bash
26
- npm install -g fleq
27
- fleq config set apiKey your_api_key_here
28
- fleq
29
- ```
23
+ ## はじめる前に
30
24
 
31
- 環境変数を使う場合は、以下でも起動できます。
25
+ FlEq を使うには、以下の準備が必要です。
32
26
 
33
- ```bash
34
- export DMDATA_API_KEY=your_api_key_here
35
- fleq
36
- ```
27
+ 1. **Node.js 18 以上**をインストールする
28
+ 2. [dmdata.jp](https://dmdata.jp/) でアカウントを作成する
29
+ 3. dmdata.jp の管理画面で **API キーを発行**する
30
+ 4. API キーに **`socket.start` 権限**と、受信したい区分に対応する **`telegram.get.*` 権限**を付与する
37
31
 
38
- PowerShell:
32
+ 受信する情報の種類によっては、dmdata.jp の有料契約が必要です。
33
+ 詳しくは [dmdata.jp](https://dmdata.jp/) の料金・契約ページを確認してください。
39
34
 
40
- ```powershell
41
- $env:DMDATA_API_KEY = "your_api_key_here"
42
- fleq
43
- ```
35
+ ### 対応 OS
44
36
 
45
- 初回は `telegram.earthquake,eew.forecast,eew.warning,telegram.volcano` を受信対象として起動します。
46
- 契約内容によっては一部の区分を受信できない場合があります。
37
+ | OS | 備考 |
38
+ |----|------|
39
+ | macOS 10.13+ | メイン開発・テスト環境 |
40
+ | Linux (x64 / ARM) | Raspberry Pi 等の ARM デバイスでも動作 |
41
+ | Windows 10+ | ConPTY 対応のターミナルを推奨 |
47
42
 
48
- ## 対応情報
43
+ ## 受信区分と内容
49
44
 
50
45
  | 区分 | 分類名 | 内容 |
51
46
  |------|--------|------|
52
47
  | 地震・津波関連 | `telegram.earthquake` | 震度速報、震源情報、震源・震度情報、津波警報等 |
53
- | 緊急地震速報(予報) | `eew.forecast` | EEW予報(要契約) |
54
- | 緊急地震速報(警報) | `eew.warning` | EEW警報(要契約) |
48
+ | 緊急地震速報(予報) | `eew.forecast` | EEW 予報(要契約) |
49
+ | 緊急地震速報(警報) | `eew.warning` | EEW 警報(要契約) |
55
50
  | 火山関連 | `telegram.volcano` | 噴火警報、噴火速報、降灰予報、火山の状況に関する解説情報等 |
56
51
 
57
- ## 必要条件
58
-
59
- FlEq を利用するには、以下が必要です。
60
-
61
- - Node.js 18 以上
62
- - dmdata.jp のアカウント
63
- - dmdata.jp で発行した API キー
64
- - API キーに `socket.start` と、利用する区分に対応した `telegram.get.*` 権限
65
-
66
- 受信する情報の種類によって、必要な契約区分や権限が異なります。
67
- たとえば、緊急地震速報(`eew.forecast` / `eew.warning`)の受信には、対応する契約が必要です。
68
-
69
- API キーをまだ取得していない場合は、先に dmdata.jp でアカウント作成と API キー発行を行ってください。
70
- 対応 OS については下記の「対応OS」を参照してください。
71
-
72
- ## 対応OS
73
-
74
- | OS | 対応状況 | 備考 |
75
- |----|---------|------|
76
- | macOS 10.13+ | 対応 | メイン開発・テスト環境 |
77
- | Linux (x64 / ARM) | 対応 | Raspberry Pi 等の ARM デバイスでも動作 |
78
- | Windows 10+ | 対応 | ConPTY 対応のターミナルを推奨 |
79
-
80
52
  ## インストール
81
53
 
82
- ### npm からインストール
83
-
84
54
  ```bash
85
- npm install -g fleq
55
+ npm install -g @sayue_ltr/fleq
86
56
  ```
87
57
 
88
- または単発実行もできます。
58
+ 単発実行もできます。
89
59
 
90
60
  ```bash
91
- npx fleq --help
61
+ npx @sayue_ltr/fleq --help
92
62
  ```
93
63
 
94
- ### ソースから実行
64
+ ## セットアップ
65
+
66
+ ### 方法 1: `fleq init` を使う(初回推奨)
67
+
68
+ 対話形式で API キーや受信設定をまとめて行えます。
95
69
 
96
70
  ```bash
97
- git clone https://github.com/Lateo2580/FlEq.git
98
- cd FlEq
99
- npm install
100
- npm run build
71
+ fleq init
72
+ fleq
101
73
  ```
102
74
 
103
- ## APIキーの設定
75
+ ### 方法 2: 手動で設定する
104
76
 
105
- 以下のいずれかの方法で設定してください。
77
+ ```bash
78
+ fleq config set apiKey your_api_key_here # ← 自分のAPIキーに置き換え
79
+ fleq
80
+ ```
106
81
 
107
- **方法1: 環境変数**
82
+ 環境変数でも設定できます。
108
83
 
109
84
  bash / zsh:
110
85
  ```bash
111
- export DMDATA_API_KEY=your_api_key_here
86
+ export DMDATA_API_KEY=your_api_key_here # ← 自分のAPIキーに置き換え
112
87
  ```
113
88
 
114
89
  PowerShell:
115
90
  ```powershell
116
- $env:DMDATA_API_KEY = "your_api_key_here"
91
+ $env:DMDATA_API_KEY = "your_api_key_here" # ← 自分のAPIキーに置き換え
117
92
  ```
118
93
 
119
94
  CMD:
120
95
  ```cmd
121
- set DMDATA_API_KEY=your_api_key_here
122
- ```
123
-
124
- **方法2: Configに保存(推奨)**
125
-
126
- グローバルインストール時はこちらが最も簡単です。
127
- ```bash
128
- fleq config set apiKey your_api_key_here
129
- ```
130
-
131
- 保存先は `fleq config path` で確認できます(OSごとに異なります。詳細は「Config管理」を参照)。
132
-
133
- **方法3: .envファイル**
134
-
135
- カレントディレクトリの `.env` ファイルから読み込みます(ソースからの実行時に便利です)。
136
- ```
137
- DMDATA_API_KEY=your-key-here
96
+ set DMDATA_API_KEY=your_api_key_here &REM ← 自分のAPIキーに置き換え
138
97
  ```
139
98
 
140
- ## 基本的な使い方
141
-
142
- 初めて使う場合は、次の順で進めると分かりやすいです。
143
-
144
- ### 1. 初期設定を行う
145
-
146
- まずは API キーを設定します。初回は対話形式の `init` が簡単です。
147
-
148
- ```bash
149
- fleq init
99
+ カレントディレクトリの `.env` ファイルからも読み込めます(ソースからの実行時に便利です)。
150
100
  ```
151
-
152
- 対話なしで設定する場合は、次のように API キーを保存できます。
153
-
154
- ```bash
155
- fleq config set apiKey your_api_key_here
101
+ DMDATA_API_KEY=your-key-here # ← 自分のAPIキーに置き換え
156
102
  ```
157
103
 
158
- ### 2. そのまま起動する
159
-
160
- デフォルト設定で起動すると、以下の区分を受信します。
161
-
162
- - `telegram.earthquake`
163
- - `eew.forecast`
164
- - `eew.warning`
165
- - `telegram.volcano`
104
+ ## よく使う起動例
166
105
 
167
106
  ```bash
107
+ # デフォルト設定で起動(全4区分を受信)
168
108
  fleq
169
- ```
170
109
 
171
- 契約内容によっては、一部の区分を受信できない場合があります。
110
+ # 地震・火山情報だけ受信(EEW契約なしの場合に便利)
111
+ fleq -c telegram.earthquake,telegram.volcano
172
112
 
173
- ### 3. 必要に応じて受信区分を指定する
174
-
175
- 受信したい区分だけを指定して起動できます。
176
-
177
- ```bash
178
- fleq -c telegram.earthquake,eew.warning
179
- ```
180
-
181
- ### 4. 表示や動作を調整する
182
-
183
- 表示モードを切り替えたい場合:
184
-
185
- ```bash
113
+ # コンパクト表示で起動
186
114
  fleq --mode compact
187
- ```
188
115
 
189
- テスト電文も受信したい場合:
190
-
191
- ```bash
116
+ # テスト電文も含めて受信
192
117
  fleq --test including
193
- ```
194
-
195
- デバッグログを表示したい場合:
196
118
 
197
- ```bash
119
+ # デバッグログを表示
198
120
  fleq --debug
199
- ```
200
-
201
- 同一 API キーの既存 open socket を閉じてから接続したい場合:
202
121
 
203
- ```bash
122
+ # 同一APIキーの既存ソケットを閉じてから接続
204
123
  fleq --close-others
205
124
  ```
206
125
 
207
- ### 5. 実行中は REPL コマンドを使える
208
-
209
- 起動中は `fleq>` プロンプトで各種コマンドを利用できます。
210
-
211
- - `help`: コマンド一覧を表示
212
- - `status`: 接続状態を確認
213
- - `config`: 現在の設定を確認
214
- - `quit`: 終了
215
-
216
- 詳しくは下記の「REPLコマンド」を参照してください。
217
-
218
- ## テスト
219
-
220
- ```bash
221
- # テストを実行します
222
- npm test
223
-
224
- # ウォッチモードで実行します
225
- npm run test:watch
226
- ```
227
-
228
- - テストフレームワーク: Vitest
229
- - テストファイル: 22件
230
- - フィクスチャ: `test/fixtures/` に実電文XML 81件
231
- - モックヘルパー: `test/helpers/mock-message.ts`
126
+ デフォルトの受信区分は `telegram.earthquake,eew.forecast,eew.warning,telegram.volcano` です。
127
+ 契約内容によっては一部の区分を受信できない場合があります。
232
128
 
233
- ## CLIオプション
129
+ ## CLI オプション
234
130
 
235
131
  | オプション | 説明 | デフォルト |
236
132
  |-----------|------|-----------|
237
- | `-k, --api-key <key>` | dmdata.jp APIキー | 環境変数 `DMDATA_API_KEY` |
133
+ | `-k, --api-key <key>` | dmdata.jp API キー | 環境変数 `DMDATA_API_KEY` |
238
134
  | `-c, --classifications <items>` | 受信区分(カンマ区切り) | `telegram.earthquake,eew.forecast,eew.warning,telegram.volcano` |
239
135
  | `--test <mode>` | テスト電文: `no` / `including` / `only` | `no` |
240
- | `--keep-existing` | 既存接続を維持します(互換オプション。現在はデフォルトです) | `true` |
241
- | `--close-others` | 同一APIキーの既存 open socket を閉じてから接続します | `false` |
136
+ | `--keep-existing` | 既存接続を維持(互換オプション。現在はデフォルト動作) | `true` |
137
+ | `--close-others` | 同一 API キーの既存ソケットを閉じてから接続 | `false` |
242
138
  | `--mode <mode>` | 表示モード: `normal` / `compact` | `normal` |
243
139
  | `--debug` | デバッグログ表示 | `false` |
244
140
 
245
- ## Config管理
141
+ ## 設定
142
+
143
+ ### Config ファイル
246
144
 
247
- 永続設定はOS別のディレクトリに保存されます。`config` サブコマンドで管理できます。
145
+ 永続設定は OS 別のディレクトリに保存されます。
248
146
 
249
147
  | OS | デフォルトパス |
250
148
  |----|---------------|
@@ -252,65 +150,58 @@ npm run test:watch
252
150
  | Linux | `~/.config/fleq/config.json` |
253
151
  | Windows | `%APPDATA%\fleq\config.json` |
254
152
 
255
- 環境変数 `XDG_CONFIG_HOME` が設定されている場合は、全OSで `$XDG_CONFIG_HOME/fleq/config.json` が優先されます。
153
+ 環境変数 `XDG_CONFIG_HOME` が設定されている場合は、全 OS で `$XDG_CONFIG_HOME/fleq/config.json` が優先されます。
256
154
  旧バージョンで `~/.config/fleq/` や `~/.config/dmdata-monitor/` に保存された設定は、初回起動時に自動的に移行されます。
257
155
 
258
156
  ```bash
259
- # 現在の設定を表示します
260
- fleq config show
261
-
262
- # 設定値を保存します
263
- fleq config set <key> <value>
264
-
265
- # 設定値を削除します
266
- fleq config unset <key>
267
-
268
- # Configファイルの保存先を表示します
269
- fleq config path
270
-
271
- # 設定可能キー一覧を表示します
272
- fleq config keys
157
+ fleq config show # 現在の設定を表示
158
+ fleq config set <key> <value> # 設定値を保存
159
+ fleq config unset <key> # 設定値を削除
160
+ fleq config path # Config ファイルの保存先を表示
161
+ fleq config keys # 設定可能キー一覧を表示
273
162
  ```
274
163
 
275
- 設定可能なキー:
164
+ ### `config set` で操作できるキー
276
165
 
277
166
  | キー | 説明 |
278
167
  |------|------|
279
- | `apiKey` | dmdata.jp APIキー |
280
- | `classifications` | 受信区分 (カンマ区切り: `telegram.earthquake,eew.forecast,eew.warning,telegram.volcano`) |
168
+ | `apiKey` | dmdata.jp API キー |
169
+ | `classifications` | 受信区分(カンマ区切り) |
281
170
  | `testMode` | テスト電文モード: `"no"` / `"including"` / `"only"` |
282
- | `appName` | アプリケーション名 |
171
+ | `appName` | アプリケーション名(複数デバイス運用時に変更。後述) |
283
172
  | `maxReconnectDelaySec` | 再接続の最大待機秒数 |
284
- | `keepExistingConnections` | 同一APIキーの既存 open socket を維持するかどうか (`true` / `false`) |
173
+ | `keepExistingConnections` | 既存ソケットを維持するかどうか (`true` / `false`) |
285
174
  | `tableWidth` | テーブル表示幅 (40〜200、デフォルト: 60) |
286
175
  | `infoFullText` | お知らせ電文の全文表示 (`true` / `false`) |
287
176
  | `displayMode` | 表示モード: `"normal"` / `"compact"` |
288
- | `waitTipIntervalMin` | 待機中ヒント表示間隔(分, 0で無効、デフォルト: 30) |
289
177
  | `promptClock` | プロンプト時計: `"elapsed"` (経過時間) / `"clock"` (現在時刻) |
178
+ | `waitTipIntervalMin` | 待機中ヒント表示間隔(分、0 で無効、デフォルト: 30) |
290
179
  | `sound` | 通知音の有効/無効 (`true` / `false`) |
291
- | `eewLog` | EEWログ記録の有効/無効 (`true` / `false`) |
292
- | `eewLogFields` | EEWログ記録項目の設定(オブジェクト形式) |
180
+ | `eewLog` | EEW ログ記録の有効/無効 (`true` / `false`) |
293
181
  | `maxObservations` | 観測点の最大表示件数 (1〜999 / `"off"` で全件表示) |
294
- | `backup` | EEW副回線の有効/無効 (`true` / `false`) |
182
+ | `backup` | EEW 副回線の有効/無効 (`true` / `false`) |
183
+ | `truncation` | 省略表示の上限設定(`truncation.<key> <N>` で個別設定。`fleq config keys` で詳細を確認) |
295
184
 
296
- 設定の優先順位(高い順):
185
+ > **補足:** `eewLogFields`(EEW ログの記録項目)と通知カテゴリ設定は、REPL の `eewlog fields` / `notify` コマンドで管理します。
186
+
187
+ ### 設定の優先順位(高い順)
297
188
 
298
189
  1. CLI オプション (`--api-key`, `--classifications`, `--test`, `--keep-existing`, `--close-others`)
299
- 2. 環境変数 `DMDATA_API_KEY`(APIキーのみ)
300
- 3. `.env` ファイル(APIキーのみ)
301
- 4. Configファイル(`fleq config path` で確認可能)
302
- 5. デフォルト値 (`DEFAULT_CONFIG`)
190
+ 2. 環境変数 `DMDATA_API_KEY`(API キーのみ)
191
+ 3. `.env` ファイル(API キーのみ)
192
+ 4. Config ファイル(`fleq config path` で確認可能)
193
+ 5. デフォルト値
303
194
 
304
- 補足:
195
+ ### 補足
305
196
 
306
- - Config保存時と既存Config読み込み時は、可能な範囲で `0600` パーミッションへ調整します(APIキー保護のためです)。Windows では POSIX パーミッションが実効的でないため、ファイルシステムの ACL に依存します。
307
- - **更新チェック:** FlEq は起動時に npm registry (`registry.npmjs.org`) へ HTTP リクエストを送信し、新しいバージョンの有無を確認します。npm registry に接続できない場合は GitHub Releases API (`api.github.com`) にフォールバックします。チェック結果は 24 時間キャッシュされ、キャッシュが有効な間は外部通信を行いません。この機能を無効にしたい場合は、環境変数 `FLEQ_NO_UPDATE_CHECK=1` を設定してください。
197
+ - Config 保存時と読み込み時は、可能な範囲で `0600` パーミッションへ調整します(API キー保護のため)。Windows では POSIX パーミッションが実効的でないため、ファイルシステムの ACL に依存します。
198
+ - **更新チェック:** 起動時に npm registry へ HTTP リクエストを送信し、新しいバージョンの有無を確認します。接続できない場合は GitHub Releases API にフォールバックします。チェック結果は 24 時間キャッシュされます。無効にするには環境変数 `FLEQ_NO_UPDATE_CHECK=1` を設定してください。
308
199
  - DMDATA 公式仕様に合わせ、REST API の認証は `Authorization: Basic ...` を使用します。
309
- - DMDATA 公式では、同時接続数に余裕がない場合のみ `Socket Close v2` の利用が案内されています。通常運用では `--close-others` は不要です。
200
+ - 通常運用では `--close-others` は不要です(DMDATA 公式は、同時接続数に余裕がない場合のみ Socket Close v2 の利用を案内しています)。
310
201
 
311
- ## 複数デバイスでの同時運用
202
+ ## 複数デバイスで使う場合
312
203
 
313
- 同一アカウントの複数APIキーを使って、複数のデバイスで FlEq を同時に起動する場合は、**デバイスごとに異なる `appName` を設定**してください。
204
+ 同一アカウントの複数 API キーを使って複数デバイスで FlEq を同時に起動する場合は、**デバイスごとに異なる `appName` を設定**してください。
314
205
 
315
206
  ```bash
316
207
  # デバイスA(例: Mac)
@@ -320,19 +211,19 @@ fleq config set appName fleq-mac
320
211
  fleq config set appName fleq-raspi
321
212
  ```
322
213
 
323
- FlEq は起動時に前回セッションの残留ソケットをクリーンアップしますが、`appName` が同じだと他デバイスのソケットまで閉じてしまいます。デバイスごとに異なる `appName` を設定することで、自分のソケットのみがクリーンアップ対象となり、他デバイスの接続に影響しません。
214
+ FlEq は起動時に前回セッションの残留ソケットをクリーンアップしますが、`appName` が同じだと他デバイスのソケットまで閉じてしまいます。デバイスごとに異なる `appName` を設定することで、自分のソケットのみがクリーンアップ対象になります。
324
215
 
325
- ## REPLコマンド
216
+ Raspberry Pi での常時稼働については [Raspberry Pi 500 セットアップガイド](docs/raspi500-setup-guide.md) も参照してください。
326
217
 
327
- 実行中に `fleq> ` プロンプトで以下のコマンドを利用できます。
218
+ ## REPL コマンド
328
219
 
329
- `help` コマンドでカテゴリ別のコマンド一覧を表示できます。
220
+ 実行中に `fleq> ` プロンプトで以下のコマンドを利用できます。`help` コマンドでカテゴリ別の一覧を表示できます。
330
221
 
331
222
  ### 情報
332
223
  | コマンド | 説明 |
333
224
  |----------|------|
334
225
  | `help` / `?` | コマンド一覧を表示 |
335
- | `history [N]` | 地震履歴を取得・表示(デフォルト10件、最新が一番下) |
226
+ | `history [N]` | 地震履歴を取得・表示(デフォルト 10 件、最新が一番下) |
336
227
  | `colors` | カラーパレット・震度色の一覧を表示 |
337
228
  | `detail [tsunami\|volcano]` | 直近の津波情報または火山警報状態を再表示 |
338
229
 
@@ -347,172 +238,38 @@ FlEq は起動時に前回セッションの残留ソケットをクリーンア
347
238
  ### 設定
348
239
  | コマンド | 説明 |
349
240
  |----------|------|
350
- | `notify` | 通知カテゴリのON/OFF状態を表示 |
241
+ | `notify` | 通知カテゴリの ON/OFF 状態を表示 |
351
242
  | `notify <category> [on\|off]` | 指定カテゴリの通知をトグル/ON/OFF |
352
- | `notify all:on` / `all:off` | 全カテゴリの通知を一括ON/OFF |
353
- | `eewlog` | EEWログ記録の設定を表示 |
354
- | `eewlog on` / `off` | EEWログ記録の有効/無効を切替 |
355
- | `eewlog fields` | EEWログ記録項目の一覧表示 |
243
+ | `notify all:on` / `all:off` | 全カテゴリの通知を一括 ON/OFF |
244
+ | `eewlog` | EEW ログ記録の設定を表示 |
245
+ | `eewlog on` / `off` | EEW ログ記録の有効/無効を切替 |
246
+ | `eewlog fields` | EEW ログ記録項目の一覧表示 |
356
247
  | `eewlog fields <field> [on\|off]` | 記録項目のトグル/ON/OFF |
357
- | `tablewidth [N\|auto]` | テーブル幅の表示・変更(例: `tablewidth 80`、`tablewidth auto` で自動追従) |
248
+ | `tablewidth [N\|auto]` | テーブル幅の表示・変更(`auto` でターミナル幅に自動追従) |
358
249
  | `infotext [full/short]` | お知らせ電文の全文/省略切替 |
359
- | `tipinterval [N]` | 待機中ヒント表示間隔(分)を表示・変更(0で無効) |
250
+ | `tipinterval [N]` | 待機中ヒント表示間隔(分)を表示・変更(0 で無効) |
360
251
  | `mode [normal/compact]` | 表示モード切替 |
361
- | `clock [elapsed/now]` | プロンプト時計の切替 |
362
- | `sound [on/off]` | 通知音のON/OFF切替 |
252
+ | `clock [elapsed/now]` | プロンプト時計の切替(`now` は Config 上の `"clock"` に対応) |
253
+ | `sound [on/off]` | 通知音の ON/OFF 切替 |
363
254
  | `theme` | カラーテーマの表示・管理(`theme path` / `theme show` / `theme reset` / `theme reload` / `theme validate`) |
364
255
  | `mute [duration]` | 通知を一時ミュート(例: `mute 30m`、`mute off` で解除) |
365
256
  | `fold [N\|off]` | 観測点の表示件数制限(例: `fold 10`、`fold off` で全件表示) |
257
+ | `limit` | 省略表示の上限設定を一覧表示 |
258
+ | `limit <key> <N>` | 上限値を変更(1〜999) |
259
+ | `limit <key> default` | デフォルト値に戻す |
260
+ | `limit reset` | 全項目をデフォルトに戻す |
366
261
 
367
262
  ### 操作
368
263
  | コマンド | 説明 |
369
264
  |----------|------|
370
265
  | `test sound [level]` | サウンドテスト(レベル: critical, warning, normal, info, cancel) |
371
266
  | `test table [type] [番号]` | 表示形式テスト |
372
- | `backup [on/off]` | EEW副回線の状態表示・起動/停止 |
267
+ | `backup [on/off]` | EEW 副回線の状態表示・起動/停止 |
373
268
  | `clear` | ターミナル画面をクリア |
374
269
  | `retry` | WebSocket 再接続を手動試行 |
375
270
  | `quit` / `exit` | アプリケーションを終了 |
376
271
 
377
- ## CLIバイナリとnpm scripts
378
-
379
- - CLIバイナリ名: `fleq` (`package.json` の `bin` 設定)
380
- - `npm run dev`: build + run
381
- - `npm run dev:lowmem`: build + メモリ最適化モードで run(`--optimize-for-size`)
382
- - `npm run start:lowmem`: メモリ最適化モードで run(Raspberry Pi 等の低メモリ環境向け)
383
- - `npm run clean`: `dist/` を削除
384
- - `npm run release`: バージョン更新(Conventional Commitsに基づく)
385
- - `npm run release:minor`: minor リリース
386
- - `npm run release:major`: major リリース
387
-
388
- ## アーキテクチャ
389
-
390
- ```
391
- src/
392
- ├── index.ts # エントリポイント (薄いブートストラップのみ)
393
- ├── types.ts # 共有型定義
394
- ├── config.ts # Configファイル管理 (読み書き・バリデーション)
395
- ├── logger.ts # ログレベル付きロガー
396
- ├── utils/
397
- │ ├── intensity.ts # 震度ランク変換 (intensityToRank)
398
- │ └── secrets.ts # APIキーマスク (maskApiKey)
399
- ├── engine/
400
- │ ├── cli/
401
- │ │ ├── cli.ts # Commander CLI定義
402
- │ │ ├── cli-init.ts # インタラクティブ初期設定 (fleq init)
403
- │ │ └── cli-run.ts # CLIアクションハンドラ (起動バナー・契約チェック)
404
- │ ├── startup/
405
- │ │ ├── config-resolver.ts # 設定解決 (CLI引数→環境変数→Config→デフォルト)
406
- │ │ ├── tsunami-initializer.ts # 起動時の津波警報状態復元 (REST API)
407
- │ │ ├── volcano-initializer.ts # 起動時の火山警報状態復元 (REST API)
408
- │ │ └── update-checker.ts # npm 最新バージョンチェック
409
- │ ├── monitor/
410
- │ │ ├── monitor.ts # メインオーケストレーション (接続・受信委譲)
411
- │ │ ├── shutdown.ts # グレースフルシャットダウン処理
412
- │ │ └── repl-coordinator.ts # REPL表示・接続状態の協調制御
413
- │ ├── messages/
414
- │ │ ├── message-router.ts # 受信メッセージの分類・振り分け (全27種類)
415
- │ │ ├── tsunami-state.ts # 津波警報状態管理 (プロンプト表示・detail コマンド)
416
- │ │ └── volcano-state.ts # 火山警報状態管理 (複数火山同時追跡・プロンプト・detail)
417
- │ ├── eew/
418
- │ │ ├── eew-tracker.ts # EEW イベント追跡 (重複検出・状態管理・最終報処理)
419
- │ │ └── eew-logger.ts # EEW ログファイル記録 (イベント別ファイル出力)
420
- │ └── notification/
421
- │ ├── notifier.ts # デスクトップ通知 (カテゴリ別ON/OFF)
422
- │ ├── volcano-presentation.ts # 火山電文の表示/通知レベル判定
423
- │ ├── node-notifier-loader.ts # node-notifier 遅延ロード (optional dependency)
424
- │ └── sound-player.ts # クロスプラットフォーム通知音再生
425
- ├── dmdata/
426
- │ ├── rest-client.ts # dmdata.jp REST API クライアント
427
- │ ├── ws-client.ts # WebSocket 接続管理 (再接続・ping-pong)
428
- │ ├── connection-manager.ts # 接続管理インターフェース (ConnectionManager)
429
- │ ├── multi-connection-manager.ts # 複線接続管理 (primary + backup)
430
- │ ├── endpoint-selector.ts # エンドポイント選択・リージョン間フェイルオーバー
431
- │ ├── telegram-parser.ts # XML電文パーサ (gzip+base64デコード)
432
- │ └── volcano-parser.ts # 火山電文パーサ (10種類の火山電文に対応)
433
- └── ui/
434
- ├── formatter.ts # 共通ターミナル表示ユーティリティ (フレーム描画・テキスト処理)
435
- ├── eew-formatter.ts # EEW 表示フォーマッタ
436
- ├── earthquake-formatter.ts # 地震・津波・テキスト・南海トラフ・長周期 表示フォーマッタ
437
- ├── volcano-formatter.ts # 火山 表示フォーマッタ
438
- ├── theme.ts # テーマシステム (カラーパレット・ロール定義)
439
- ├── repl.ts # REPL インタラクション
440
- ├── test-samples.ts # 表示テスト用サンプルデータ
441
- └── waiting-tips.ts # 待機中ヒント定義
442
- ```
443
-
444
- ## 対応電文タイプ(実装ベース)
445
-
446
- | 電文タイプ | 分類 | パーサ関数 | 表示関数 |
447
- |-----------|------|-----------|---------|
448
- | `VXSE43` | `eew.warning` | `parseEewTelegram` | `displayEewInfo` |
449
- | `VXSE44` | `eew.forecast` | `parseEewTelegram` | `displayEewInfo` |
450
- | `VXSE45` | `eew.forecast` | `parseEewTelegram` | `displayEewInfo` |
451
- | `VXSE51` | `telegram.earthquake` | `parseEarthquakeTelegram` | `displayEarthquakeInfo` |
452
- | `VXSE52` | `telegram.earthquake` | `parseEarthquakeTelegram` | `displayEarthquakeInfo` |
453
- | `VXSE53` | `telegram.earthquake` | `parseEarthquakeTelegram` | `displayEarthquakeInfo` |
454
- | `VXSE56` | `telegram.earthquake` | `parseSeismicTextTelegram` | `displaySeismicTextInfo` |
455
- | `VXSE60` | `telegram.earthquake` | `parseSeismicTextTelegram` | `displaySeismicTextInfo` |
456
- | `VXSE61` | `telegram.earthquake` | `parseEarthquakeTelegram` | `displayEarthquakeInfo` |
457
- | `VTSE41` | `telegram.earthquake` | `parseTsunamiTelegram` | `displayTsunamiInfo` |
458
- | `VTSE51` | `telegram.earthquake` | `parseTsunamiTelegram` | `displayTsunamiInfo` |
459
- | `VTSE52` | `telegram.earthquake` | `parseTsunamiTelegram` | `displayTsunamiInfo` |
460
- | `VZSE40` | `telegram.earthquake` | `parseSeismicTextTelegram` | `displaySeismicTextInfo` |
461
- | `VXSE62` | `telegram.earthquake` | `parseLgObservationTelegram` | `displayLgObservationInfo` |
462
- | `VYSE50` | `telegram.earthquake` | `parseNankaiTroughTelegram` | `displayNankaiTroughInfo` |
463
- | `VYSE51` | `telegram.earthquake` | `parseNankaiTroughTelegram` | `displayNankaiTroughInfo` |
464
- | `VYSE52` | `telegram.earthquake` | `parseNankaiTroughTelegram` | `displayNankaiTroughInfo` |
465
- | `VYSE60` | `telegram.earthquake` | `parseNankaiTroughTelegram` | `displayNankaiTroughInfo` |
466
- | `VZVO40` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
467
- | `VFVO50` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
468
- | `VFVO51` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
469
- | `VFVO52` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
470
- | `VFSVii` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
471
- | `VFVO53` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
472
- | `VFVO54` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
473
- | `VFVO55` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
474
- | `VFVO56` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
475
- | `VFVO60` | `telegram.volcano` | `parseVolcanoTelegram` | `displayVolcanoInfo` |
476
-
477
- ## 主な機能
478
-
479
- - WebSocketによるリアルタイム受信
480
- - gzip圧縮+base64エンコードされたXML電文の自動デコード
481
- - 展開サイズ上限チェック(10MB)
482
- - 震度に応じた色分け表示
483
- - 緊急地震速報(警報/予報)の視覚的な強調表示
484
- - PLUM法・仮定震源要素・既到達の検出と視覚的表示
485
- - EEWイベントの同時追跡(EventID単位、重複報スキップ、取消対応)
486
- - EEWイベントのログファイル記録(イベント別ファイル出力、差分表記対応、記録項目の選択可能)
487
- - EEW最終報(NextAdvisory)の検出とログ・トラッカー自動終了
488
- - EEW差分表記(前の値 → 新しい値 形式)
489
- - テーブル幅設定(40〜200、`auto` でターミナル幅に自動追従)とテキスト折り返し機能
490
- - 表示モード切替(normal / compact)
491
- - お知らせ電文の全文/省略切替
492
- - 通知の一時ミュート機能(時間指定)
493
- - 待機中ヒント表示(間隔設定可能、0で無効)
494
- - インタラクティブ初期設定(`fleq init`)
495
- - 津波警報状態管理とプロンプト表示(`detail` コマンドで津波情報を再表示)
496
- - 通知音再生(レベル別サウンド、クロスプラットフォーム対応)
497
- - 南海トラフ地震関連情報(VYSE50-52/VYSE60)の表示
498
- - 長周期地震動に関する観測情報(VXSE62)の表示
499
- - 地震活動に関する情報(VZSE40)の表示
500
- - 火山情報の表示(噴火警報・噴火速報・降灰予報・火山の状況に関する解説情報・噴煙流向報・火山海上警報等、10種類の火山電文に対応)
501
- - 火山警報状態管理(複数火山の同時追跡、プロンプト表示、`detail volcano` コマンドで再表示)
502
- - 起動時の津波・火山警報状態復元(REST APIで最新状態を取得)
503
- - EEWで主要動到達と推測される地域のリスト表示
504
- - デスクトップ通知機能(カテゴリ別ON/OFF、REPLで管理。下記「デスクトップ通知」参照)
505
- - テーマシステム(CUD配色準拠のカラーパレット + セマンティックロール、`theme.json` でカスタマイズ可能)
506
- - 観測点の表示件数制限(`fold` コマンド)
507
- - EEW副回線(backup)による複線接続
508
- - エンドポイント選択・リージョン間フェイルオーバー
509
- - 指数バックオフによる自動再接続
510
- - ping-pongによる接続維持
511
- - ハートビート監視(90秒)
512
- - 既存ソケットの自動クリーンアップ
513
- - Configファイルによる永続設定管理
514
-
515
- ## デスクトップ通知
272
+ ## 通知
516
273
 
517
274
  `node-notifier` パッケージによるデスクトップ通知に対応しています(optional dependency)。
518
275
 
@@ -529,9 +286,41 @@ src/
529
286
  # Debian / Ubuntu / Raspberry Pi OS
530
287
  sudo apt install libnotify-bin
531
288
  ```
532
- - ヘッドレス環境(サーバー、SSH接続のみ)では通知を表示する手段がないため、通知機能は自動的に無効になります。アプリの動作には影響しません。
289
+ - ヘッドレス環境(サーバー、SSH 接続のみ)では通知を表示する手段がないため、通知機能は自動的に無効になります。アプリの動作には影響しません。
533
290
  - `node-notifier` のインストールに失敗した場合でも、通知以外の機能は正常に動作します。
534
291
 
292
+ ## FAQ / トラブルシューティング
293
+
294
+ **Q: `fleq` コマンドが見つからない**
295
+ A: グローバルインストールが完了しているか確認してください。`npm install -g @sayue_ltr/fleq` を再実行し、`npm bin -g` のパスが環境変数 `PATH` に含まれているか確認してください。
296
+
297
+ **Q: API キーを設定したのに接続できない**
298
+ A: API キーに必要な権限が付与されているか確認してください。最低限 `socket.start` と、受信する区分に対応する `telegram.get.*` 権限が必要です。dmdata.jp の管理画面で確認できます。
299
+
300
+ **Q: EEW が受信できない**
301
+ A: `eew.forecast` / `eew.warning` の受信には dmdata.jp の対応する契約が必要です。無料プランでは受信できません。契約なしで試す場合は `-c telegram.earthquake,telegram.volcano` で地震・火山情報のみ受信してください。
302
+
303
+ **Q: 他のデバイスで FlEq を起動したら、既存の接続が切れた**
304
+ A: デバイスごとに異なる `appName` を設定してください。詳しくは「複数デバイスで使う場合」を参照してください。
305
+
306
+ **Q: Linux でデスクトップ通知が表示されない**
307
+ A: `notify-send` がインストールされているか確認してください(`sudo apt install libnotify-bin`)。SSH 接続のみのヘッドレス環境では通知は利用できませんが、本体の動作には影響しません。
308
+
309
+ ## 関連ドキュメント
310
+
311
+ - [表示リファレンス](docs/display-reference.md) — 電文タイプ別の表示フォーマット一覧
312
+ - [Raspberry Pi 500 セットアップガイド](docs/raspi500-setup-guide.md) — Raspberry Pi での常時稼働セットアップ
313
+ - [内部仕様書](docs/specs/) — アーキテクチャ・電文ルーティング・UI 仕様等の開発者向けドキュメント
314
+ - [ソースコード](https://github.com/Lateo2580/FlEq) — ビルド・開発方法は `npm run dev` / `npm test` 等。詳細はリポジトリを参照
315
+
316
+ ## アンインストール
317
+
318
+ ```bash
319
+ npm uninstall -g @sayue_ltr/fleq
320
+ ```
321
+
322
+ Config ファイルを削除する場合は、`fleq config path` で表示されたディレクトリを手動で削除してください。
323
+
535
324
  ## ライセンス
536
325
 
537
326
  MIT