#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'webrick' require 'json' # JSONを使うので追加 # mp3のMIMEタイプを設定 WEBrick::HTTPUtils::DefaultMimeTypes.store('mp3', 'audio/mpeg') # 音楽ファイルがあるディレクトリ music_dir = "C:\Users\soets\Intro-Q-2025-ver2-main\public\music" server = WEBrick::HTTPServer.new( Port: 8890, # DocumentRootは使わないのでコメントアウトしてもOK # DocumentRoot: music_dir, BindAddress: '0.0.0.0', AccessLog: [], Logger: WEBrick::Log.new($stdout, WEBrick::Log::INFO) ) # ▼▼▼ ここから新しい仕事を追加 ▼▼▼ # 1. 曲リストをJSONで返す仕事 server.mount_proc '/music_list.json' do |req, res| files = Dir.glob(File.join(music_dir, "*.{mp3,wav,ogg}")) .map { |f| File.basename(f) } .sort_by { |f| f[/^\d+/].to_i } res['Content-Type'] = 'application/json' res['Access-Control-Allow-Origin'] = '*' # 他のサーバーからのアクセスを許可 res.body = { files: files }.to_json end # 2. 音楽ファイルを返す仕事 server.mount_proc '/' do |req, res| # リクエストされたパスとmusic_dirを結合 path = File.join(music_dir, req.path) if File.exist?(path) && !File.directory?(path) res.body = File.open(path, 'rb', &:read) else res.status = 404 res.body = 'Not Found' end end # ▲▲▲ 追加ここまで ▲▲▲ trap('INT') { server.shutdown } puts "Music server (with list) started at http://localhost:8890/" server.start