AIに曲を作らせて資格試験に合格した話

## はじめに
みなさんは資格取得のための勉強、してますか？

社会人になると、思った以上に自由な時間がなくなるものですね。
仕事が忙しいのはもちろんですが、帰宅してから「あ、勉強しなきゃ」なんて気持ちにはなかなかなれないものです。

机に向かって教科書を開き、ノートにひたすらまとめる...。学生時代はそれでもなんとかなったけれど、大人になった今では全然楽しくないし、続かないんですよね。だからこそ、「どうせやるなら楽しくできる方法はないかな？」と考えるようになりました。

そこで思いついたのが、"AIに頼ってみる"という方法です。しかも、ただのサポート役ではなく、AIに「曲を作らせて」その音楽を使って勉強する「AI覚え歌」というアイデア。最初は自分でも半信半疑でしたが、試してみたら想像以上に効果的で...

今回はいくつかの生成AIを使用した学習アプローチを模索しましたので、共有しようと思います。


### 本記事の対象者
- 資格試験の勉強がなかなか続かない方
- AIツールを勉強に活用してみたい方
- 音楽が好きで、リズムや歌で覚えるのが得意な方
- 忙しい社会人や学生の方


## AI覚え歌の作成

### 全体の流れ

今回の「AIに曲を作らせる」プロセスは、大きく分けて以下の5つのステップに分かれています。それぞれのステップで適切なAIツールを活用することで、効率的かつ楽しく進めることができました。

1. **単語の選定**
まずは、重要な単語やキーワードをピックアップします。過去問でもいいですが、体系的に覚えるためには参考書を用いたほうが効果的です。

