Metadata-Version: 2.4
Name: kanameishi
Version: 0.3.0
Summary: Kanameishi - ターミナルで動くリアルタイム地震情報モニター
Project-URL: Homepage, https://github.com/yamato3010/kanameishi
Project-URL: Repository, https://github.com/yamato3010/kanameishi
Project-URL: Changelog, https://github.com/yamato3010/kanameishi/blob/main/CHANGELOG.md
License-Expression: MIT
License-File: LICENSE
Keywords: earthquake,eew,japan,p2pquake,terminal,tui
Classifier: Environment :: Console
Classifier: Natural Language :: Japanese
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.9
Requires-Dist: httpx>=0.27.0
Requires-Dist: rich>=13.0.0
Requires-Dist: textual>=0.79.0
Requires-Dist: websockets>=12.0
Description-Content-Type: text/markdown

# Kanameishi(要石)

ターミナル上で動作するリアルタイム地震情報モニターアプリケーション。

P2P地震情報 API v2 を利用して、地震情報・津波予報をリアルタイムに表示します。

## 機能

- 🗾 ASCIIアート日本地図上に震源を表示
- 🚨 緊急地震速報〔警報〕の受信時、地図上にP波・S波の到達予想円をアニメーション表示
- ⏱️ 予報区ごとの主要動到達カウントダウン (「あと N 秒」)
- 📊 震度分布をカラーバーチャートで表示
- 📍 震度ごと・都道府県ごとの観測地点名 (市区町村レベル) を一覧表示
- 📋 地震履歴の一覧表示
- 🌊 津波予報の警告表示
- 🔄 WebSocket によるリアルタイム更新
- 🔔 OS通知・音アラート (震度しきい値を設定可能)
- 📍 「自分の地域」の震度をヘッダーに常時表示。緊急地震速報では自分の地域を最優先で表示し、しきい値未満でも通知
- ⚙️ TUI 上から編集できる設定画面
- ⌨️ キーボードショートカットによる操作

## インストール

### PyPI からインストール (推奨)

パッケージ名は `kanameishi`、起動コマンドは `kaname` です。依存関係を専用の仮想環境に隔離したまま、どのディレクトリからでも実行できます。

```bash
# pipx が未導入の場合 (初回のみ)
brew install pipx
pipx ensurepath  # PATH 追加。反映されない場合はターミナルを再起動

pipx install kanameishi
```

`uv` を使っている場合:

```bash
uv tool install kanameishi
```

インストールせず一度だけ試す (コマンド名が違うため `--from` が必要):

```bash
uvx --from kanameishi kaname
```

更新・アンインストール:

```bash
pipx upgrade kanameishi
pipx uninstall kanameishi
```

### Release の wheel を指定する

