onenote
Microsoft Graph APIを通じてOneNoteのノートブック、セクション、ページを作成・読み込み・管理し、ノートの自動化、コンテンツ抽出、検索、整理などを実現するSkill。
📜 元の英語説明(参考)
Create, read, and manage OneNote notebooks, sections, and pages via Microsoft Graph API. Use when someone asks to "create OneNote pages", "read OneNote notes", "automate OneNote", "save to OneNote", "extract OneNote content", "organize OneNote notebooks", or "OneNote API". Covers notebooks, sections, pages (create with HTML), content extraction, and search.
🇯🇵 日本人クリエイター向け解説
Microsoft Graph APIを通じてOneNoteのノートブック、セクション、ページを作成・読み込み・管理し、ノートの自動化、コンテンツ抽出、検索、整理などを実現するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o onenote.zip https://jpskill.com/download/15195.zip && unzip -o onenote.zip && rm onenote.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15195.zip -OutFile "$d\onenote.zip"; Expand-Archive "$d\onenote.zip" -DestinationPath $d -Force; ri "$d\onenote.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
onenote.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
onenoteフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
OneNote
概要
このスキルは、AIエージェントが Graph API を介して Microsoft OneNote と連携するのを支援します。ノートブック、セクション、ページの作成と管理、HTML を使用したリッチなページコンテンツの生成、テキストと画像の抽出、ノート全体の検索を網羅します。
手順
認証
// 他の Microsoft 365 サービスと同じ Azure AD アプリ
// 必要なアクセス許可:
// Notes.ReadWrite — ユーザーのノートブックの読み取り/書き込み
// Notes.ReadWrite.All — すべてのノートブックへのアクセス (管理者)
// Notes.Create — 作成のみ
import { Client } from '@microsoft/microsoft-graph-client';
// ... 他の Graph API スキルと同じ認証設定
ノートブックとセクション
// ノートブックの一覧表示
const notebooks = await graphClient.api(`/users/${userId}/onenote/notebooks`)
.select('id,displayName,createdDateTime,lastModifiedDateTime')
.get();
// ノートブックの作成
const notebook = await graphClient.api(`/users/${userId}/onenote/notebooks`)
.post({ displayName: 'Project Notes' });
// ノートブック内のセクションの一覧表示
const sections = await graphClient
.api(`/users/${userId}/onenote/notebooks/${notebookId}/sections`)
.select('id,displayName')
.get();
// セクションの作成
const section = await graphClient
.api(`/users/${userId}/onenote/notebooks/${notebookId}/sections`)
.post({ displayName: 'Meeting Notes' });
// セクショングループの作成 (セクションを整理するため)
const group = await graphClient
.api(`/users/${userId}/onenote/notebooks/${notebookId}/sectionGroups`)
.post({ displayName: 'Q1 2026' });
ページの作成
OneNote ページは HTML を使用して作成されます。API は、OneNote 固有のデータ属性を持つ HTML のサブセットを受け入れます。
// シンプルなページ
await graphClient.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.header('Content-Type', 'application/xhtml+xml')
.post(`
<!DOCTYPE html>
<html>
<head>
<title>Sprint 14 Standup — March 1, 2026</title>
<meta name="created" content="2026-03-01T09:30:00-05:00" />
</head>
<body>
<h1>Sprint 14 Daily Standup</h1>
<p>Date: March 1, 2026 | Attendees: Sarah, Mike, Dani</p>
<h2>Sarah</h2>
<ul>
<li><b>Yesterday:</b> Completed payment retry logic PR #142</li>
<li><b>Today:</b> Start integration tests for retry flow</li>
<li><b>Blockers:</b> None</li>
</ul>
<h2>Mike</h2>
<ul>
<li><b>Yesterday:</b> Reviewed 3 PRs, fixed CI flakiness</li>
<li><b>Today:</b> Dashboard performance optimization</li>
<li><b>Blockers:</b> Need access to production Datadog</li>
</ul>
<h2>Action Items</h2>
<ul>
<li data-tag="to-do">Grant Mike Datadog access — Sarah</li>
<li data-tag="to-do">Schedule sprint demo for Friday — Dani</li>
</ul>
<h2>Notes</h2>
<p>Sprint velocity tracking at 38 points, capacity is 42. On track for all commitments.</p>
</body>
</html>
`);
// テーブル付きのページ
await graphClient.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.header('Content-Type', 'application/xhtml+xml')
.post(`
<!DOCTYPE html>
<html>
<head><title>Weekly Metrics</title></head>
<body>
<h1>Weekly Metrics — Feb 24-28, 2026</h1>
<table border="1">
<tr><th>Metric</th><th>Value</th><th>Target</th><th>Status</th></tr>
<tr><td>Revenue</td><td>$98,200</td><td>$90,000</td><td>✅ Above</td></tr>
<tr><td>Sign-ups</td><td>142</td><td>150</td><td>⚠️ Below</td></tr>
<tr><td>Churn</td><td>0.4%</td><td>0.5%</td><td>✅ Below</td></tr>
<tr><td>NPS</td><td>72</td><td>65</td><td>✅ Above</td></tr>
</table>
</body>
</html>
`);
// URL からの画像付きのページ
await graphClient.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.header('Content-Type', 'application/xhtml+xml')
.post(`
<!DOCTYPE html>
<html>
<head><title>Architecture Diagram</title></head>
<body>
<h1>System Architecture — v2</h1>
<img src="https://example.com/architecture-diagram.png" alt="Architecture diagram" />
<p>Updated March 2026. Changes: added Redis cache layer, split API gateway.</p>
</body>
</html>
`);
OneNote HTML タグのリファレンス
主要な data-tag の値: to-do, important, question, remember-for-later, definition, highlight, contact, idea, critical, project-a, project-b。タイムスタンプには <meta name="created" content="2026-03-01T09:00:00-05:00" /> を使用します。標準の <ul> ネストはインデントされたアウトラインを作成します。
ページの読み取り
// セクション内のページの一覧表示
const pages = await graphClient
.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.select('id,title,createdDateTime,lastModifiedDateTime')
.orderby('lastModifiedDateTime DESC')
.top(50)
.get();
// ページコンテンツの取得 (HTML を返す)
const pageContent = await graphClient
.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.get();
// ページの完全な HTML を返します
// ページメタデータの取得
const pageMeta = await graphClient
.api(`/users/${userId}/onenote/pages/${pageId}`)
.select('id,title,createdDateTime,lastModifiedDateTime,contentUrl')
.get();
ページの更新
// 既存のページにコンテンツを追加
await graphClient.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.patch([
{
target: 'body',
action: 'append',
position: 'after',
content: '<h2>Update — March 2</h2><p>Sprint demo completed successfully. All 3 features demoed.</p>',
},
]);
// 特定の要素を置換
await graphClient.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.patch([
{
target: '#status-section', // data-id="status-section" を持つ要素
action: 'replace',
content: '<p data-id="status-section">Status: <b>Complete</b> ✅</p>',
},
]);
// コンテンツの先頭に追加
await graphClient.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.patch([
{
target: 'body',
action: 'pre 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
OneNote
Overview
This skill helps AI agents integrate with Microsoft OneNote via the Graph API. It covers creating and managing notebooks, sections, and pages, generating rich page content with HTML, extracting text and images, and searching across notes.
Instructions
Authentication
// Same Azure AD app as other Microsoft 365 services
// Permissions needed:
// Notes.ReadWrite — read/write user's notebooks
// Notes.ReadWrite.All — access all notebooks (admin)
// Notes.Create — create only
import { Client } from '@microsoft/microsoft-graph-client';
// ... same auth setup as other Graph API skills
Notebooks & Sections
// List notebooks
const notebooks = await graphClient.api(`/users/${userId}/onenote/notebooks`)
.select('id,displayName,createdDateTime,lastModifiedDateTime')
.get();
// Create notebook
const notebook = await graphClient.api(`/users/${userId}/onenote/notebooks`)
.post({ displayName: 'Project Notes' });
// List sections in a notebook
const sections = await graphClient
.api(`/users/${userId}/onenote/notebooks/${notebookId}/sections`)
.select('id,displayName')
.get();
// Create section
const section = await graphClient
.api(`/users/${userId}/onenote/notebooks/${notebookId}/sections`)
.post({ displayName: 'Meeting Notes' });
// Create section group (for organizing sections)
const group = await graphClient
.api(`/users/${userId}/onenote/notebooks/${notebookId}/sectionGroups`)
.post({ displayName: 'Q1 2026' });
Create Pages
OneNote pages are created using HTML. The API accepts a subset of HTML with OneNote-specific data attributes.
// Simple page
await graphClient.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.header('Content-Type', 'application/xhtml+xml')
.post(`
<!DOCTYPE html>
<html>
<head>
<title>Sprint 14 Standup — March 1, 2026</title>
<meta name="created" content="2026-03-01T09:30:00-05:00" />
</head>
<body>
<h1>Sprint 14 Daily Standup</h1>
<p>Date: March 1, 2026 | Attendees: Sarah, Mike, Dani</p>
<h2>Sarah</h2>
<ul>
<li><b>Yesterday:</b> Completed payment retry logic PR #142</li>
<li><b>Today:</b> Start integration tests for retry flow</li>
<li><b>Blockers:</b> None</li>
</ul>
<h2>Mike</h2>
<ul>
<li><b>Yesterday:</b> Reviewed 3 PRs, fixed CI flakiness</li>
<li><b>Today:</b> Dashboard performance optimization</li>
<li><b>Blockers:</b> Need access to production Datadog</li>
</ul>
<h2>Action Items</h2>
<ul>
<li data-tag="to-do">Grant Mike Datadog access — Sarah</li>
<li data-tag="to-do">Schedule sprint demo for Friday — Dani</li>
</ul>
<h2>Notes</h2>
<p>Sprint velocity tracking at 38 points, capacity is 42. On track for all commitments.</p>
</body>
</html>
`);
// Page with table
await graphClient.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.header('Content-Type', 'application/xhtml+xml')
.post(`
<!DOCTYPE html>
<html>
<head><title>Weekly Metrics</title></head>
<body>
<h1>Weekly Metrics — Feb 24-28, 2026</h1>
<table border="1">
<tr><th>Metric</th><th>Value</th><th>Target</th><th>Status</th></tr>
<tr><td>Revenue</td><td>$98,200</td><td>$90,000</td><td>✅ Above</td></tr>
<tr><td>Sign-ups</td><td>142</td><td>150</td><td>⚠️ Below</td></tr>
<tr><td>Churn</td><td>0.4%</td><td>0.5%</td><td>✅ Below</td></tr>
<tr><td>NPS</td><td>72</td><td>65</td><td>✅ Above</td></tr>
</table>
</body>
</html>
`);
// Page with image from URL
await graphClient.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.header('Content-Type', 'application/xhtml+xml')
.post(`
<!DOCTYPE html>
<html>
<head><title>Architecture Diagram</title></head>
<body>
<h1>System Architecture — v2</h1>
<img src="https://example.com/architecture-diagram.png" alt="Architecture diagram" />
<p>Updated March 2026. Changes: added Redis cache layer, split API gateway.</p>
</body>
</html>
`);
OneNote HTML Tags Reference
Key data-tag values: to-do, important, question, remember-for-later, definition, highlight, contact, idea, critical, project-a, project-b. Use <meta name="created" content="2026-03-01T09:00:00-05:00" /> for timestamps. Standard <ul> nesting creates indented outlines.
Read Pages
// List pages in a section
const pages = await graphClient
.api(`/users/${userId}/onenote/sections/${sectionId}/pages`)
.select('id,title,createdDateTime,lastModifiedDateTime')
.orderby('lastModifiedDateTime DESC')
.top(50)
.get();
// Get page content (returns HTML)
const pageContent = await graphClient
.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.get();
// Returns full HTML of the page
// Get page metadata
const pageMeta = await graphClient
.api(`/users/${userId}/onenote/pages/${pageId}`)
.select('id,title,createdDateTime,lastModifiedDateTime,contentUrl')
.get();
Update Pages
// Append content to existing page
await graphClient.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.patch([
{
target: 'body',
action: 'append',
position: 'after',
content: '<h2>Update — March 2</h2><p>Sprint demo completed successfully. All 3 features demoed.</p>',
},
]);
// Replace specific element
await graphClient.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.patch([
{
target: '#status-section', // Element with data-id="status-section"
action: 'replace',
content: '<p data-id="status-section">Status: <b>Complete</b> ✅</p>',
},
]);
// Prepend content
await graphClient.api(`/users/${userId}/onenote/pages/${pageId}/content`)
.patch([
{
target: 'body',
action: 'prepend',
content: '<p style="color:red;"><b>⚠️ UPDATED: See new figures below</b></p>',
},
]);
Search
// Search across all OneNote content
const results = await graphClient
.api(`/users/${userId}/onenote/pages`)
.filter("contains(title, 'standup')")
.select('id,title,createdDateTime,parentSection')
.expand('parentSection($select=displayName)')
.orderby('lastModifiedDateTime DESC')
.get();
// Full-text search via Microsoft Search API
const searchResults = await graphClient.api('/search/query')
.post({
requests: [{
entityTypes: ['driveItem'],
query: { queryString: 'filetype:one AND "sprint planning"' },
size: 20,
}],
});
Common Patterns
Examples
Example 1: Create structured meeting notes in OneNote
User prompt: "Create a OneNote page in my Engineering notebook's Sprint section for today's sprint retrospective. Attendees are Marcus, Jenna, and Priya. We discussed what went well with the payment migration and what to improve in CI pipeline times."
The agent will use the Graph API to first look up the notebook named "Engineering" via GET /onenote/notebooks?$filter=displayName eq 'Engineering', find the "Sprint" section, then create a new page via POST /onenote/sections/{sectionId}/pages with XHTML content. The page HTML includes a <title>Sprint 14 Retrospective — February 18, 2026</title>, a <meta name="created"> timestamp, an <h1> header, attendee list, an <h2>What Went Well</h2> section with bullet points about the payment migration completing 2 days ahead of schedule, an <h2>What to Improve</h2> section noting CI pipeline averaging 18 minutes (target: under 10), and an <h2>Action Items</h2> with data-tag="to-do" items like "Marcus: investigate parallel test execution to cut CI time" and "Priya: document payment migration rollback procedure."
Example 2: Search OneNote and append updates to an existing page
User prompt: "Find my OneNote page titled 'Q1 OKR Tracker' and append a progress update for the 'reduce churn' objective — we hit 2.1% churn this month, down from 2.8% in January."
The agent will search for the page using GET /onenote/pages?$filter=contains(title, 'Q1 OKR Tracker')&$select=id,title,parentSection, retrieve the page ID, then call PATCH /onenote/pages/{pageId}/content with a JSON body targeting body with action append and position after. The appended HTML content is <h2>Update — February 18, 2026</h2><p><b>Reduce Churn Objective:</b> Monthly churn dropped to 2.1%, down from 2.8% in January. On track to hit Q1 target of 1.8%.</p><p data-tag="important">Key driver: improved onboarding flow launched Feb 3 reduced 30-day churn by 25%.</p>.
Guidelines
- Pages are created with HTML — use valid XHTML (close all tags, quote attributes)
- OneNote API supports a subset of HTML — stick to basic tags (h1-h6, p, ul, ol, table, img, b, i)
- Use
data-tagattributes for to-do items, important notes, etc. — renders as OneNote tags - Set
<title>in HTML head — it becomes the page title in OneNote - Use
<meta name="created">to set custom creation timestamps - Page updates use PATCH with target/action arrays — not full HTML replacement
- Images can be inline (base64 in multipart request) or URL references
- Search works on page titles via
$filter; for full-text, use Microsoft Search API - Rate limits: same as other Graph API resources (10,000 per 10 min)
- OneNote pages are stored in OneDrive — large notebooks count against storage quota