ChatGPTの会話を保存する直感的な方法は Ctrl+P → PDFとして保存 です。無料だし、明白に思えます。結果は使い物になりません。なぜか、順を追って見ていきましょう。
chatgpt.com で Ctrl+P を押したときに実際に得られるもの
長いChatGPTの会話を開き、Ctrl+Pを押し、「PDFとして保存」を選び、確認。ディスクに保存されたPDFには以下が含まれています。
- サイドバー。 ChatGPTの左側のナビゲーションがすべてのページに印刷されます。文書の半分は自分自身の会話履歴リストであり、保存しようとしているチャットではありません。
- コンポーザーボックス。 「メッセージを送信…」の入力欄がすべての改ページの下部に表示されます。
- 長いメッセージがクリップされる。 ビューポートより長いメッセージは右端で切れます。応答の最初の100文字だけが表示され、あとは何もありません。
- コードブロックが関数の途中で分割される。 改ページが任意の場所に挿入され、30行の関数が17行目で分割されます。
- 数式が生の
$$ ... $$で表示される。 印刷時にKaTeXがレンダリングされず、LaTeXソースがそのまま印刷されます。 - 生成画像が壊れることも。 DALL-E画像は低解像度で印刷され、印刷パイプラインが画像をまったく読み込めないこともあります。
- ストリーミング状態の残骸。 応答がまだストリーミング中に印刷すると、レンダリング途中の出力がそのまま出力されます。
- ダークモードでインクの無駄。 ダークモードの場合、PDFは灰色がかった黒地に白文字で表示され、プリンターカートリッジの半分を消費します。
なぜChromeでは修正できないのか
印刷パイプラインはページに依存しません。Chromeはチャットコンテンツが特定のDOMサブツリーにあること、サイドバーが装飾であること、コンポーザーがUIコントロールであることを認識しません。画面に表示されているものをそのままキャプチャします。
一部はプリントスタイルシートで最悪の事態を回避できることもありますが、ChatGPTにはプリントスタイルシートが用意されておらず、@media print { .sidebar { display: none } } ルールを追加するにはユーザースクリプトや拡張機能でスタイルシートを注入する必要があります。ほとんどのユーザーはそこまでしません。
エクスポートツールが異なるアプローチを取る理由
3つの違いがあります。
- レンダリングされたページではなく、会話データを読み取る。 ChatGPTのWebクライアントは会話をJSデータ構造として保存しており、エクスポートツールはDOMではなくそれを読み取ります。
- 数式を適切にレンダリングする。 PDFを構成する前に、LaTeXはKaTeXを介してSVGに変換されます。
- PDFをスクリーンショットではなく、文書として構成する。 改ページはコンテンツを認識します(コードブロックを分割しない)。サイドバー、コンポーザー、ナビゲーションは入力に含まれていないため存在せず、コードは適切なレンダリングによりシンタックスハイライトが維持されます。
機能するフロー
ChatExport AI をインストールします。ChatGPTの会話を開きます。ツールバーのアイコンをクリックします。PDFを選びます。エクスポートをクリックします。
結果:
- サイドバーなし。
- コンポーザーなし。
- 数式は組版済み。
- コードはハイライト付き。
- 改ページはページ認識済み。
- ダークモードは任意、インクの無駄なし。
Ctrl+Pと同じクリック数です。出力はスクリーンショットではなく、文書のような形をしています。
Chromeの印刷機能がまだ使えるケース
静的なブログ記事。レシピ。記事。ライブWebアプリとして構築されていないもの——Chromeの印刷機能はそれらに対しては問題なく動作します。問題は、同じツールをライブWebアプリに使用してしまい、うまくいかないことです。
PDFが適切なエクスポートでないケース
PDFが常に正しいとは限りません:
- 編集可能な配布資料 → Word (.docx)。
- ノートアプリ → Markdown。
- チーム知識ベース → Notion。
- パイプライン / RAG → JSON。
デフォルトではなく、送り先で選びましょう。
ステップバイステップの代替案
エクスポートフローの詳細版:ChatGPTの会話を印刷する方法。