個人で管理しているGoogleドライブ上の知識ベース(第二の脳)を、ローカルのObsidianや自作のローカルAIエージェントと連携させるため、保管するテキストファイルをすべてMarkdown(.md)で統一することにした。
※追記 2026-09-27 > それでもgdocになる現象
普段使っているGemini Sparkに「メモを保存するときはGoogleドキュメント(.gdoc)ではなく、拡張子.mdのテキストファイルで作って」と指示したのだが、ここから少し予想外のトラブルシューティングに入ることになった。
ファイル名を「*.md」、MIMEタイプを「text/markdown」と指定しているにもかかわらず、生成されたファイルをドライブで見ると、なぜか毎回Googleドキュメント(.gdoc)に変換されてしまっていた。
1. ログを見て気になったこと
Gemini Sparkの実行ログ(思考プロセスのタイムライン)を眺めていたところ、第二の脳への追記処理の中でGoogle Docsのアイコンが表示されていた。スキルの指示がまだ反映されていないのか、それともAIにとってMarkdown形式で直接ドライブへ保存するのが難しい処理なのかが気になったので、直接聞いてみた。
質問: 「gdocからmdへの変換に苦労していただけ? それとも、mdを書くこと自体に苦労していましたか?」
返ってきた答えはこうだった。
回答: 「mdを書くことでも、変換に手こずっていたわけでもありません。Google Drive API側の強制的な自動変換仕様をいかに回避するかに苦戦していました」
AIの指示追従の問題ではなく、受け側のAPI仕様の問題だった。
2. Google Drive APIの自動変換仕様
挙動を細かく確認したところ、原因はGoogle Drive API(drive:create_file)の内部仕様にあった。
テキスト本文(text_content)をAPIに直接渡すと、リクエスト側でMIMEタイプを「text/markdown」や「text/plain」と指定していても、Google Drive側が気を利かせてGoogle Workspace形式(application/vnd.google-apps.document)に自動変換してしまう仕様になっている。
drive:create_file({
title: "20260913_[記録]_プロジェクト_v1.5.md",
mime_type: "text/markdown",
text_content: "# ライフ支援・AIエージェント開発プロジェクト..."
});
// 実際にGoogle Drive側から返ってきたレスポンス
{
"title": "20260913_[記録]_プロジェクト_v1.5.md",
"mimeType": "application/vnd.google-apps.document" // Google Docsに自動変換される
}
つまり、AIが指示を無視してDocsを作っていたのではなく、AIは指示通りにMarkdownとしてリクエストを投げていたものの、Google Drive側が「テキストデータ=ドキュメント」と判断して勝手にDocs化していたのが真相だった。
3. 回避策:バイナリ形式でのアップロード
テキストとして本文をそのまま送信するとGoogle Driveの自動変換エンジンに捕捉されてしまうため、以下の手順で変換をバイパスすることにした。
- ローカル環境への書き出し: 一度サンドボックス側のローカル環境に、純粋な .md ファイルを書き出す。
- バイナリ(octet-stream)としてアップロード: text_content パラメータを使わず、ローカルファイルのパスを指定し、MIMEタイプを application/octet-stream(バイナリ扱い)としてAPIを呼び出す。
- 親フォルダへの移動: 作成完了後、フォルダ移動APIで目的のPARAフォルダへ配置する。
この手順を踏むことで、Google Drive側の自動変換をすり抜け、拡張子 .md、MIMEタイプ text/markdown のファイルとして正常に保存できるようになった。
4. ルールとスキルへの反映
この手順は今のチャットスレッドだけで解決しても意味がない。別のスレッドで動くエージェントが、また同じようにテキスト直接送信を行ってDocs化してしまうからだ。
そのため、以下の2箇所に技術仕様として明記した。
- スキル指示書(append-to-second-brain、reading-memo): 新規作成時は text_content を使わず、ローカルに生成した上で application/octet-stream でアップロードする手順を必須化。
- 全体規約(タグ・命名ルール辞書.md): AIエージェント共通の仕様として、バイナリアップロードによる自動変換回避ルールを追記。
5. なぜ .md で管理するのか
今回の件を通じて、改めてGoogleドキュメントとMarkdownの使い分けについて整理した。
| 項目 | Markdown (.md) | Googleドキュメント (.gdoc) |
|---|---|---|
| ローカルAI・ツール連携 | ファイル実体があるため、Ollama、BGE-M3、Python、Obsidianから直接読み書き可能。 | 実体はWebポインタであり、API経由やエクスポートを挟まないと直接読めない。 |
| ポータビリティ | 特定サービスに依存せず、Git管理やZIPでのバックアップが容易。 | Google Workspaceのエコシステム内に閉じる。 |
| メタデータ管理 | YAMLフロントマターやタグを埋め込みやすく、機械処理に向いている。 | 本文内に記載する形になり、プログラムからの自動抽出がやりにくい。 |
| 閲覧・編集のしやすさ | DriveのWeb画面やスマホアプリではプレビュー表示になり、やや不便。 | いつでも直感的にリッチな編集が可能。 |
| 他者共有・共同編集 | 記号混じりのテキストになるため、非エンジニア向けではない。 | コメント機能や提案モードがあり、複数人でのレビューに適している。 |
二段階の運用方針
すべてをどちらか一方に統一するのではなく、用途で分けるのが一番無理がないという結論になった。
第一段階(個人ナレッジ、思考ログ、仕様書、第二の脳): すべて .md で管理
日々の記録や技術メモ、ローカルAIとの連携用データは、機械可読性と検索性を最優先にしてMarkdownで一元管理する。
第二段階(他者共有、レビュー、提出用資料): 必要に応じて .gdoc や HTMLスライドへ変換
他者と一緒に推敲する企画書や提出書類になった段階で、Googleドキュメント等へエクスポートする。
おわりに
AIが指示通りに動かないと感じたとき、プロンプトの書き方だけでなく、裏側で動いているプラットフォームやAPIの暗黙の仕様が原因になっているケースがある。
ログを見て何が起きているのかを一つずつ切り分け、プラットフォームの制約をバイパスする仕組みを作るという、インフラや自動化に近い試行錯誤だった。
コメント
コメントを投稿