進捗報告スライド作成スキル
このスキルはグローバルスキル(~/.claude/skills/progress-report-deck/)で、特定のフォルダに紐付いていない。ユーザーがどこで作業していても(Box内の別フォルダ、デスクトップ、別PC用に用意した作業フォルダ、どこでも)、そのカレントディレクトリに新しいpptxを作る。過去に使っていた C:\Users\09027\Box\相川研\個人\36期生\宇田川\学部\進捗報告 に固定でcdする必要はない。
このスキル自身のスクリプトとテンプレート資産は C:\Users\09027\.claude\skills\progress-report-deck\ 以下(scripts\ と assets\template.pptx)にある。呼び出すときは常にこの絶対パスを使う(作業フォルダとスキルの置き場所は別なので、相対パスでは届かない)。
宇田川-進捗報告*.pptx は、毎回同じ構成・同じデザインを使い回している月次/四半期の研究進捗報告資料。新しい回の資料を作るときは、ゼロから作るのではなく 既存のpptxをコピーして中身を差し替える — これが最も確実にデザインを踏襲する方法。ベースにするpptxは次のどちらか:
- カレントディレクトリ(またはユーザーが指定した場所)に
宇田川-進捗報告*.pptxが既にあれば、その中で一番新しいもの - 無ければ、このスキルに同梱されている
C:\Users\09027\.claude\skills\progress-report-deck\assets\template.pptx(2025年11月版そのもの。全20枚、タイトル〜研究背景〜各種内容スライド〜クロージングまで一通り揃った実例)を使う
このマシンの環境(2026年9月にセットアップ済み):
- Python 3.12(pip込み):
C:\Users\09027\AppData\Local\Programs\Python\Python312\python.exe—python-pptx/Pillow/defusedxml/lxml/markitdown[pptx]/pymupdfがインストール済み - LibreOffice:
C:\Program Files\LibreOffice\program\soffice.exe— pptx→PDF変換に使う(Windowsではサンドボックス用シムが不要なので直接呼び出せる。一般的なpptxスキルのscripts/office/soffice.pyラッパーはLinux前提のAF_UNIXを使っていてこの環境では動かないので使わない) unzip/zip/nodeも引き続き使える(pptxをZIPとして展開しXMLを直接編集する方式で作業する)
これにより、テキストレベルの確認だけでなく 実際にレンダリングした画像を見て はみ出し・重なり・余白バランスを確認できる。手順は下の「作業の進め方」を参照。
テンプレートの構成(決まったスライド順)
過去3回分(202510, 202511, 202603)を比較して分かった、毎回共通の骨格:
| # | スライド | 内容 | 毎回変わる? |
|---|---|---|---|
| 1 | タイトル | 「進捗報告 ◯月」+大学・学部・学科/研究室・学年/氏名 | 月だけ差し替え |
| 2 | 今月行ったこと | 今回の報告内容を箇条書きで要約(アジェンダ) | 今回の内容に差し替え |
| 3-4 | 研究背景 (1/2)(2/2) | PIV/PTVの説明など研究の背景。前回とほぼ同じでよい | 基本据え置き |
| 5 | 研究目的 | 研究の目的+「今回の小目標」 | 今回の小目標だけ更新 |
| 6〜 | 各トピックの内容スライド | シミュレーション・実験・手法など、今回進めた内容を1トピック1スライドで | 完全に今回の内容 |
| 最後-1 | まとめ・課題 | あれば | 今回の内容 |
| 最後 | ご清聴ありがとうございました | クロージング(中央寄せ、装飾なし) | 変更なし |
内容スライドは1スライド1見出しで、必要に応じて (1/2) (2/4) のように連番タイトルで分割する(研究背景がその例)。すべての内容スライドの右下にスライド番号(自動フィールド)が入る。
デザインルール
実際にLibreOfficeでレンダリングして目視確認して分かった点を含む。XMLだけを見ていると気づけない装飾がレイアウト側に入っているので、これらは手で再現しようとせず、既存のスライドレイアウト(slideLayout1=タイトル、slideLayout2=タイトル+本文、slideLayout7=クロージング)を使い続ければ自動的に付いてくる。
スライドサイズ: 4:3(
cx=9144000 cy=6858000EMU、10in×7.5in)。16:9にしない。フォント: 日本語は メイリオ で統一。英数字だけの引用文献などで Arial / Segoe UI が混在している箇所もあるが、新規作成時は基本メイリオに揃える。
配色: Office標準テーマそのまま(白背景、黒文字、アクセントはテーマのteal
#156082)。タイトルスライド: 全体を細いteal色の枠線で囲んでいる(slideLayout1由来)。
内容スライド共通の装飾(slideLayout2由来、触らなくても自動で付く):
- タイトル文字がteal色、その下に細いteal下線+右端に丸ドット
- 右上にteal色で塗った四角バッジの中に白文字でページ番号(自動フィールドなので数字を書く必要なし)
- これは「タイトル下に装飾線を引くのはAI生成っぽく見えるので避ける」という世間一般のデザイン注意とは別物。この資料の既存の型なので消さない・新しく似せて作らない(レイアウトを使い回せば自動で出る)
図の注釈の付け方(実例: 研究背景スライドの写真注釈): 塗りなし・色付き枠線の円や四角で対象を囲み、同じ色の枠線を引いた白背景のラベル(角丸なしの四角、テキストボックスに枠線を付けたもの)へ直線でつなぐ。色は要素ごとに変える(例: レーザー=赤、障害物=マゼンタ、カメラ=オレンジ、装置全体=グレー)。正式な凡例ボックスは作らず、ラベルの文字色・枠色そのもので対応関係を示す。
強調: 太字に加えて下線も使う(例:「可視化・定量化」に下線)。太字にする語句だけ
<a:r>を分けてb="1"を付ける。分類タグ: 手法名などをteal色で塗った四角バッジ+白太字で示すことがある(例:「従来法」)。
文字サイズは全て16pt以上(今回ユーザーから明示された最重要ルール)。目安:
要素 サイズ タイトルスライドの題目 32〜36pt, 太字 タイトルスライドの所属/氏名 18pt(右寄せ) 各スライドの見出し(タイトルプレースホルダ) 既定36pt(メイリオ既定を継承でよい) 本文の強調見出し(太字ラベル) 22〜24pt 本文 18〜20pt 図キャプション・注釈 16pt(過去資料には12ptの引用文献表記があるが、これは今回のルール違反。新規作成時は16pt未満を絶対に使わない) スライド番号 既定18pt(プレースホルダのまま触らない) 16ptだと文献情報や図注が入りきらない場合は、文字を小さくするのではなく 箱を広げる/文言を削る/スライドを分ける で対処する。
作業の進め方
0. 作業フォルダとベースファイルを決める
- 作業フォルダ = ユーザーが今いるカレントディレクトリ(別の場所を指定されたらそこ)。ここに新しいpptxを作る。
- ベースファイル = そのフォルダに
宇田川-進捗報告*.pptxがあれば一番新しいもの、無ければC:\Users\09027\.claude\skills\progress-report-deck\assets\template.pptx。どちらか迷ったらユーザーに確認する。 - 新しく作る資料のファイル名は同じ命名規則
宇田川-進捗報告YYYYMM.pptxに揃える(YYYYMMはユーザーに確認、または今回の報告月から決める)。
1. 今回の報告内容をユーザーから集める
「今月行ったこと」に載せる箇条書き、今回追加する内容スライドのトピックと中身(テキスト、画像があれば画像ファイル)、研究目的スライドの「今回の小目標」の更新有無、をユーザーに確認する。
2. コピーして展開する
cp "<ベースファイルのパス>" "宇田川-進捗報告<新規YYYYMM>.pptx"
mkdir unpacked
cd unpacked && unzip -o -q "../宇田川-進捗報告<新規YYYYMM>.pptx"
ベースが同梱テンプレート(assets\template.pptx)の場合、コピー後の中身は2025年11月分の実例そのものなので、手順4で研究背景・研究目的・内容スライドの中身をすべて今回の内容に差し替える(背景・目的スライドも初回は自分の研究に合わせて書き換えが必要)。
3. 構造の変更(追加・削除・並べ替え)を先に全部済ませる
- 新しい内容スライドを追加するときは、既存の内容スライド(レイアウトがすでに
title + content placeholder + slide番号になっているもの、例: slide2.xml)を土台にする:
これで新しいnode "C:\Users\09027\.claude\skills\progress-report-deck\scripts\duplicate-slide.js" unpacked slide9.xml --after slide9.xmlslideN.xmlの作成、[Content_Types].xmlへのOverride追加、presentation.xml.relsへのリレーション追加、presentation.xmlの<p:sldIdLst>への挿入まで一括で行われる。先にこれで枠を全部作ってから、中身のテキスト編集に入る(複製はファイルコピーなので、編集後に複製すると編集済みの中身までコピーされてしまう)。- スライドを消す/並べ替える場合は
ppt/presentation.xmlの<p:sldIdLst>を直接編集する(該当<p:sldId>を消す/移動する)。実体のXMLファイルは残っても表示上は問題ないので、削除後のクリーンアップは必須ではない。
- スライドを消す/並べ替える場合は
- 画像を貼るスライドは、既存の画像入りスライドを複製すると画像パーツへの参照ごとコピーできて楽(同じ画像を指すことになるので、違う画像にしたい場合は新しい画像を
ppt/media/に追加して該当スライドの.relsを書き換える)。
4. 各スライドの中身を編集する
Readでunpacked/ppt/slides/slideN.xmlを確認してからEditで<a:t>の中身を書き換える。- 箇条書きは1項目=1つの
<a:p>にする(改行を<a:t>の中に入れない)。既存の<a:pPr>はそのままコピーして体裁(インデント・スペース)を保つ。 - 太字にしたい語句だけ別の
<a:r>に分けて<a:rPr b="1" .../>を付ける(既存スライドの「シミュレーションデータ」を太字にしている書き方が実例)。 - 文字サイズを指定する
sz="NNNN"(単位はポイント×100。例: 18pt→sz="1800")は 1600未満を書かない。 - 前後にスペースがある
<a:t>にはxml:space="preserve"を付ける。 - タイトルスライド(slide1.xml)は月の数字だけ差し替える。氏名・所属は変更不要ならそのまま。
5. 16pt未満が無いか機械チェックする
node "C:\Users\09027\.claude\skills\progress-report-deck\scripts\check-min-font.js" unpacked 16
違反が出たら該当スライドを開いて直す(サイズを上げる/文言を削る/箱を広げる)。ゼロになるまで直す。
6. 再ZIPして完成
cd unpacked && rm -f ../"宇田川-進捗報告<新規YYYYMM>.pptx" && zip -Xr ../"宇田川-進捗報告<新規YYYYMM>.pptx" . && cd ..
zip -Xr は展開したディレクトリの 中から 実行すること(外から zip dir/* すると余計なパス階層が入って壊れる)。作った直後に unzip -t "宇田川-進捗報告<新規YYYYMM>.pptx" でZIP自体が壊れていないか確認する。
7. 内容チェック
PYTHONIOENCODING=utf-8 "C:\Users\09027\AppData\Local\Programs\Python\Python312\python.exe" -m markitdown "宇田川-進捗報告<新規YYYYMM>.pptx" > check.md
で全スライドのテキストを読み、プレースホルダの消し忘れ(「〇〇について」のような仮タイトルの残り、コピー元月の情報の消し忘れ)が無いか確認する。PYTHONIOENCODING=utf-8を付けて、出力はファイルにリダイレクトしてからReadで読むこと。素のままコンソールに出す・grepに流すと、日本語がcp932で化けて読めない(実際にテストした際に文字化けを確認済み)。
8. 構造チェック(python-pptxが入っているので使う)
PPTX_SKILL="C:\Users\09027\AppData\Roaming\Claude\local-agent-mode-sessions\skills-plugin\2204031c-f14a-486f-b5f9-9a3f62d78c4b\5f383004-8679-4baf-996b-797949b3b39d\skills\pptx"
"C:\Users\09027\AppData\Local\Programs\Python\Python312\python.exe" "$PPTX_SKILL\scripts\office\validate.py" "宇田川-進捗報告<新規YYYYMM>.pptx" --original "<ベースファイルのパス>"
テンプレート由来のXSDエラー(authors.xmlのコメント機能まわりなど)は --original を付ければベースと差分比較され無視される。このマシンでは scripts/thumbnail.py は使わない(内部で呼んでいる scripts/office/soffice.py がLinux用のAF_UNIXソケットに依存していてWindowsではAttributeErrorになる)。レイアウト選びは代わりに次のステップの画像で行う。
9. 画像で目視確認する(LibreOffice + pymupdfで実際にレンダリング)
"C:\Users\09027\AppData\Local\Programs\Python\Python312\python.exe" "C:\Users\09027\.claude\skills\progress-report-deck\scripts\render_slides.py" "宇田川-進捗報告<新規YYYYMM>.pptx" render_check
render_check/slide-1.jpg, slide-2.jpg, ... が作られるので、新規追加・編集したスライドを中心に画像を見て次を確認する:
- 文字がボックスからはみ出していないか(16pt化で特に起きやすい)
- 図・注釈ラベルが重なっていないか、矢印が正しい位置を指しているか
- 前ステップで直した引用文献・図注が箱に収まっているか
問題があれば unpacked/ppt/slides/slideN.xml を直し、手順6〜9をやり直す。画像確認が終わったら render_check フォルダは削除してよい(成果物ではない)。
ユーザーには最後に一度、実際にPowerPointで開いて見た目を確認してもらうよう伝える(フォント埋め込みやアニメーションなど、LibreOfficeのレンダリングとは完全には一致しない部分があるため)。
つまずきやすい点
- スライド番号プレースホルダ(
type="sldNum")は自動フィールドなので数字を書き換える必要はない。 - 引用文献のように既存資料で12ptになっている箇所を今回さわる場合は、16pt化に伴って箱がはみ出さないか要確認(著者名を省略する、二段になっている引用を一段にする、など)。
- スライドサイズ・フォント・配色は毎回変えない。凝ったデザイン変更をしたくなっても、この資料は「読みやすい研究進捗報告」が目的なので装飾は増やさない。
- 大きな
.pptxを作業前に上書きしないよう、必ず新しいファイル名にコピーしてから展開・編集する。