開発ブログDevelopment Blog
← Home
VOL.1 — 4
CANTO Development Blog — Vol.1 to Vol.4

HOW
CANTO
WAS BORN

一行のコードも書かずに——
プロトタイプ「CRATE」の誕生から、命名・DB・ポータビリティまでの全記録。
Not a single line of code written by hand —
from the birth of prototype "CRATE" to naming, DB, and portability.

Vol.1 Genesis
Vol.2 Identity
Vol.3 Output & DB
Vol.4 Portability
Vol.01 — 誕生Vol.01 — Genesis

一行のコードも書かずに——
ツールが生まれた日
Not a single line of code —
the day a tool was born

最初のプロンプトからClaudeが生成したプロトタイプ「CRATE(クレート)」は、初日から完全なMP3プレイヤーとして機能した。再生・停止・ライブラリ管理・お気に入り・選択モードにキューまで——一行のコードも書かずにこれが動いた衝撃は忘れられない。 The prototype "CRATE" generated from the very first prompt worked as a complete MP3 player on day one. Playback, stop, library management, favorites, selection mode, queue — all of it, without writing a single line of code. The impact of seeing it work was unforgettable.

まず「使えるもの」を作り、そこから磨く——V1は初日から完全動作した。Build something usable first, then refine it — V1 worked fully on day one.

すべてはひとつのプロンプトから始まりました。カーオーディオやポータブルプレーヤーでも使えるように、ディレクトリ構造をブラウズできるMP3プレーヤーを作りたい——その要求をClaudeに投げた瞬間、ツールの原型が生まれました。 Everything started with a single prompt. I wanted an MP3 player that could browse a directory structure — usable in a car or on a portable player. The moment I gave that request to Claude, the prototype was born.

ユーザー プロンプトUSER PROMPT

MP3プレーヤーを作りたいです。車やMP3プレーヤーでも利用できるようにディレクトリー構造としてルートの音楽をすべてブラウズできるようにして。そこから仮想的にフォルダーを階層化するGUIにしますが、保存場所は同じ。フォルダーごとの合計データサイズを計算して表示。再生中は曲名を表示。重複した名前はデータサイズが一致したら更新が新しいものを頭に表示。お気に入りのメタデータをファイルに書き込めるように。I want to build an MP3 player. Make it usable in a car or on a standalone MP3 player — browse all music as a virtual folder hierarchy from the root. Show total data size per folder. Display the current track name during playback. For duplicates matching by filename and size, show the most recently updated first. Allow writing favorite metadata to the file.

Claudeの回答CLAUDE RESPONSE
V1 初日から完全動作——まず「使えるもの」を作り、そこから磨くV1 worked fully on day one — build something usable first
「まず、フロントエンドデザインのスキルを確認してから作成します。では、高品質なMP3プレーヤーを作成します!」 "First, let me check the frontend design skill. Now let's build a high-quality MP3 player!"

Claudeはこのプロンプトに対し、再生・停止・ライブラリ管理・お気に入り・選択モード・キューまでを備えた完全動作のプロトタイプを即座に生成しました。コードは一行も書いていません。ツールは対話から生まれました。 In response to this prompt, Claude instantly generated a fully working prototype with playback, stop, library management, favorites, selection mode, and queue. Not a single line of code was written by hand. The tool was born from dialogue.

// プロトタイプ名// Prototype Name

この最初のバージョンは CRATE(クレート) と呼ばれていました。レコードボックスのように音楽を格納するイメージ。しかし、このツールはすぐにそれ以上のものになることが明らかになりました。This first version was named CRATE — the image of storing music like a record crate. But it quickly became clear this tool would become something far greater.

// Vol.1 終 — Vol.2 始// Vol.1 end — Vol.2 begin
Vol.02 — 命名と進化Vol.02 — Identity & Evolution

名前が決まると、
方向性が決まる
A name defines
a direction

V1の改善に向け、Geminiとの集中的な「壁打ち」を行いました。単なるプレーヤーではなく、音楽が歌い出すような——プロフェッショナルかつ親しみやすいアイデンティティを探す中から「CANTO(カント)」という名称が生まれました。 To evolve V1, I conducted intensive brainstorming sessions with Gemini. We searched for an identity that felt like music coming to life — professional yet approachable. From that dialogue, the name "CANTO" was born.

