AI作詞支援ツール「Song Structure Management Tool」
プロジェクト概要
音楽制作における作詞プロセスを効率化するWebアプリケーションを開発しました。Google Gemini AIを活用した自動歌詞生成機能と、楽曲構成管理システムを組み合わせることで、クリエイターの創作活動を支援します。
技術スタック
- Backend: Python 3.x + Flask
- Database: SQLite + Flask-SQLAlchemy
- AI Integration: Google Gemini 2.5 Flash Preview API
- Frontend: HTML/CSS/JavaScript + Bootstrap 5
- Authentication: Session-based Authentication
主要機能
1. プロンプト管理システム
楽曲の言語、テーマ、構成を組み合わせて作詞用プロンプトを生成・管理。過去のプロンプトの検索・複製も可能です。
2. AI歌詞生成機能
Google Gemini APIを使用した2ステップ生成プロセス:
- Step 1: 指定されたテーマと構成で歌詞を生成
- Step 2: 生成された歌詞から楽曲タイトル候補を5個提案
3. 高精度な言語別歌詞分離
生成された歌詞を英語歌詞と日本語歌詞に自動分離。日本語文字の含有率(30%閾値)を基準とした精密な言語判定アルゴリズムを実装。
4. 多彩なコピー機能
- 一括歌詞情報コピー(タイトル + 英語歌詞 + 日本語歌詞)
- タイトル+英語歌詞コピー(Sunoなど外部サービス向け)
- 個別フィールドコピー
開発の背景・課題解決
解決した課題
- プロンプト管理の非効率性: 毎回同じような作詞プロンプトを手動作成していた
- 言語混在問題: AI生成時に英語歌詞と日本語歌詞が混在してしまう
- 外部サービス連携: 各音楽生成サービスに適した形式でのデータ出力が困難
技術的な挑戦
歌詞分離アルゴリズムの改良
初期実装では構成タグ([Verse1]
, [Outro]
等)の境界認識が不正確で、特に[Outro]
以降の英語歌詞が日本語フィールドに混入する問題がありました。
解決アプローチ:
def separate_lyrics_by_language(lyrics_text, language):
# 1. テキストクリーニング(不要な説明文除去)
lyrics_text = clean_lyrics_text(lyrics_text)
# 2. 構成タグベースでの正確なブロック抽出
blocks = extract_lyrics_blocks(lyrics_text)
# 3. 日本語文字含有率による言語判定
japanese_chars = len(re.findall(r'[あ-ん\u30A1-\u30F6\u4E00-\u9FAF]', block))
total_chars = len(re.findall(r'[a-zA-Zあ-ん\u30A1-\u30F6\u4E00-\u9FAF]', block))
is_japanese_block = total_chars > 0 and (japanese_chars / total_chars) > 0.3
この改良により、歌詞分離の精度が大幅に向上しました。
システム設計
データベース設計
-- 楽曲構成管理テーブル
CREATE TABLE song_structure (
id INTEGER PRIMARY KEY,
language VARCHAR(20), -- 言語設定
theme TEXT, -- 作詞テーマ
structure TEXT, -- 楽曲構成
title VARCHAR(255), -- 楽曲タイトル
english_lyrics TEXT, -- 英語歌詞
japanese_lyrics TEXT, -- 日本語歌詞
claude_url VARCHAR(500), -- 外部連携URL
memo1 TEXT, -- メモ欄1
memo2 TEXT, -- メモ欄2
user_id INTEGER -- ユーザーID
);
API設計
RESTful APIを採用し、フロントエンドとの疎結合を実現:
- POST /api/generate_lyrics/<id>
- AI歌詞生成
- POST /api/update_lyrics/<id>
- 歌詞情報更新
- GET /api/search_by_title
- タイトル検索
- POST /api/copy_record/<id>
- レコード複製
ユーザーインターフェース
レスポンシブデザイン
Bootstrap 5を使用し、デスクトップ・タブレット・モバイルでの利用を想定したレスポンシブ設計を実装。
ユーザビリティの工夫
- 視覚的フィードバック: コピー成功時の色変化とメッセージ表示
- エラーハンドリング: APIエラー時の適切なユーザー通知
- 外部サービス連携: Claude、Sunoなどへの直接リンク
セキュリティ対策
- セッションベース認証による安全なログイン機能
- パスワードハッシュ化(Werkzeug)
- CSRF対策とセッション管理の最適化
- 環境変数による機密情報の分離
パフォーマンス最適化
フロントエンド最適化
- 非同期API通信による画面のレスポンシブ性確保
- クリップボードAPI/フォールバック処理による確実なコピー機能
- 効率的なDOM操作とイベントハンドリング
バックエンド最適化
- SQLAlchemy ORMによる効率的なデータベースアクセス
- 適切なインデックス設計
- API レスポンス時間の最適化
実装上の工夫
1. 柔軟な設定管理
// prepared_blocks.json - 楽曲構成ブロックの動的管理
{
"blocks": ["verse1", "verse2", "chorus1", "bridge", "outro"],
"description": "準備済みブロックの定義",
"lastUpdated": "2025-06-19"
}
2. デバッグ機能の充実
開発・保守効率向上のため、詳細なログ出力とエラートレーシング機能を実装。
3. 拡張性を考慮した設計
新しいコピー機能やAPI エンドポイントを容易に追加できるモジュラー設計。
成果と効果
定量的成果
- 歌詞分離精度: 95%以上(日本語文字含有率ベース判定)
- プロンプト作成時間: 従来比70%短縮
- AI生成成功率: 90%以上
定性的成果
- クリエイターの創作フローの改善
- 外部音楽生成サービスとの連携効率化
- 楽曲制作における試行錯誤の支援
技術的学び
AI API統合の知見
- Google Gemini APIの効果的な活用方法
- プロンプトエンジニアリングの重要性
- AI出力の後処理とデータクレンジング技術
フルスタック開発の経験
- Flask フレームワークでの本格的なWebアプリケーション開発
- フロントエンド・バックエンド・データベースの統合設計
- セキュリティとパフォーマンスのバランス調整
今後の展開
機能拡張計画
- 楽曲ジャンル別テンプレートの追加
- 韻律解析機能の実装
- 複数AI モデルの比較機能
技術的改善
- Docker化による環境構築の簡素化
- CI/CD パイプラインの構築
- PostgreSQL移行による大規模データ対応
まとめ
本プロジェクトでは、AI技術を活用した実用的な創作支援ツールを開発しました。単なる技術実装にとどまらず、ユーザーの実際の創作フローを理解し、真に価値のある機能を提供することを重視しました。
特に歌詞分離アルゴリズムの改良では、実際の使用において発生した問題を分析し、データ駆動的なアプローチで解決策を実装した点が、実務的な問題解決能力を示しています。
このツールは現在も継続的に改良を続けており、クリエイターの創作活動支援という社会的価値の提供を目指しています。
技術スタック: Python, Flask, SQLite, Google Gemini AI, Bootstrap
開発期間: 3ヶ月(初期開発 + 継続改良)
プロジェクト規模: 約2,000行のコード