LinuxでRadio非公式プレイヤー「RadikoDeck」つくった

Linuxデスクトップ環境でラジオを聴くとき、意外と困るのが「気軽に使える専用プレイヤーが少ない」ことでした。

ブラウザからradikoを開けば聴くことはできます。

しかし、

  • 毎回ブラウザを開く
  • タブが増える
  • デスクトップアプリ感がない
  • Linux環境ではもっとシンプルに使いたい

という不満がありました。

そこで、自分用のLinux向けラジオプレイヤーを作ることにしました。

それが RadikoDeck です。


RadikoDeckとは

RadikoDeckは、Linuxデスクトップ向けに作成した非公式radikoプレイヤーです。

主な機能:

  • 📻 ラジオ局一覧表示
  • 🔎 局検索
  • ⭐ Favorite管理
  • ▶ ラジオ再生
  • ⏸ Pause制御
  • 🔊 音量変更
  • 🔇 ミュート
  • 🎵 M3Uプレイリスト生成
  • 🌑 ダークテーマUI

を搭載しています。


開発環境

今回使用した主な技術:

項目 内容
Language Python 3.12
GUI CustomTkinter
Player mpv
Control mpv IPC
OS Linux
Repository GitHub

Python標準のTkinterからスタートしましたが、最終的にはCustomTkinterへ移行しました。


初期バージョン

最初はシンプルなGUIでした。

構成は:

Station List
     |
     |
 Play Button
     |
     |
 mpv

という非常に単純なもの。

局を選択して再生する。

それだけでした。

しかし、機能追加を進めるにつれて問題が出てきました。


UI状態管理の問題

最初に苦労した部分が状態管理でした。

例えば:

  • 今選択している局
  • 現在再生中の局
  • Favorite登録済みの局

これらは似ていますが、意味が違います。

最初は状態が混ざってしまい、

「局を再生するとFavorite表示まで変わる」

という問題が発生しました。

そこで状態を分離しました。

selected_station
playing_station
favorites

それぞれ独立して管理するよう変更。

結果:

☆ 通常局

★ Favorite局

▶ ★ 再生中Favorite局

という自然なUIになりました。


mpv IPC制御

再生部分にはmpvを利用しています。

単純に:

mpv URL

で起動するだけでは、GUI側から制御できません。

そこでmpv IPC socketを利用しました。

構成:

RadikoDeck GUI
        |
        |
 Unix Socket
        |
        |
       mpv

これにより:

  • Pause
  • Volume
  • Mute
  • Status取得

などがGUIから操作可能になりました。


CustomTkinterによるUI刷新

標準Tkinterでは少し古い印象があったため、CustomTkinterへ移行しました。

変更点:

  • ダークテーマ
  • モダンなボタン
  • 高解像度ディスプレイ対応
  • 局カード表示

現在は4Kディスプレイ環境でも利用できるよう調整しています。


プロジェクト構成

現在の構成:

RadikoDeck/

├── core/
│   ├── player.py
│   ├── stations.py
│   ├── favorites.py
│   └── playlist.py

├── interface/
│   ├── gui.py
│   └── gui_controls.py

├── collectors/

├── generators/

├── database/

├── data/

└── main.py

UI、プレイヤー、データ管理を分離しています。


Linuxデスクトップアプリ化

GUIアプリとして使いやすくするため、.desktopファイルも用意しました。

これにより:

アプリ一覧
    ↓
RadikoDeck
    ↓
起動

という一般的なLinuxアプリと同じ操作が可能になります。


GitHub公開

完成したRadikoDeckはGitHubへ公開しました。

公開にあたり:

  • README.md作成
  • .gitignore設定
  • 不要ファイル整理
  • 初回リリース

を実施しました。


今後追加したい機能

今後は:

  • 📻 番組情報表示
  • 🔔 通知機能
  • 🎙 録音機能
  • 🖥 システムトレイ常駐
  • 📱 リモート操作
  • 📦 インストーラー作成

などを検討しています。


まとめ

Linux環境で「ちょっとラジオを聴きたい」と思った時に、ブラウザではなく専用アプリとして使えるものが欲しくてRadikoDeckを作りました。

単純な再生ツールから始まりましたが、

  • GUI設計
  • 状態管理
  • IPC制御
  • Linuxデスクトップ統合

など、実際のアプリ開発に必要な要素を一通り経験できるプロジェクトになりました。

Linuxデスクトップで使える、自分専用のラジオプレイヤー。

それが RadikoDeck です。


※注意:RadikoDeckはradiko公式アプリではありません。利用についてはradikoの利用規約・配信仕様に従ってください。

コメント

タイトルとURLをコピーしました
~