ツールに名前をつけることは、ツールの方向性を定めることでした。ただの「MP3プレーヤー」ではなく、音楽の本質を体現する名称——その答えをGeminiとの対話の中で探しました。 Naming the tool meant defining its direction. Not just an "MP3 player" — we needed a name that embodied the essence of music. That answer emerged through dialogue with Gemini.

ユーザー プロンプトUSER PROMPT

このMP3プレーヤーに名前をつけたい。音楽・歌・詠唱に関連するラテン語や音楽用語で、プロフェッショナルかつ覚えやすい名前を提案してください。また、フォルダーを指定してその中の音楽ファイルをまとめてライブラリーに追加できるようにしてください。I want to name this MP3 player. Please suggest a professional yet memorable name related to music, song, or chanting — from Latin or music terminology. Also, please add the ability to select a folder and batch-load all music files inside into the library.

Claude / Gemini の回答CLAUDE / GEMINI RESPONSE
名前が決まると、方向性が決まる——「CANTO」とGeminiとの壁打ちA name defines a direction — "CANTO" emerged from Gemini sessions
「CANTO — ラテン語で「私は歌う」。音楽プレーヤーとして完璧な名前です。シンプルで発音しやすく、音楽の本質を一言で表現しています。」 "CANTO — Latin for 'I sing.' A perfect name for a music player. Simple, pronounceable, and it captures the essence of music in a single word."

CANTO——ラテン語で「私は歌う」。この命名の瞬間に、ツールのアイデンティティが確立されました。フォルダー一括読み込み機能も同時に実装され、ライブラリ管理ツールとしての基盤が整いました。 CANTO — Latin for "I sing." The moment of naming established the tool's identity. Folder batch-import was implemented simultaneously, laying the foundation for CANTO as a library management tool.

「CANTO」という名が決まった瞬間、これは単なるプレーヤーではなくなった。The moment the name "CANTO" was chosen, this became more than just a player.

// フォルダー一括読み込み// Folder Batch Import

このフェーズで実装されたフォルダー一括読み込みは、CANTOの中核機能のひとつになります。ディレクトリ階層を再帰的に走査し、数千のファイルを一度にライブラリ化する——この機能なしにCANTOは成立しません。Folder batch-import implemented in this phase became one of CANTO's core features. It recursively scans the directory hierarchy and catalogues thousands of files at once — without this, CANTO could not exist.

// Vol.2 終 — Vol.3 始// Vol.2 end — Vol.3 begin
Vol.03 — 出力とデータベースVol.03 — Output & Database

「聴く」だけでなく
「持ち出す」へ
Beyond listening —
built to export

CANTOの設計思想の核心は、再生能力とデータベース機能の高次元での両立にあります。ウェブアプリでありながらクラウドとローカルの垣根を越え、実用的なアウトプットを重視した設計——このフェーズでその思想が初めて形になりました。 The core of CANTO's design philosophy is the seamless coexistence of raw playback power and sophisticated database management. A web app that transcends the boundary between cloud and local — this phase is where that vision first took shape.

音楽を「聴く」ことから「管理する」ことへ。DUPEタブによる重複検出と、選曲ZIPダウンロードの実装により、CANTOはカーオーディオ用SDカード準備など実務的な用途に対応し始めました。 From listening to managing. With the DUPE tab for duplicate detection and batch ZIP download for selected tracks, CANTO began handling practical real-world tasks like SD card preparation for car audio.

ユーザー プロンプトUSER PROMPT

重複ファイルを一覧できる「DUPE」タブを追加して。重複の判定はファイル名とデータサイズの一致で。またトラックリストで選択した曲をまとめてZIPでダウンロードできる機能も実装して。カーオーディオのSDカード用に使いたい。Add a "DUPE" tab that lists duplicate files. Detect duplicates by matching filename and file size. Also add a feature to batch-download selected tracks from the tracklist as a ZIP archive. I want to use this for SD card prep for car audio.

Claudeの回答CLAUDE RESPONSE
「聴く」だけでなく「持ち出す」——ローカル資産を外の世界へ繋ぐハブへBeyond listening — turning CANTO into a hub that bridges local and the outside world
「DUPEタブを実装しました。ファイル名とサイズが一致するファイルをグループ化して表示します。更新日が新しいものを先頭に配置する仕様です。」 "DUPE tab implemented. Duplicate files are grouped by matching filename and size, with the most recently modified shown first."

