こんにちは、クロスイノベーション本部リーディングエッジテクノロジーセンターの大岡叡です。
私は、昨年AWS資格を全種類取得しまして、現在Google Cloudの資格勉強をしております。
AWS資格の勉強法をGoogle Cloudの資格勉強にも適用しようと考え、勉強方法の改善検討をしたところ、AIで自動化できる部分があることに気づきました。本記事では、これまでの勉強法の課題、その課題に対するAIを用いた解決策、そして実際に導入してみての所感をお伝えしたいと思います。
これまでの勉強法の課題
これまでのAWS資格勉強は以下のフローで進めていました。
【1問ごとに以下を繰り返す】 1. 問題集を解く 2. 分からなかった知識を公式ドキュメントで調べる 3. Notionに問題形式でまとめる(後から復習に活用)
この中で2と3にかなり時間がかかっていました。
AIを用いた解決策
課題であった「公式ドキュメントの調査」と「Notionへの問題作成」を、Claude Codeのスキル機能を使って自動化しました。
作成したスキル: /mq(Make Question)
作成したスキルはこちら(クリックで表示)
--- name: mq description: Google Cloud資格試験の勉強用に、問題を1問Notionにtoggle形式で作成する。問題文を指定して呼び出す。 user-invocable: true argument-hint: "<問題文>" --- # 試験勉強用 問題作成スキル ユーザーが指定した問題文に対して、正確な情報に基づいた回答を調査し、Notionページにtoggle形式で1問追加する。 ## 対象Notionページ - **ページURL**: `https://www.notion.so/Page-Title-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` - **ページID**: `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` ## ページ構造 このページには以下の2つのセクションがある: - `## Google Cloudに関する知識 {color="orange_bg"}` — Google Cloud関連の問題を配置 - `## 一般的な知識 {color="orange_bg"}` — それ以外の一般的な知識の問題を配置 ## toggleのフォーマット(Notion-flavored Markdown) 回答作成時・Notion挿入時の両方で使うフォーマット。子要素は必ずタブでインデントすること(インデントしないとtoggle外に出てしまう)。 ``` <details> <summary>**{問題文}**</summary> {回答テキスト} - {箇条書きポイント1} - {箇条書きポイント2} - {箇条書きポイント3} <empty-block/> **参考URL:** - [{ページタイトル1}]({URL1}) - [{ページタイトル2}]({URL2}) </details> ``` ## 実行手順 ### Step 1: 問題の分類 問題文の内容が以下のどちらに該当するか判断する: - **Google Cloud関連**: Google Cloudのサービス・機能に関する問題全般。例: Compute Engine、GKE、Cloud Run、Cloud Storage、BigQuery、VPC、IAM、Cloud SQL、Pub/Sub、Vertex AI、Gemini on Google Cloud など。Googleが開発・提供するモデルやツール(Gemma、Gemini、Imagen、NotebookLM、Google AI Studio等)もこちら - **一般的な知識**: Google固有でない技術知識全般。例: ネットワーキング(TCP/IP、DNS、ロードバランシング)、データベース理論(ACID、CAP定理)、セキュリティ(暗号化、ゼロトラスト)、コンテナ・Kubernetes一般、CI/CD、IaC、機械学習の一般理論、AI倫理、プロンプトエンジニアリング、ソフトウェアアーキテクチャ など ### Step 2: 情報収集 & 挿入位置の特定(並行実行可) 以下の2つは独立しているので、並行して実行してよい。 #### 2a: 情報収集 **Google Cloud関連の場合:** 1. `mcp__google-dev-knowledge__search_documents` で公式ドキュメントを検索 2. 検索結果から最も関連性の高いドキュメントの `parent` を使い、`mcp__google-dev-knowledge__get_documents` で**必ず**フルドキュメントを取得する(検索結果のチャンクだけで回答を作成しない) 3. 取得したドキュメントが問題の回答に不十分な場合は、以下を試みる: - 同じ検索結果内の別のドキュメントを `get_documents` で取得する - 別のキーワードで `search_documents` から再検索する 4. 取得したドキュメントのURLを参考URLとして記録 **一般的な知識の場合:** 1. `WebFetch` または `WebSearch` で信頼できるソースから情報を収集 2. 参考URLを記録 3. Wikipediaは参考URLとして使用しない。以下のような権威あるソースを優先する: - クラウド・インフラ: AWS公式ドキュメント、Microsoft Learn、Red Hat、CNCF - ネットワーク・セキュリティ: IETF RFC、OWASP、NIST、Cloudflare Learning - データベース・データ: PostgreSQL/MySQL公式ドキュメント、MongoDB University - AI/ML: Google for Developers、IBM、NVIDIA Developer Blog、大学サイト(Stanford等) - 一般技術: 著名な技術ブログ(Martin Fowler、InfoQ、DataCamp等) **AWSの知識が必要な場合(カテゴリ問わず):** 問題の回答にAWSサービスの知識が必要な場合: 1. `mcp__aws-documentation-mcp-server__search_documentation` でAWS公式ドキュメントを検索 2. 検索結果から最も関連性の高いページのURLを使い、`mcp__aws-documentation-mcp-server__read_documentation` で**必ず**フルドキュメントを取得する(検索結果のcontextだけで回答を作成しない) 3. 取得したドキュメントが問題の回答に不十分な場合は、以下を試みる: - 同じ検索結果内の別のページを `read_documentation` で取得する - 別のキーワードで `search_documentation` から再検索する - `recommend` で関連コンテンツを探す 4. 必要に応じて `mcp__aws-documentation-mcp-server__recommend` で関連コンテンツも探す #### 2b: 挿入位置の特定(state.json) `state.json`(スキルと同じディレクトリ)を `Read` ツールで読み取り、対象セクションの最後の参考URL行を取得する。 - **Google Cloud関連**: `google_cloud_last_ref` の値を使う - **一般的な知識**: `general_last_ref` の値を使う `state.json` が存在しない場合のみ、`mcp__notion__notion-fetch` でページ全体を取得し、各セクションの最後の参考URL行を特定する。 ### Step 3: 回答の作成 収集した情報に基づき、上記のtoggleフォーマットで1問分の回答を作成する: - 正確かつ簡潔な回答。箇条書きで要点を整理 - 参考URLは必ず含める - 作成するのは **1問のみ** ### Step 4: Notionページを更新 `mcp__notion__notion-update-page` を使って、適切なセクションにtoggleブロックを1つ追加する。 #### 挿入方法: replace_content_range `insert_content_after` は使わない(`</details>` がページ内に多数存在し、`...` で繋ぐと複数マッチしてエラーになるため)。 Step 2bで取得した参考URL行をセレクタの起点に使い、`replace_content_range` で置換する。 **セクション内にtoggleが既にある場合:** 最後のtoggle内の参考URL最終行から、セクション直後のランドマークまでを `selection_with_ellipsis` で指定する。 - **Google Cloudセクションのランドマーク**: `## 一般的な知識 {color="orange_bg"}` - **一般的な知識セクションのランドマーク**: `<empty-block/>`(ページ末尾のもの。参考URL起点なら一意になる) `new_str` には、参考URL最終行 + `</details>` + 新しいtoggle + ランドマーク をすべて含める。 実例(Google Cloudセクション): ``` selection_with_ellipsis: "arXiv](https://arxiv.org/abs/2406.11409)...## 一般的な知識 {color=\"orange_bg\"}" new_str: {最後の参考URL} </details> {新しいtoggle} ## 一般的な知識 {color="orange_bg"} ``` 実例(一般的な知識セクション): ``` selection_with_ellipsis: "{最後の参考URL}...<empty-block/>" new_str: {最後の参考URL} </details> {新しいtoggle} <empty-block/> ``` **セクション内にtoggleがない(空のセクション)場合:** セクション見出し+改行+`<empty-block/>` をフルテキストで `selection_with_ellipsis` に指定する(省略 `...` は使わない)。 #### selection_with_ellipsis のルール 1. **セレクタ内で `...` の前後それぞれ最低20文字以上を確保する**(短すぎると一意にならない) 2. **`</details>` をセレクタの終端に使わない**(ページ内に多数存在し、複数マッチする) 3. **セクション見出し単体をセレクタに使わない**(2件マッチする)。ただし、ランドマーク(セレクタ末尾)として使う場合は、開始位置が一意な参考URLなので問題ない 4. **空セクションでは `...` を使わず、フルテキストを指定する**(`<empty-block/>` が複数箇所にあるため `...` を使うと複数マッチする) 5. **`{{}}` を使わない**: `notion-fetch` ではURLが `{{https://...}}` 形式で返されるが、セレクタには `{{}}` なしのURLを使う #### 挿入失敗時のフォールバック `replace_content_range` が失敗した場合、`state.json` のキャッシュが古い可能性がある: 1. `mcp__notion__notion-fetch` でページ全体を取得 2. 対象セクションの最後の参考URL行を特定し直す 3. 正しいセレクタで再度 `replace_content_range` を実行 4. 成功後、`state.json` を更新する ### Step 5: state.json の更新 挿入が成功したら、`state.json` を `Edit` ツールで更新する。今回追加したtoggleの参考URL最終行で、対象セクションのキーを上書きする。 - **Google Cloud関連**: `google_cloud_last_ref` を更新 - **一般的な知識**: `general_last_ref` を更新 これにより、次回のスキル実行時にフルフェッチなしで挿入位置を特定できる。 ## 出力例 ``` <details> <summary>**Vertex AI Searchとは何ですか?主な機能と用途を説明してください。**</summary> Vertex AI Searchは、Google Cloudが提供するエンタープライズ向けの検索ソリューションです。 - Webサイト、構造化データ、非構造化データに対して高品質な検索体験を提供 - LLMを活用した自然言語での検索が可能 - RAG(Retrieval-Augmented Generation)パターンの実装に活用できる <empty-block/> **参考URL:** - [Vertex AI Search overview](https://cloud.google.com/generative-ai-app-builder/docs/enterprise-search-introduction) </details> ```
今回作成したのは、問題文を渡すだけで、公式ドキュメント調査からNotionへの問題・解答作成までを一気通貫で行うスキルです。
公式ドキュメントの調査は、Google Developer Knowledge MCPとAWS Documentation MCPを使用し、Notionへの問題・解答作成はNotion MCPを利用します。
以下がNoteBookLMに作ってもらった、このスキルのイメージです。