バージョンを固定したい場合は、[Releases](https://github.com/yamato3010/kanameishi/releases) に添付された wheel を直接指定できます。

```bash
# X.Y.Z は Releases ページで最新のバージョンに置き換えてください
pipx install https://github.com/yamato3010/kanameishi/releases/download/vX.Y.Z/kanameishi-X.Y.Z-py3-none-any.whl
```

### ソースからインストール

```bash
# リポジトリのルートで実行
pipx install .

# 更新する場合 (コードを変更/pull した後)
pipx install . --force
```

### pipx を使わない場合

```bash
pip install --user .
```

### 開発用インストール (editable)

コードを編集しながら動作確認したい場合はこちら。

```bash
pip install -e .
```

## 使い方

```bash
# モジュールとして実行 (editable インストール時など)
python -m kanameishi

# グローバルインストール後はどこからでも実行可能
kaname
```

## キーバインド

| キー | 動作 |
|---|---|
| `Q` | アプリ終了 |
| `R` | データ更新 |
| `↑` `↓` (`K` `J`) | 履歴スクロール |
| `D` | 選択した地震の詳細 (`Esc` / `D` で閉じる) |
| `,` | 設定 (`Esc` で閉じる) |
| `?` | このアプリについて (`Esc` で閉じる) |
| `E` | 緊急地震速報のデモ表示 (動作確認用) |

### 詳細画面 (`D`)

履歴で選んだ地震について、メイン画面のパネルに収まらない情報をまとめて表示します。

- 震源の座標・発生時刻・発表時刻・発表種別・情報ID
- 「自分の地域」でこの地震が観測された震度
- **全観測地点**を震度の大きい順・都道府県ごとに一覧 (メイン画面の震度分布パネルは件数を絞って表示しています)

| キー | 動作 |
|---|---|
| `↑` `↓` (`K` `J`) | 観測地点リストをスクロール |
| `Esc` `D` | 閉じる |

### 設定画面 (`,`)

マウスでも操作できますが、キーボードだけで完結します。

| キー | 動作 |
|---|---|
| `↑` `↓` (`K` `J`) | 項目を移動 |
| `Tab` `Shift+Tab` | 項目を移動 |
| `Space` | スイッチの ON/OFF を切り替え |
| `Enter` | ドロップダウンを開く / 決定 |
| `S` | 保存して閉じる |
| `Esc` | 保存せずに閉じる |


## 自分の地域

都道府県をひとつ登録しておくと、自分に関係する揺れを優先して扱います。設定画面 (`,`) の「自分の地域」で選びます (既定は未設定)。

- ヘッダーに「📍東京都 震度3 12分前」のように、**その地域を最後に揺らした地震の震度**を常時表示します (履歴に無ければ「揺れなし」)
- 緊急地震速報では、自分の地域の予報区を予報区一覧の上に大きく取り出して、予想震度と主要動到達までの秒数を表示します
- 通知しきい値 (「通知する最小震度」) 未満でも、自分の地域が揺れたら通知します。うるさい場合は「自分の地域が揺れたら震度によらず通知」を切ってください
- 通知の本文には自分の地域の震度も併記します (例: `千葉県北西部 M5.2（📍東京都 震度2）`)

震度は都道府県単位の判定です。同じ都道府県に複数の観測点・予報区がある場合は、そのうち最も大きい震度を採用します。

## 通知

ターミナルを見ていないときでも地震に気づけるよう、OS のデスクトップ通知と音アラートを出せます。
`,` キーの設定画面から変更でき、内容は設定ファイルに保存されます。

| 設定 | 既定値 | 説明 |
|---|---|---|
| 自分の地域 (都道府県) | 未設定 | 優先して扱う都道府県 ([自分の地域](#自分の地域)) |
| OS通知 | 有効 | OS のデスクトップ通知を出す |
| 通知する最小震度 | 震度4 | この震度以上の地震のみ通知する |
| 音アラート | 有効 | 通知と同時に端末ベルを鳴らす |
| 緊急地震速報は震度によらず通知 | 有効 | EEW をしきい値に関係なく通知する |
| 津波予報は震度によらず通知 | 有効 | 津波予報をしきい値に関係なく通知する |
| 自分の地域が揺れたら震度によらず通知 | 有効 | 自分の地域の揺れをしきい値に関係なく通知する |

- OS通知は macOS (`osascript`) と Linux (`notify-send`) に対応します。`notify-send` が未インストールの Linux やその他の環境では、OS通知は出ず音アラートのみになります
- 音アラートは端末ベル (`\a`) を鳴らします。**端末側でベルを無効化している場合は鳴りません** (ターミナルの設定を確認してください)
- macOS では初回の通知時にシステムの通知許可が必要です。届かない場合は「システム設定 → 通知」でお使いのターミナルアプリを確認してください

### 設定ファイル

`~/.config/kanameishi/config.json` に保存されます (`XDG_CONFIG_HOME` を設定している場合はそちらに従います)。

```json
{
  "notify": {
    "enabled": true,
    "min_scale": 40,
    "sound": true,
    "eew_always": true,
    "tsunami_always": true,
    "region_always": true
  },
  "region": "東京都"
}
```

`min_scale` は P2P地震情報 API の震度値で、`10`=震度1, `20`=震度2, `30`=震度3, `40`=震度4,
`45`=震度5弱, `50`=震度5強, `55`=震度6弱, `60`=震度6強, `70`=震度7 です。
`region` は都道府県名 (`"東京都"` `"大阪府"` `"北海道"` など) で、`""` なら未設定です。
ファイルが無い場合や壊れている場合は既定値で起動します。`region` に都道府県名以外を書いた場合は未設定として扱います。

## 緊急地震速報について

- P2P地震情報の code 556 (緊急地震速報〔警報〕) を受信して表示します。警報級 (予想最大震度5弱以上) のみ配信されるため、実際に受信する機会はまれです
- P波 (○) ・S波 (●) の到達予想円は定数速度 (P: 7km/s, S: 4km/s) による近似で、気象庁の走時表とは数秒ずれることがあります
- `E` キーでデモ用のEEWを表示して動作を確認できます
- 環境変数 `KANAME_SANDBOX=1` を設定して起動すると、P2P地震情報の開発サンドボックスAPI (過去データの繰り返し配信) に接続します

## 時刻の扱い

画面に出る時刻・相対表記 (「n分前」) ・カウントダウンはすべて日本標準時 (JST) 基準です。端末のタイムゾーンがJST以外でもずれません。

## データソース

[P2P地震情報](https://www.p2pquake.net/) - 商用・非商用問わず無償利用可能

## ライセンス

MIT