DUPEタブとZIPエクスポートの実装により、CANTOは単なる再生ツールを超え、音楽ライブラリの管理・整理・出力まで担うハブとしての性格を持ち始めました。このフェーズがメディアHUB機能の原点です。 With the DUPE tab and ZIP export implemented, CANTO transcended the role of a simple player and began to take on the character of a hub for managing, organising, and exporting a music library. This phase is the origin of the Media HUB feature.

// 重複検出ロジック// DUPE Detection Logic

重複判定はファイル名とデータサイズの一致で行います。オリジナルファイルには一切書き込まず、IndexedDB 内のメタデータのみを参照。ブラウザの安全性を守りながら、実用的な重複管理を実現しています。Duplicates are detected by matching filename and file size. Original files are never modified — only metadata in IndexedDB is referenced. Practical duplicate management while maintaining full browser security.

// Vol.3 終 — Vol.4 始// Vol.3 end — Vol.4 begin
Vol.04 — 軽量DB&ポータビリティVol.04 — Lightweight DB & Portability

パフォーマンスを妥協しない軽さと、
環境を問わない継続性
Zero-compromise performance
with environment-agnostic continuity

数千、数万という楽曲群を前にしても、パフォーマンスを一切損なわないこと。そして、ある端末での作業を別の端末へとシームレスに引き継げること——CANTOが実装したデータベースの「軽さ」と「汎用性」の秘密に迫ります。 Handling tens of thousands of tracks without any performance penalty. Seamlessly carrying your work from one device to another. This phase explores the secrets behind CANTO's lightweight yet versatile database implementation.

ライブラリが数千曲を超えると、多くのツールは重くなります。CANTOはこの問題を 仮想スクロールIndexedDB の組み合わせで解決しました。さらに、プレイリストのJSON出力により、環境をまたいで作業を継続できる設計が整いました。 Most tools slow down once a library exceeds thousands of tracks. CANTO solved this with a combination of virtual scroll and IndexedDB. JSON playlist export completed the picture — enabling seamless continuity across devices.

ユーザー プロンプトUSER PROMPT

数千曲のライブラリでも動作が重くならないようにしたい。またプレイリストをJSONファイルとして書き出し・読み込みできるようにして。別のPCや端末でも同じリストを使えるように、ファイルパスの互換性も考慮してほしい。I want the app to stay fast even with thousands of tracks. Also add the ability to export and import playlists as JSON files. Please consider file path compatibility so the same list can be used across different PCs and devices.

Claudeの回答CLAUDE RESPONSE
パフォーマンスを妥協しない軽さと、環境を問わない継続性の両立Zero-compromise performance combined with environment-agnostic continuity
「ライブラリの描画を仮想スクロールに切り替えました。10,000曲以上でもDOMノード数を一定に保ちます。体感速度は数百曲のときと変わりません。」 "Library rendering switched to virtual scroll. DOM node count stays constant even beyond 10,000 tracks. Perceived speed is identical to a library of a few hundred."

仮想スクロールにより、表示中のDOMノード数を常に一定に保ちます。10,000曲のライブラリでも、数百曲のときと同じ体感速度を実現。プレイリストのJSON出力は M3U / JSON / Shell / BAT の4形式に対応し、ネットがあればどこでも環境を再現できます。 Virtual scroll keeps the number of rendered DOM nodes constant at all times. A library of 10,000 tracks feels identical in speed to one of a few hundred. Playlist export supports M3U / JSON / Shell / BAT formats — fully restorable anywhere with a browser.

10,000曲でも、100曲と同じ速さで動く——これがCANTOの設計原則のひとつ。10,000 tracks, same speed as 100 — one of CANTO's core design principles.

// Technical Stack — DB & Portability

IndexedDB による内蔵DB・仮想スクロールレンダリング・JSON / M3U / Shell / BAT の4形式エクスポート・Play Stats の JSON 保存復元——これらすべてがブラウザのネイティブ機能のみで実現されています。 IndexedDB-backed database, virtual scroll rendering, JSON / M3U / Shell / BAT four-format export, Play Stats JSON save and restore — all of it running on browser-native APIs alone.

次のシリーズNext Series
Vol.5 — クリップ抽出の実現 / Vol.6 — デザイン哲学Vol.5 — Achieving Clip Export / Vol.6 — Design Philosophy
canto_blog_vol5_6.html
Vol.5 & 6 を読む →Read Vol.5 & 6 →