プレーンテキストと書式付き出力の比較
整形されていないプレーンテキストと、リッチな Markdown 出力のどちらを依頼すべきかを学びます。
「プレーンテキストと書式付き出力の比較」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全4レッスンが含まれています。
プレーンテキストを使用する場合
Markdown形式は強力ですが、常に適切な選択とは限りません。現実の多くのアプリケーションでは、Markdown記号が書式として表示されず、リテラル文字として現れることのない、整形されていないクリーンなテキストが必要です。
プレーンテキストを求めるべき場面を知ることは、リッチな書式を求める方法を知ることと同じくらい重要です。
プレーンテキストが必要な場合
環境でMarkdownが表示されない場合は、プレーンテキストで出力してください。
- メール文面: ほとんどのメールクライアントでは生のアスタリスクが表示されます
- SMSとプッシュ通知: 書式設定をサポートしていません
- 音声出力: テキスト読み上げでは「** bold **」がそのまま読まれます
- CRMとヘルプデスクのフィールド: 多くはMarkdownを表示しません
- APIデータ処理: テキストを保存またはさらに処理する場合
- レガシーシステムの入力フィールド: プレーンテキストのみ
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=200,
messages=[{
'role': 'user',
'content': (
'Write a 120-character push notification for a flash sale ending in 2 hours. '
'Plain text only — no emojis, no markdown, no asterisks, no special characters. '
'Must include: urgency, discount percentage (30%), and category (electronics). '
'Output the notification text only — nothing else.'
)
}]
)
print(response.content[0].text)プレーンテキストを明示的に求める
AIモデルは、多くの状況でMarkdownを多用した出力をデフォルトとします。本当にプレーンテキストを得るには、そのことを明示的に伝え、避けるべき具体的な記号を指定することも必要です。
- 「プレーンテキストのみ — Markdown形式は使用しないでください」
- 「アスタリスク、シャープ記号、箇条書き記号は使用しないでください」
- 「見出し、太字、リストは使用せず、流れるような文章の段落だけにしてください」
- 「すべての書式を削除し、Notepadで書くように出力してください」
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# Without plain text instruction — likely gets markdown
default_prompt = 'Explain what a webhook is in 100 words.'
# With explicit plain text instruction
plain_prompt = (
'Explain what a webhook is in 100 words. '
'Output format: plain text only. No markdown. No asterisks. No headers. '
'No bullet points. Just continuous prose paragraphs.'
)
for label, prompt in [('DEFAULT (likely markdown)', default_prompt), ('EXPLICIT PLAIN TEXT', plain_prompt)]:
response = client.chat.completions.create(
model='gpt-4o', max_tokens=150,
messages=[{'role': 'user', 'content': prompt}]
)
print(f'--- {label} ---')
print(response.choices[0].message.content)
print()メール文面のプレーンテキスト
メールのコピーライティングは、プレーンテキストが必要となる最も一般的な用途の一つです。一部のメールクライアントはHTML形式に対応していますが、AI生成のメール文面は、人間の編集者が後処理なしでメールクライアントやCRMに直接貼り付けられる、クリーンな文章として出力されるべきです。
次のように指定してください。「メール本文をプレーンテキストで記述してください。Markdownは使用しないでください。太字にするためのアスタリスクは使用しないでください。リストにダッシュは使用しないでください。リストの代わりに、番号付きの文または改行を使用してください。」
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=300,
messages=[{
'role': 'user',
'content': (
'Write a 3-paragraph re-engagement email for inactive newsletter subscribers. '
'Context: SaaS analytics tool, subscriber inactive for 60 days.\n'
'Format requirements:\n'
'- Plain text only — no asterisks, no pound signs, no bullet symbols\n'
'- Paragraph 1: acknowledge absence, create curiosity\n'
'- Paragraph 2: one new feature they missed\n'
'- Paragraph 3: CTA with a direct link placeholder [LINK]\n'
'- No subject line — body only'
)
}]
)
print(response.content[0].text)読みやすい文章の段落
Markdown記号を避けるだけでなく、「読みやすい文章」とは、断片的な箇条書きではなく、流れるような文として考えを構成することを意味します。
良い文章には、次の特徴があります。
- 考えをつなぐ接続語(しかし、さらに、その結果)を使用する
- リズムが生まれるように文の長さを変える
- 関連する考えをまとまりのある段落にまとめる
- すべての文を名詞で始めることを避ける
リクエスト: 「読みやすい文章の段落で記述してください。リストや見出しは使わず、接続語を用いた流れるような文にしてください。」
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
prose_prompt = (
'Explain the advantages of using Docker for development environments. '
'Write in 3 clean prose paragraphs. '
'Requirements:\n'
'- No bullet points or numbered lists\n'
'- No markdown headers\n'
'- Use transition words between sentences and paragraphs\n'
'- Vary sentence length — mix short and long\n'
'- 150 words total maximum'
)
response = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prose_prompt}]
)
print(response.choices[0].message.content)音声出力用のプレーンテキスト
テキスト読み上げシステムは、すべてを文字どおりに読み上げます。AIの出力を音声で読み上げる場合は、次の点に注意してください。
- すべてのMarkdown記号を避ける
- 略語を避ける(TTSが展開して読まない可能性があります)
- 必要に応じて数字を完全な形で書く
- 自然な間が生まれる位置にコンマを使用する
- 括弧を避ける(TTSでは不自然に読まれることがよくあります)
- 特殊文字を読み上げる形で書く(「@」→「アット」)
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=200,
messages=[{
'role': 'user',
'content': (
'Write a 45-second spoken weather briefing for London today. '
'Conditions: 12 degrees Celsius, light rain, wind 15 km/h from the southwest.\n'
'Format for voice output:\n'
'- No markdown symbols of any kind\n'
'- No parentheses\n'
'- No abbreviations (write "kilometres per hour" not "km/h")\n'
'- Natural spoken rhythm — use commas for pause points\n'
'- Write numbers as words when under ten'
)
}]
)
print(response.content[0].text)既存の出力からMarkdownを削除する
あるAI呼び出しからMarkdown形式の出力を得た後、別の用途に合わせて整える必要が生じる場合があります。その場合は、削除専用の2回目のAI呼び出しを使用できます。
「次のテキストからすべてのMarkdown形式を削除してください。**bold**をプレーンテキストに置き換え、#の見出しを削除し、箇条書きを番号付きの文に変換し、すべてのアスタリスクとシャープ記号を削除してください。クリーンなプレーンテキストのみを出力してください。」
import openai
import re
client = openai.OpenAI(api_key='sk-your-key-here')
markdown_text = (
'## Key Benefits\n'
'- **Faster deployment** with Docker containers\n'
'- **Consistent environments** across dev and prod\n'
'- Reduced *configuration drift* between machines\n'
'### Getting Started\n'
'Run docker-compose up to start all services.'
)
# Option 1: Ask AI to strip
response = client.chat.completions.create(
model='gpt-4o',
max_tokens=150,
messages=[{
'role': 'user',
'content': (
'Remove all markdown formatting from the text below. '
'Keep all the information but strip: **, ##, ###, -, *, backticks. '
'Convert bullet lists to flowing sentences. Output plain text only.\n\n'
+ markdown_text
)
}]
)
print('AI-stripped:', response.choices[0].message.content.strip())
# Option 2: Simple regex strip (for code-based pipelines)
import re
clean = re.sub(r'[#*]', '', markdown_text).strip()
print('Regex-stripped:', clean)システムメッセージ内のプレーンテキスト
常にプレーンテキスト環境へ出力するAIアシスタントでは、ユーザーが入力するたびに書式ルールを繰り返すのではなく、システムメッセージで一度設定してください。
これは、出力先の環境があらかじめ分かっている本番アプリケーションに最適な方法です。
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# System message enforces plain text for all responses
plain_text_system = (
'You are a helpful assistant embedded in a mobile push notification system. '
'All your responses are displayed as plain text in mobile notifications. '
'ALWAYS follow these formatting rules:\n'
'- Never use markdown (no **, no #, no -, no backtick, no *, no _)\n'
'- Never use bullet points or numbered lists\n'
'- Write in 1-2 complete sentences only\n'
'- Maximum 120 characters per response\n'
'- No emojis'
)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=64,
system=plain_text_system,
messages=[
{'role': 'user', 'content': 'Notify user their order has shipped and will arrive in 2 days.'}
]
)
print(response.content[0].text)書式を決めるためのフレームワーク
出力形式をリクエストする前に、次の簡単な判断基準を使用してください。
- 出力先はどこですか。 Web UI、メール、ターミナル、音声、データベース
- その環境はMarkdownを表示しますか。 はい → Markdownを使用します。いいえ → プレーンテキストにします。
- 人間が読みますか。 はい → スキャンしやすい構成にします。いいえ → 解析に適した形式にします。
- コードが処理しますか。 はい → 文章ではなくJSONまたはCSVにします。
- 音声で読み上げますか。 はい → 略語を使わない、音声に適したプレーンテキストにします。
def choose_format(environment, human_reads, code_processes, voice_output):
'''Simple formatting decision tree.'''
if voice_output:
return 'PLAIN TEXT — voice safe, spell out numbers and units'
if code_processes:
return 'JSON or CSV — machine-parseable, no prose'
renders_markdown = environment in ['web', 'notion', 'github', 'vscode', 'obsidian']
if renders_markdown and human_reads:
return 'MARKDOWN — headers, bold, code blocks, lists'
return 'PLAIN TEXT — clean prose paragraphs, no markdown symbols'
scenarios = [
('web', True, False, False),
('email', True, False, False),
('api_pipeline',False, True, False),
('voice_app', False, False, True),
('terminal', True, False, False),
]
for env, human, code, voice in scenarios:
result = choose_format(env, human, code, voice)
print(f'{env:<15} -> {result}')構造化されたプレーンテキスト
プレーンテキストでも、構造化されていないとは限りません。Markdownを使わずに、次の方法で構造を作成できます。
- すべて大文字のセクションラベル(どの環境でも同じように表示されます)
- セクション間の改行
- 番号付きの文: 「1. 最初のポイント。2. 次のポイント。」
- 区切り用のemダッシュ: 「重要な洞察 — 行動する前に必ず確認する。」
- スペースを使った一貫したインデント(ターミナル出力用)
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
response = client.chat.completions.create(
model='gpt-4o',
messages=[{
'role': 'user',
'content': (
'Write a daily briefing for a developer — 3 sections: TASKS, BLOCKERS, NOTES. '
'Format: plain text only. '
'Use ALL CAPS section labels followed by a colon. '
'Use a line break between sections. '
'Number each item within a section. '
'No markdown symbols of any kind. '
'Use realistic placeholder content.'
)
}]
)
print(response.choices[0].message.content)出力形式の自動判定
本番アプリケーションでは、出力環境をプログラムで判定し、適切な形式の指示を自動的に組み込むことができます。これにより、各プロンプトで手動指定する必要がなくなります。
これは、Web、モバイル、APIの利用者に同じコンテンツを提供するマルチチャネルAIシステムで一般的なパターンです。
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
def get_format_instruction(channel):
formats = {
'web': 'Use markdown formatting: headers, bold, bullet points, code blocks.',
'email': 'Plain text only. No markdown symbols. Use line breaks between sections.',
'sms': 'Plain text. Single paragraph. Max 160 characters.',
'voice': 'Plain text. No symbols. Natural spoken sentences only. Spell out numbers.',
'api': 'JSON output only. No prose.',
}
return formats.get(channel, 'Plain text only.')
def ask_with_channel(question, channel):
fmt = get_format_instruction(channel)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=100,
system=f'Format instruction: {fmt}',
messages=[{'role': 'user', 'content': question}]
)
return response.content[0].text
q = 'What are 3 benefits of regular code reviews?'
for ch in ['web', 'sms', 'voice']:
print(f'[{ch.upper()}]:')
print(ask_with_channel(q, ch)[:150])
print()理解度チェック
ある開発者が、プレーンテキストを保存するレガシーCRMに応答を送るカスタマーサービス用AIチャットボットを構築しています。AIは太字を示すための**や、箇条書きのための-を含む応答を出力し続けるため、CRMにはそれらが生の文字として表示されます。最も確実な修正方法は何でしょうか。
プレーンテキストと書式付き出力 — まとめ
適切な形式は、出力環境によって決まります。主なルールは次のとおりです。
- 環境で表示される場合はMarkdownを使用します。Web UI、Notion、GitHub、ドキュメントなどが該当します
- メール文面、SMS、音声、CRM、APIパイプラインにはプレーンテキストを使用します
- コードが出力を処理する場合はJSON/CSVを使用します
- 避けるものを明示してプレーンテキストをリクエストします。アスタリスク、シャープ記号、箇条書きは使用しないでください
- 一貫したアプリケーション動作のため、書式ルールはシステムメッセージで一度設定します
- プレーンテキストでも、大文字のラベル、改行、番号付きの文によって構造を持たせることができます
よくある質問
「プレーンテキストと書式付き出力の比較」レッスンは無料ですか?
はい。「プレーンテキストと書式付き出力の比較」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全4レッスンが含まれています。
「プレーンテキストと書式付き出力の比較」で何を学びますか?
整形されていないプレーンテキストと、リッチな Markdown 出力のどちらを依頼すべきかを学びます。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Prompt Engineeringを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「プレーンテキストと書式付き出力の比較」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Prompt Engineeringレッスンでコードを書いて実行できますか?
はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- リストと箇条書きを依頼する
- 表と構造化データを依頼する
- プロンプトでの Markdown 書式指定
- プレーンテキストと書式付き出力の比較