True Random Shuffle(真のランダムシャッフル)

Mobile

概要

True Random Shuffleは、音楽プレイバックにおける「シャッフルの偏り」を解消することを目的としたオープンソースプロジェクトです。シャッフル操作にはFisher–Yatesアルゴリズムを採用し、乱数生成には暗号学的に安全なランダムソースを利用することで、数学的に均一な並べ替えを実現します。Spotifyアカウントと連携してプレイリストやLiked Songsへアクセスでき、Expo + React NativeベースでiOS/Android/Webに対応。シンプルかつダークテーマの現代的なUIを備え、ユーザーの「アルゴリズムバブル」からの解放を目指します。

GitHub

リポジトリの統計情報

  • スター数: 4
  • フォーク数: 0
  • ウォッチャー数: 4
  • コミット数: 3
  • ファイル数: 19
  • メインの言語: TypeScript

主な特徴

  • 真のランダムシャッフル: Fisher–Yatesと暗号学的に安全な乱数源を組み合わせて偏りを排除
  • Spotify統合: プレイリストやLiked Songsにアクセスしてシャッフル再生が可能
  • クロスプラットフォーム: Expo と React Native による iOS / Android / Web サポート
  • モダンなUI: ダークテーマに対応した使いやすいインターフェース

技術的なポイント

True Random Shuffle の核は「アルゴリズムの正しさ」と「乱数の質」にあります。Fisher–Yatesアルゴリズム自体は任意の順列を均等に生成する理論的根拠を持ちますが、実装でMath.randomのような決定論的または偏りのある疑似乱数を使うと理想が崩れます。本プロジェクトでは暗号学的に安全な乱数源(Web Crypto API、あるいはモバイルではExpoのSecureRandomなどプラットフォーム固有のCSPRNG)を用いることで、各スワップで得られるインデックスが均一になるよう設計されています。

Spotify連携部分はOAuthによる認証フローとSpotify Web API呼び出しに基づき、プレイリストIDやトラックリストの取得、ページネーションの処理に対応する必要があります。モバイルとWebで同一コードベースを維持するため、Expoの抽象化を活かしつつ、ネイティブAPI(例:安全な乱数、ストレージ)への分岐を最小限に留めるアーキテクチャが推奨されます。また、長いプレイリストでのパフォーマンスを考慮し、メモリと処理回数を抑えるインプレース(in-place)シャッフル実装や非同期でのトラックフェッチを組み合わせることが重要です。

ユーザー体験面では、シャッフル履歴や現在の順序を可視化するUI、重複再生やシーク操作との整合性、Spotifyの再生制御との同期(ローカルな並び順とSpotify上の再生キューの整合)といった実装上の課題があります。加えて、SpotifyのAPIレート制限、アクセストークンの更新、ユーザーデータの取り扱いにおけるプライバシー配慮も設計時に考慮されています。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • .npmrc: file
  • .prettierrc: file
  • LICENSE: file
  • README.md: file
  • package.json: file(依存関係とスクリプト)
  • tsconfig.json: file(TypeScript設定)
  • app.json / app.config.js: file(Expo設定)
  • App.tsx: file(エントリポイント)
  • src/: directory(アプリ本体のコード、コンポーネント、サービス)
  • assets/: directory(アイコンや画像など)
  • その他設定ファイルやCI関連ファイル …他 14 ファイル

まとめ

Fisher–Yates と暗号学的乱数で「真のシャッフル」を目指した実用的なクロスプラットフォーム実装。

リポジトリ情報:

READMEの抜粋:

True Shuffle

Experience true randomness in your music. Break free from algorithmic bubbles with mathematically pure shuffle using the Fisher-Yates algorithm.

Features

  • True Random Shuffle: Uses cryptographically secure randomness with the Fisher-Yates algorithm
  • Spotify Integration: Connect with your Spotify account to access playlists and liked songs
  • Cross-Platform: Built with Expo and React Native for iOS, Android, and Web
  • Modern UI: Beautiful, dark-themed interfa…