スキルを使うための準備
以下の準備が必要です。
上記スキルのマークダウンを
SKILL.mdとして作成し、任意のディレクトリの.claude/skills/mq/配下に配置する。Google Developer Knowledge MCPをセットアップする。
Developer Knowledge MCP公式ドキュメントに従って、APIキーを発行する。
以下のコマンドを
.claudeがあるプロジェクトルートで実行する。YOUR_API_KEYの部分には、発行したAPIキーの値を入力する。claude mcp add google-dev-knowledge --scope project --transport http https://developerknowledge.googleapis.com/mcp --header "X-Goog-Api-Key: YOUR_API_KEY"
AWS Documentation MCPの設定をする。以下のコマンドをプロジェクトルートで実行する。
claude mcp add aws-documentation-mcp-server -s project -e FASTMCP_LOG_LEVEL=ERROR -e AWS_DOCUMENTATION_PARTITION=aws -- uvx awslabs.aws-documentation-mcp-server@latest
- Notionの準備及びNotion MCPの準備
- 以下のスクショのように、Notionのページに「Google Cloudに関する知識」と「一般的な知識」のセクションを作成する。
##2つの文字サイズで、背景色をオレンジに設定する。(ページのタイトルは受験する資格名など何でもよい。)
- Notion MCPの設定をする。以下のコマンドをプロジェクトルートで実行する。
claude mcp add --transport http notion --scope project https://mcp.notion.com/mcp
- 以下のスクショのように、Notionのページに「Google Cloudに関する知識」と「一般的な知識」のセクションを作成する。
- Notionの認証&スキル更新
- プロジェクトルートでClaude Codeを立ち上げ、
/mcpコマンドを使用してNotion MCPの認証を通す。 - 以下のプロンプトをClaude Codeに投げる。
<あなたのNotion URL>の部分は、4. で作成したNotionのページのURLに置き換える。<あなたのNotion URL> .claude\skills\mq\SKILL.mdのページURLとページIDを上記URLに基づいて更新してください。
- プロジェクトルートでClaude Codeを立ち上げ、
以上で準備は終わりです。
使い方
【Google Cloudに関する問題を作成(メインの使い方)】
プロジェクトルートでClaude Codeを起動し、以下のように入力するだけです。
/mq Cloud Runとは何ですか?
するとClaude CodeがGoogle Developer Knowledge MCPを用いて、公式ドキュメントを取得し、正しい情報に基づいて問題・解答を自動でNotion上に作成してくれます。