2. **定義の作成**
次に、選定した単語に対して簡潔で覚えやすい定義や解説を作ります。ここでは[ChatGPT](https://chatgpt.com/)を活用しました。

3. **歌詞の作成**
定義が完成したら、それをもとに歌詞を作成します。ChatGPTでもいいですが、ここではAIアシスタントの[Claude](https://claude.ai/)を使用しました。

4. **楽曲の作成**
歌詞が完成したら、次は音楽の生成です。ここで活躍するのが[SUNO AI](https://suno.com/)です。このAIは、歌詞のテキストデータをもとにメロディーを自動生成してくれます。

5. **微調整**
最後に、生成した歌詞とメロディーの微調整を行います。漢字の読み間違えがないか、聴きやすく仕上がっているかを確認します。クオリティに**どこまで妥協できるか**がポイントです

以上の流れで、AIをフル活用してオリジナルの学習用楽曲を作成します。それぞれのAIツールの得意分野を活かすことで、スムーズに楽曲制作が進ました。

### 1. 単語の選定

今回は、**[基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)** に挑戦しました。ITの基礎知識から実践的な内容まで幅広く出題される試験で、確実に取得しておきたい資格の一つです。

今回手元に用意した参考書は、『栢木先生の基本情報技術者教室』。
このテキストは、わかりやすい解説と豊富な図解が特徴で、独学でも取り組みやすい名著です。

https://amzn.asia/d/9gjGClb

このテキストで**太字になっている単語や重要フレーズ**をどんどんリストアップしていきました。
この段階では「覚えやすさ」や「重要度」を意識せず、試験に必要な情報を広く集めることが目的です。とにかく素材をたくさん集めておくことで、次のステップでの作業がスムーズになります。

また、このリストアップ作業自体が試験範囲を俯瞰する良い機会にもなりました。「こんなところまで出るんだ」と驚いたり、単語を書き出していく作業で全体の内容をざっくりと認識できました。

### 2. 定義の作成

単語の選定が終わったら、次はそれぞれの単語について**覚えやすい定義や解説**を作るステップです。ここで使用したのが、**[ChatGPT](https://chatgpt.com/)** です。大量の単語を効率よく整理し、わかりやすい形でまとめるにはAIの力が必要でした。

具体的には、ChatGPTに以下のような指示を出して作業を進めました。

```plaintext
- 今から提示する単語群の説明を記載してください。
- tsv形式で表示してください。
- 「単語」「定義」「説明」「備考」列を定義してください。
- 基本情報技術者試験の出題用語として定義をお願いします。
```

このような指示を出すことで、ChatGPTは単語ごとに簡潔な定義を作り、さらに補足説明や注意点まで網羅してくれました。また、TSV形式（タブ区切り形式）で結果を返してもらうことで、データの整理が非常にスムーズになりました。

例えば、以下のような入力をしたとき
```plaintext
トランザクション処理
ACID特性
原子性
一貫性
独立性
耐久性
```

このような出力を得ることができました。
```plaintext
単語	定義	説明	備考
トランザクション処理	データベースに対する一連の操作を1つの単位として扱う処理	トランザクションは完全に実行されるか、まったく実行されないかのどちらかである。	データの整合性を保つための重要な仕組み。
ACID特性	トランザクション処理が満たすべき4つの特性	原子性、一貫性、独立性、耐久性を指す。	これらの特性を保証することで信頼性の高いデータ処理を実現する。
原子性	トランザクション内のすべての操作が完全に実行されるか、全く実行されないかを保証する特性	トランザクションが途中で失敗した場合、すべての操作が取り消される。	操作の全体性を保証する。
一貫性	トランザクションの開始前後でデータベースの整合性が保たれる特性	すべてのトランザクションが定義されたルールを満たすことを保証する。	データの正確性を維持する。
独立性	同時に実行されるトランザクションが互いに干渉しないことを保証する特性	並行して処理されるトランザクションが互いの結果に影響を与えないようにする。	並行性制御によって達成される。
耐久性	トランザクションの完了後にその結果が永続的に保存されることを保証する特性	システム障害が発生しても、完了したトランザクションの結果が失われないことを保証する。	結果の永続性を確保する。
```

#### **整合性の確認**
ChatGPTから得られた出力は便利ではあるものの、**参考書と照らし合わせて整合性を確認する作業**が必要です。

整合性確認の作業は以下のような意義があります。

- **正確性の確保**
  ChatGPTの出力内容が参考書の記載内容と矛盾していないかを確認することで、試験に即した知識を身につけられます。

- **自分の知識の補強**
  AIの提案と参考書を突き合わせることで、自分の中で定義や概念がより深く理解でき、記憶にも残りやすくなります。

- **必要なカスタマイズ**
  教科書の内容に合わせて用語をより簡潔にする、試験に出やすい表現に修正するなど、自分の勉強に最適化したリストを作成できます。

このステップで作成した「定義リスト」が、次の「歌詞の作成」で使用される重要な素材となります。このプロセスを経ることで、ただAIに頼るだけでは得られない深い理解が得られるので、確認作業を怠らないようにしました。

### 3. 歌詞の作成
定義リストが完成したら、次はその情報を使って歌詞を作るステップです。
この段階では、文章作成能力に優れた **[Claude](https://claude.ai/)** を活用しました。Claudeは自然な言葉遣いや文章構成を得意としており、ChatGPTよりも流れるような表現を生成する能力が高いと感じました。

#### 出力形式について
Claudeに依頼する際、特定のフォーマットで出力をお願いしました。その形式が以下のものです。

```plaintext
[Chorus]
サビ(4行)

[Hook]
フック(4行)

[Verse]
1番Aメロ(4行)

1番Aメロ2(4行)

[Bridge]
1番Bメロ(4行)

[Chorus]
サビ(4行)

[Break]

[Verse]
2番Aメロ(4行)

2番Aメロ2(4行)

[Bridge]
2番Bメロ(4行)

[Pre-Chorus]
サビ前(4行)

[Chorus]
ラスサビ(4行)

[Hook]
フック(4行)
```

このフォーマットを使用する理由は、**楽曲生成の際にSUNO AIが[このタグ](https://www.suno.wiki/faq/metatags/song-structure/)を必要とするため**です。タグが正しく付いていれば、AIが各パートの構成を認識し、それぞれに適したメロディーを生成してくれます。

#### 各パートの説明
以下は、このフォーマットの各パートについての解説です。

- **[Chorus]（サビ）**
  歌の中で最も印象に残る部分であり、曲のテーマを強調します。すべての[Chorus]が同じ歌詞になるよう統一します。これにより、楽曲としての一貫性が保たれるだけでなく、聴くたびに覚えやすくなります。

- **[Hook]（フック）**
  曲の中で耳に残る短いフレーズが該当します。[Chorus]と同じく[Hook]同士で同じ歌詞にすることで、情報をさらに繰り返し強調し、記憶に定着させます。

- **[Verse]（Aメロ）**
  ストーリー性を持たせたり、テーマを掘り下げたりする部分です。

- **[Bridge]（ブリッジ/Bメロ）**
  曲に変化を加える部分で、全体の構成にメリハリをつけますここも[Bridge]同士で同じ歌詞です。

- **[Break]**
  曲の流れを一旦落ち着かせるパートです。SUNO AIの仕様上、[時間が短すぎるとなかなか曲が終わらない](https://www.suno.wiki/faq/making-music/how-do-i-end-the-song/)という現象が起こるため、対策の時間稼ぎでもあります。

#### Claude活用のポイント
歌詞を作る際、[Chorus]と[Hook]には試験で最も重要な情報を詰め込みました。この2つのパートは曲全体で繰り返されるため、学習効率を最大化する狙いがあります。一方で、[Verse]や[Bridge]では補足的な情報や関連する内容をバランス良く取り入れ、曲全体を通じて試験範囲を網羅できるよう工夫しました。

上記の指示で出来た歌詞がこちらです。

```
[Chorus]
ACIDパワー! トランザクション
原子性で オールオアナッシング
一貫性と 独立性で
耐久性の 輝きを放つ

[Hook]
(A! C! I! D!) キレイにしよう
(A! C! I! D!) 強くしよう
(A! C! I! D!) 守ってゆこう
(A! C! I! D!) データベース

[Verse]
原子性の クリーンパワー
失敗したら すべてリセット
中途半端は 認めない
完璧な実行 約束する

一貫性の ピカピカ効果
整合性を キープしたまま
ルールを守る トランザクション
データの輝き 保証する

[Bridge]
4つの力が めぐり合い
データベースが 輝きだす
信頼性 高めながら
完全な処理 実現する

[Chorus]
ACIDパワー! トランザクション
原子性で オールオアナッシング
一貫性と 独立性で
耐久性の 輝きを放つ

[Hook]
(A! C! I! D!) キレイにしよう
(A! C! I! D!) 強くしよう
(A! C! I! D!) 守ってゆこう
(A! C! I! D!) データベース

[Break]

[Verse]
独立性の バリアシールド
並行処理も 安心だね
他のトランザクション 気にせずに
理想的な 結果導く

耐久性の ガードコート
システム障害 恐れない
永続的な 安心感
完了した処理 守り抜く

// 以下略
```
このようなコンセプトで作ってくれたようです。
```
コンセプトの要点：
1. 洗剤CMのような展開
- クリーンパワー
- ピカピカ効果
- バリアシールド
- ガードコート

2. 各特性を洗剤の機能として表現
- 原子性→完全洗浄
- 一貫性→輝き維持
- 独立性→バリア効果
- 耐久性→保護コート

3. CMのような掛け声
- "ACIDパワー!"
- "A! C! I! D!"
- キャッチーなフレーズ

4. 技術的な正確さは維持
- トランザクションの特性
- 各機能の役割
- 処理の保証

洗剤CMの明るく力強いイメージで、
ACIDの特性を表現しました。
```
これが歌詞としていいものかどうかは分かりませんが、覚えやすそうです。
この形式で生成した歌詞は、次のステップでSUNO AIに入力する際の「素材」として非常に重要な役割を果たします。

### 4. 楽曲の作成

歌詞が完成したら、次は楽曲を作るステップに進みます。ここでは **[SUNO AI](https://suno.com/)** を使用しました。SUNO AIは、入力された歌詞と指定された曲調をもとに、自動的にメロディーを生成してくれるツールです。作業の流れは以下の通り。

1. **歌詞の入力**
   まず、先ほど作成した歌詞をSUNO AIにそのまま入力します。このとき、歌詞に付けた[Chorus]や[Hook]などのタグが重要です。これらのタグを付けておくことで、AIが楽曲内での繰り返しや構成を正確に理解し、それに合わせたメロディーを作ってくれます。

2. **曲調の選択**
   次に、楽曲の雰囲気を決める曲調を選びます。SUNO AIでは、ポップスやバラードなど、さまざまなジャンルに対応しているため、勉強内容や記憶に適したものを選ぶことができます。

3. **楽曲の生成**
   歌詞と曲調を設定したら、SUNO AIに楽曲を生成してもらいます。

### 5. 微調整

楽曲が生成されたら、最後の仕上げとして微調整を行います。このステップでは、SUNO AIが生成した楽曲を聴きながら、歌詞やメロディーに違和感がないかを確認し、必要に応じて修正を加えました。

#### 修正ポイント

1. **漢字の読み間違いへの対応**
   SUNO AIは歌詞をそのままメロディーに組み込む際、漢字の読みを間違えることがあります。例えば今回の例だと、「並行」を「へいこう」ではなく「へいぎょう」と歌うようなケースです。こういった部分は、該当箇所を**ひらがな表記に修正**することで解決しました。
   例:
   - 修正前: 並行処理
   - 修正後: へいこう処理

2. **曲調の調整**
   歌詞がメロディーに乗りきらない場合や、全体の雰囲気が歌詞と合っていないと感じる場合には、別の曲調を試しました。ただし、**いい曲を作ることが目標ではない**ので、ある程度のところで妥協します。

3. **テンポやリズムの確認**
   SUNO AIが生成するメロディーは、歌詞のリズムを考慮しているものの、意図した展開でないことがあります。いくつか作り直し、ある程度のところで妥協します。

## AI覚え歌の管理
楽曲と歌詞が完成した後は、それらを整理して管理します。今回は、以下のようなファイル構造を採用しました。

```
.
└── 親ファイル
    ├── 1_コンピュータ構成要素
    ├── ⋮
    ├── 6_データベース技術
    │   ├── 歌詞
    │   │   ├── 01_データベース.txt
    │   │   ├── ⋮
    │   │   ├── 08_トランザクション処理.txt
    │   │   └── ⋮
    │   └── 楽曲
    │       ├── 01_データベース.wav
    │       ├── ⋮
    │       ├── 08_トランザクション処理.wav
    │       └── ⋮
    └── ...
```

#### 管理方法のポイント

1. **参考書の章ごとにディレクトリを分ける**
   管理の基本は、参考書の構成に合わせてディレクトリを切ることです。これにより、学習範囲ごとに内容を整理でき、特定の章や分野を復習したいときに迷わずアクセスできます。

2. **歌詞と楽曲の対応**
   各ディレクトリには「歌詞」と「楽曲」というサブディレクトリを作成し、それぞれに対応するデータを保存しました。また、対応関係が一目でわかるよう、ファイル名に項番を振り、同じ名前で揃えるルールにしました。例えば、「01_データベース.txt」という歌詞ファイルに対して、「01_データベース.wav」という楽曲ファイルを対応させています。

3. **柔軟な拡張性**
   この構造は新しい内容を追加する際にも便利です。たとえば、別の章の楽曲を作成した場合でも、対応するディレクトリを増やすだけで簡単に管理を拡張できます。

## AI覚え歌の利用

作成した曲をどこでも気軽に聴けるよう、端末にダウンロードしました。その際、再生環境を整えるためにいくつかの作業が必要でしたが、全てスマートフォンで完結させました。

#### メタデータの編集

曲を管理しやすくするために、アルバム情報やアーティスト名などの**メタデータを編集**しました。この作業を行うことで、楽曲をプレーヤー内で見つけやすくなり、再生時の体験も向上します。Androidユーザーには、**[Musicolet](https://play.google.com/store/apps/details?id=in.krosbits.musicolet)** という音楽プレーヤーアプリがおすすめです。このアプリでは、メタデータの編集はもちろん、楽曲の不要な部分を簡単にトリミングすることも可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645148/8a3da3d4-664c-ca61-6779-9a6cd80071b7.png" width=30% margin=auto>

#### 歌詞データの同期

さらに、覚え歌の学習効果を高めるために、歌詞データを**LRC形式**で作成しました。この形式を使うと、音楽と同期して歌詞を表示できるため、聴きながら内容を確認しやすくなります。MusicoletはLRC形式の歌詞表示にも対応しており、学習用の楽曲管理には最適なツールといえます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645148/94dd7a4f-c29f-a9b6-0ebb-8b3ed81bf761.png" width=30%>   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645148/cdb71f62-571c-da0e-d061-c45e4be2692f.png" width=30%>

#### アルバム画像の作成

アルバム画像には、**[nijijourney](https://nijijourney.com/)** を利用してオリジナルのデザインを作成しました。視覚的な楽しさを加えることで、勉強を続けるモチベーションにもつながります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645148/36700a67-279c-196d-0f66-d94fa52743ed.png" width=30%>

## AI覚え歌の成果

作成した覚え歌を繰り返し聴き、一定の時間が経過すると、その効果を実感できるようになりました。特に、**曲を聴いてから一日ほど経った頃**には、明確な成果を感じる場面が増えてきました。

試験勉強中に問題文を読んでいると、**出てきた単語から自然と歌詞が思い浮かび、それにメロディが重なる**ようになりました。さらに、メロディーに引き寄せられる形で、対応する参考書のページや具体的な解説内容も頭に浮かび、記憶を素早く引き出せるようになっていたのです。

その成果のおかげで、試験本番ではスムーズに問題を解くことができ、自信を持って回答を進められました。そして、最終的には無事に**基本情報技術者試験に合格**することができました。

AIと音楽を組み合わせたこの方法は、私自身にとって新しい発見であり、大きな成果をもたらしてくれました。

## 重要な点

ここまで読んで、「ちょっと面倒そうだな」と感じた方もいらっしゃるかもしれません。実際、この方法は手間がかかりますし、「誰かが作った曲を聞くだけでいいのでは？」と思うのももっともです。

しかし、**AI覚え歌で最も重要なのは、自分自身で曲を作ること**だと考えています。既存の曲を聴くだけでは得られないものが、このプロセスにはあります。

大切なのは「作業を効率化する」ことでも「よい曲を作る」ことでもありません。さらに言えば、「資格試験に合格する」こと自体が最終目標でもないのです。本当に目指すべきは、**「確かな自分の知識を身につける」こと**。この方法では、覚え歌を作る過程そのものが、自分の中に知識を体系化し、根付かせる役割を果たしました。

振り返ると、AIを使っているとはいえ、この方法は結局のところ「机に向かって教科書を開き、ノートにひたすらまとめる」という昔ながらの学習法と本質的には変わりません。ただ一つ、**明確に違うのは「やっていて楽しい」ということ**でした。

もし、これまでの勉強法が長続きしないと感じているなら、この方法を試してみる価値はあると思います。楽しみながら学ぶことができれば、結果として学習の質も量も向上していくはずです。

## 各種料金

ここまでご紹介したAIサービスのサブスクリプション料金を、日本円でまとめてみました。これから試してみようと思っている方は、ぜひお財布と相談しながら検討してみてください。

| サービス名 | プラン名 | 月額料金（日本円） | 年額料金（日本円） | 備考 |
| --- | --- | --- | --- | --- |
| ChatGPT | 無料プラン | 無料 | - | 基本的な機能を利用可能。 |
|  | ChatGPT Plus | 約2,980円 | - | より高度なモデル（GPT-4など）の利用が可能。 |
| Claude | 無料プラン | 無料 | - | 基本的な機能を利用可能。 |
|  | Claude Pro | 約2,980円 | - | より多くのメッセージ使用や優先的な帯域幅が提供される。 |
| SUNO AI | Basic Plan | 無料 | - | 1日50クレジット（10曲分）付与。 |
|  | Pro Plan | 約1,490円 | 約14,310円 | 月2,500クレジット（500曲分）付与。 |
| Musicolet | - | 無料 | - | 広告なしで、メタデータ編集や楽曲トリミングなどの機能を提供。 |
| nijijourney | Mini | 約740円 | - | モバイルアプリでのみ利用可能。 |
|  | Basic | 約1,490円 | 約14,310円 | 月200回までの画像生成が可能。 |

※1ドル＝約149円で換算しています（為替レートによる変動あり）。

サービスごとに機能やプラン内容が異なるので、必要な機能に合わせて選ぶのがポイントです。また、詳細な料金プランや条件については、必ず公式サイトで確認することをおすすめします。