0Pricing
AI Prompt Engineering · レッスン

プレーンテキストと書式付き出力の比較

整形されていないプレーンテキストと、リッチな 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)

書式を決めるためのフレームワーク

出力形式をリクエストする前に、次の簡単な判断基準を使用してください。

  1. 出力先はどこですか。 Web UI、メール、ターミナル、音声、データベース
  2. その環境はMarkdownを表示しますか。 はい → Markdownを使用します。いいえ → プレーンテキストにします。
  3. 人間が読みますか。 はい → スキャンしやすい構成にします。いいえ → 解析に適した形式にします。
  4. コードが処理しますか。 はい → 文章ではなくJSONまたはCSVにします。
  5. 音声で読み上げますか。 はい → 略語を使わない、音声に適したプレーンテキストにします。
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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. リストと箇条書きを依頼する
  2. 表と構造化データを依頼する
  3. プロンプトでの Markdown 書式指定
  4. プレーンテキストと書式付き出力の比較
← AI Prompt Engineeringに戻る