toggleの中身の一番下に参考URLが書かれ、公式ドキュメントへの導線が張られています。

【AWSサービスとの比較問題を作成】
AWSサービスとGoogle Cloudを比較する問題も作成できます。
その場合は、Claude CodeはGoogle Developer Knowledge MCPだけでなくAWS Documentation MCPを利用して、正しい情報に基づいて問題・解答の作成をしてくれます。

【一般的な知識問題を作成】
クラウドベンダー資格は、問題を解くうえで一般的なIT知識が必要になることも多くあります。
その一般的な知識をまとめるセクションも用意しており、クラウドサービスには関係のない問題も作成することができます。
やり方は同じで、以下のようなプロンプトをClaude Codeに投げます。セクションの分別はClaude Codeがよろしくやってくれるようにスキルで定義しています。
/mq OIDCとOauth2.0の違いは?

導入してみての所感
このClaude Codeのスキルを使用した勉強をして、先日Google Cloud Generative AI Leaderに無事合格しました。
今まで時間がかかっていた「公式ドキュメントの調査」と「Notionへの問題作成」をClaude Codeに全任せできたので、「問題を解く」・「知識を暗記する」この二つに集中でき、学習効率が飛躍的に向上したように感じました。
まとめ
今回はClaude Codeのスキルを使って勉強効率を上げた話をご紹介しました。
少しでも皆さんが資格勉強をする際の参考になったら嬉しいです。
最後までお読みいただきありがとうございました!
執筆:@ooka.toru
レビュー:@miyazawa.hibiki
(Shodoで執筆されました)



