テキストを行単位で比較し、追加・削除を確認
すべての行を目視で確認せずに、2つのテキスト版を比較できます。この決定論的なツールは、一致する行を元の順序に沿って整列し、追加、削除、変更なしのいずれかに分類します。設定ファイル、ログ、一覧、原稿、生成結果など、改行に意味がある資料に適しています。構造化された応答には利用可能な行番号と簡潔な集計が含まれるため、人による確認にも自動処理にも容易にお使いいただけます。
無料で実行
有用な比較になるよう2つの版をご用意ください
基準となる版をoriginalフィールドに、確認する版をrevisedフィールドに入力してください。各改行を意味のある境界として扱うため、重要な書式はそのまま保持してください。同じ文でも別の行へ移動すると、削除と追加として表示されます。Windowsおよび旧Mac形式の改行コードは比較前に正規化されるため、OSの違いだけで同一内容が差分になることはありません。一方、空白、大文字と小文字、句読点、空行は区別されます。この厳密な動作は、設定、生成レポート、在庫一覧などに役立ちます。すべての行の追加または削除を示す場合は、片方だけ空にできます。両方が空の場合は入力エラーになります。配列やオブジェクトではなく文字列を直接お送りください。整列の前に内容を切り詰めたり、書き換えたり、解釈したりすることはありません。
行順に並んだ結果をご確認ください
応答には、順序付きのlines配列と集計が含まれます。各項目には状態と行の正確な文字列が入ります。変更なしの項目は両方の版に存在するため、original_lineとrevised_lineを含みます。削除にはoriginal_lineのみ、追加にはrevised_lineのみが含まれます。位置は1から始まり、元のテキストに対応するため、確認画面へそのまま表示できます。行が置き換えられた場合は、通常、削除と追加として示され、置換専用の状態はありません。集計では追加、削除、変更なしの件数を確認できます。整列には最長共通部分列を使用し、共有行の順序を保ちながら、小さな挿入によって文書全体が変更扱いになることを防ぎます。同じ行が繰り返されると複数の有効な整列があり得ますが、削除を優先する一定の規則で同点を解決するため、同じ入力からは常に同じJSONが得られます。
構造化された差分を確認作業や自動化にご活用ください
行単位の比較は、別のシステムが結果に応じて処理するときに特に有効です。デプロイ工程では、想定した設定と実際の設定を比較し、保護対象の項目が削除された場合に公開を停止して、結果を証跡として保存できます。編集システムでは、変更なしの行を文脈として残しながら、追加と削除だけを強調できます。監視処理では連続するスナップショットを比較し、まず集計を調べ、変更がなければ通知を省略できます。この機能は決定論的に動作し、ネットワークや言語モデルを使用せず、内容を言い換えません。APIリクエストは$0.002で、ページ上でも同じ純粋な比較ロジックをブラウザー内で実行できます。これは意味解析ではなく、意図的に行単位の比較を行うものです。変更理由の説明、空白の無視、移動ブロックの判定、変更行内の単語比較は行いません。意味のある改行を使用し、返された位置と状態を強調表示、監査、テスト、通知にお役立てください。
活用例
設定変更をご確認いただけます
提案された設定と配備済みの版を比較し、追加または削除された行を正確に表示できます。
生成結果をご検証いただけます
新しいレポートやスナップショットを既知の結果と比較し、集計から予期しない変更を検出できます。
編集レビューを構築できます
行で構成された2つの原稿を、画面上で信頼できる位置とともに強調できる構造化項目へ変換します。
よくある質問
比較結果には何が含まれますか?
追加、削除、変更なしの行を順に並べた配列と、各状態の件数が返されます。
変更された行はどのように表されますか?
以前の行の削除と新しい行の追加として表されます。
空白も違いとして扱われますか?
はい。空白と空行は保持して比較しますが、復帰文字を含む改行コードは正規化します。
片方の入力を空にできますか?
はい。空でないテキスト全体が追加または削除になります。両方が空の場合のみエラーになります。
APIリクエストの料金はいくらですか?
各APIリクエストは$0.002です。ブラウザーツールでは同じ決定論的な比較をローカルで実行します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/text/diff-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"original":"alpha\nbeta\ngamma","revised":"alpha\nbeta updated\ngamma"}'const res = await fetch("https://api.kit.forhosting.com/text/diff-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/diff-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/diff-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"original":"alpha\\nbeta\\ngamma","revised":"alpha\\nbeta updated\\ngamma"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"original":"alpha\nbeta\ngamma","revised":"alpha\nbeta updated\ngamma"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/diff-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.diff_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_tokens | 20000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |