Claudeに読ませるための資料形式、最適解はどれ？(Office→PDF/HTML→AI)

# Office→PDF/HTML→AI  
## Claudeに読ませるための資料形式、最適解はどれ？

こんにちは。この記事では、AIによるドキュメント生成を進める中で直面した「ファイル形式の壁」についてまとめています。

特に、Microsoft Office製の設計資料をAI（Claude）に渡す際、 **どう変換すればうまく読み込んでもらえるのか？** という課題に取り組んだ記録です。

---

## 背景：ドキュメントをAIに読ませたい！

自社プロジェクトでは、ChatGPTやClaudeなどの大規模言語モデル（LLM）を活用して、プロジェクト新規参画者向けの「設計ドキュメント自動生成」に挑戦しています。

プロジェクト概要や設計意図、データフロー図などをもとに、テンプレート形式で情報をAIに渡し、整った出力を得るのが目的です。

---

## ステップ1：まずはPDF化してみたけれど…

WordやExcelの元資料をそのままAIに渡すことは難しいため、まずは**PowerShellでPDFに変換**するスクリプトを作成。以下のような処理を行いました：

- フォルダ内のOfficeファイルを再帰的に読み込み  
- 差分検知により更新されたファイルのみ変換  
- 出力先フォルダを指定して保存

```powershell
param (
    [string]$sourceFolder = ".\SWP-SharePoint",
    [string]$outputFolder = ".\SWP-SharePoint_PDF"
)

# 絶対パス化
$sourceFolder = [System.IO.Path]::GetFullPath($sourceFolder)
$outputFolder = [System.IO.Path]::GetFullPath($outputFolder)

# 出力フォルダ作成
if (-not (Test-Path $outputFolder)) {
    New-Item -ItemType Directory -Path $outputFolder -Force | Out-Null
}

# Officeアプリ起動

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
$ppt = New-Object -ComObject PowerPoint.Application
$word = New-Object -ComObject Word.Application
$word.Visible = $false

# 拡張子ごとの対応形式
$extensions = @("*.docx", "*.doc", "*.xlsx", "*.xls", "*.pptx", "*.ppt")

foreach ($ext in $extensions) {
    $files = Get-ChildItem -Path $sourceFolder -Recurse -Filter $ext
    foreach ($file in $files) {
        $relativePath = $file.FullName.Substring($sourceFolder.Length).TrimStart('\')
        $relativeFolder = Split-Path $relativePath
        $pdfSubFolder = Join-Path $outputFolder $relativeFolder
        $pdfSubFolder = [System.IO.Path]::GetFullPath($pdfSubFolder)

        if (-not (Test-Path $pdfSubFolder)) {
            New-Item -ItemType Directory -Path $pdfSubFolder -Force | Out-Null
        }

        $pdfFileName = [System.IO.Path]::GetFileNameWithoutExtension($file.Name) + ".pdf"
        $pdfPath = Join-Path $pdfSubFolder $pdfFileName
        $pdfPath = [System.IO.Path]::GetFullPath($pdfPath)

        # 差分更新：元ファイルが古ければスキップ
        if ((Test-Path $pdfPath) -and ((Get-Item $pdfPath).LastWriteTime -gt (Get-Item $file.FullName).LastWriteTime)) {
            Write-Host "Skipped (up-to-date): $pdfPath"
            continue
        }

        switch ($file.Extension.ToLower()) {
            ".xlsx" {
                $wb = $excel.Workbooks.Open($file.FullName, 0, $true)
                $wb.ExportAsFixedFormat(0, $pdfPath)
                $wb.Close($false)
            }
            ".xls" {
                $wb = $excel.Workbooks.Open($file.FullName, 0, $true)
                $wb.ExportAsFixedFormat(0, $pdfPath)
                $wb.Close($false)
            }
            { $_ -in @(".docx", ".doc") } {
                $doc = $word.Documents.Open($file.FullName, [ref]$false, [ref]$true)
                $doc.ExportAsFixedFormat($pdfPath, 17)
                $doc.Close([ref]$false, [ref]$null, [ref]$null)
            }
            { $_ -in @(".pptx", ".ppt") } {
                $pres = $ppt.Presentations.Open($file.FullName, $false, $false, $false)
                $pres.SaveAs($pdfPath, 32)
                $pres.Close()
            }
        }

        Write-Host "Converted: $($file.FullName) => $pdfPath"
    }
}

# Office終了とメモリ解放
$word.Quit()
$excel.Quit()
$ppt.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ppt) | Out-Null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()

Write-Host "`n✅ PDF変換が完了しました。"
```

一見、うまくいきそうでしたが……Claudeに読ませてみると、**表の途中で切れる・ページまたぎで構造が崩れる**といった問題が発生。PDFは人間には見やすいが、AIには「読みづらい」形式だということが判明しました。

---

## ステップ2：HTML形式にしてみたら、突破口が！

次に試したのが、**OfficeファイルのHTML化**です。これにより、以下のメリットがありました：

- 表の構造が保たれる  
- 段落やリストの論理構造が明確  
- Claudeが正しく意味を理解しやすい  

特にExcel資料では、PDFでは表が崩れてしまっていたのが、HTMLでは**正確にテーブル構造が伝わる**ようになり、大幅に改善されました。

---

## ステップ3：Markdown化も検討してみたけれど…

チーム内では、「MarkdownのほうがAIと相性が良いのでは？」という意見も出ました。

ただ、OfficeファイルをMarkdownに変換するには構文の理解やタグの最適化が必要で、PowerShellでの自動変換にはまだハードルがありました。

また、**画像や図表が多い資料の場合**、Markdownでは情報が不足しがちだったため、今回はHTMLを採用しました。

---

## 学びと今後の方針

- **ClaudeはPDFの構造理解が苦手**（特に表や段組）  
- **HTML化が最も安定した成果を得られる**  
- Markdown化は将来的なチャレンジ課題として有望  

今後は、さらにドキュメント構造に強い形式を自動変換できるよう、**AIに最適な資料形式変換プロセス**を整備していく予定です。

---

## まとめ：AIに渡す“素材”が、成果を左右する

AIによるドキュメント自動生成は確かに便利ですが、**元の情報の渡し方次第でアウトプットの質は大きく変わる**ことがよく分かりました。

単なるAI活用ではなく、「AIと人間の協業」を成立させるには、こうした**前処理や資料の工夫**が非常に重要だと感じています。

---

## 最後に：使った技術・ツール

- ChatGPT & Claude  
- PowerShellによるPDF変換スクリプト  
- Office→HTML変換（手動＋ツール併用）  
- VSCode + RooCodeでの対話型プロンプト生成  

---

> 形式にこだわると、AIはもっと賢くなる。  
> 資料の中身だけでなく、"どう見せるか"にも目を向けてみませんか？