テキストを行単位で比較する差分チェッカー
行差分チェッカーは、元の文章と改訂後の文章を比較し、結果を読む順番で表示します。各行には追加、削除、変更なしの状態が付き、それぞれの版で該当する行番号も示されます。編集内容の確認、生成ファイルの検査、設定変更の検証、版ごとの違いの把握に利用できます。比較結果は常に一定で、ネットワークには接続せず、Windows、旧Mac、Unixの改行形式を同じ基準で扱います。
無料で実行
比較しやすい形で2つの版を用意します
以前の版を元のテキスト欄に、新しい版を改訂後のテキスト欄に入力してください。このチェッカーは行全体を比較するため、句読点、大文字と小文字、空白、そのほかの文字がすべて判定に影響します。1文字だけ変わった行も、削除された行と追加された行の組み合わせとして表示されます。これは、異なる2行を変更なしと誤って示さず、行単位の確認に忠実な結果を得るための仕様です。比較前に改行コードを統一するので、Windows、Unix、旧Macからコピーした文章でも、復帰文字の違いだけで不要な差分が生じません。文書内の空行にも意味があり、追加、削除、変更なしのいずれかとして扱われます。文書の末尾に改行がある場合は、最後にできる空行も比較対象です。内容の変更と無関係な書式変更を同時に大量に行うと、意味が似ていても差分が大きくなります。確認を分かりやすくするには、書式の一括変更と実質的な編集を分けることをおすすめします。
状態、行番号、集計の見方を確認します
結果は、元の版から改訂版への変化を再現できる順序で並びます。変更なしの項目には、同じ行が両方の文章に存在するため、旧版と新版の行番号が両方表示されます。削除された項目には旧版の行番号だけが、追加された項目には新版の行番号だけが付きます。片方の番号がないのは意図した仕様です。追加行は古い文書内に位置を持たず、削除行は新しい文書内に位置を持ちません。集計を見ると編集量をすぐに把握でき、詳細な行一覧から各合計の根拠を確認できます。同一を示す値が真になるのは、追加と削除がどちらもない場合だけです。同じ行が繰り返される文章では、数学的に正しい対応関係が複数存在することがあります。出力を安定させるため、変更なしの行数が同じになる候補では、固定の規則により削除を優先します。そのため、同じ入力からは必ず同じ順序の結果が得られ、テストや自動確認にも安心して利用できます。
レビューや自動処理で差分を安全に活用します
行単位の差分は、ソースファイル、設定、リリースノート、一覧、規程、指示文、書き出した記録など、構造が重要な文章に適しています。人が確認する場合は、まず集計を見てから、削除行と追加行の組み合わせを周囲の文脈とともに調べてください。自動処理では、同一を示す値を使って素早く判定し、監査記録や説明用レポートが必要なときは詳細項目も保存できます。このチェッカーは編集の正しさを判断せず、競合する変更の統合や意味上の類似度計算も行いません。正確な文字列上の関係を提示し、利用者または別の決定的な規則が判断できるようにします。予測可能な実行を保つため両方の入力には上限があり、比較は外部サービスへ接続せずメモリ内だけで完了します。APIの利用料金は1回につき$0.002です。多数のファイルを処理するときは1組ずつ比較し、ファイル名や版の識別子はご自身の処理内で保持してください。この機能が受け取るのは文章であり、リポジトリのメタデータではありません。機密情報については、送信に利用する経路の保存・転送要件に従ってください。
活用例
設定変更を確認する
以前の設定と提案された設定を比較し、更新によって追加または削除された行を正確に特定できます。
生成結果を検証する
新しく生成したマニフェスト、レポート、コード断片を、既知の期待版と自動処理内で照合できます。
文書の改訂内容を説明する
規程、リリースノート、手順書など、行で構成された文書について、変更記録を構造化して作成できます。
よくある質問
各状態は何を表しますか?
変更なしは、選択された対応関係で両方の版に同じ行があることを示します。削除は元の版だけに、追加は改訂版だけに存在する行です。
変更された行の中の単語も比較しますか?
いいえ。意図的に行単位で比較します。変更行を削除と追加として示すことで、正確で曖昧さのない記録を保ちます。
改行形式の違いは変更として扱われますか?
いいえ。Windows、Unix、旧Macの改行形式は、比較前に同じ形式へ統一されます。
同じ行が繰り返される場合はどう対応付けますか?
最長の共通行列を維持し、同等の候補がある場合は削除を優先する安定した規則を適用します。
自動テストで結果を利用できますか?
はい。ネットワーク、乱数、時刻依存の値を使わないため、同じ入力からは常に同じJSONが得られます。
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。ブラウザ版では同じ決定的な比較をローカルで実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/diff-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"before_text":"Apples\nBananas\nCherries","after_text":"Apples\nBlueberries\nCherries"}'const res = await fetch("https://api.kit.forhosting.com/str/diff-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"before_text": "Apples\nBananas\nCherries",
"after_text": "Apples\nBlueberries\nCherries"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/diff-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"before_text": "Apples\nBananas\nCherries",
"after_text": "Apples\nBlueberries\nCherries"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/diff-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"before_text":"Apples\\nBananas\\nCherries","after_text":"Apples\\nBlueberries\\nCherries"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"before_text":"Apples\nBananas\nCherries","after_text":"Apples\nBlueberries\nCherries"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/diff-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"before_text": "Apples\nBananas\nCherries",
"after_text": "Apples\nBlueberries\nCherries"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.diff_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars_per_text | 200000 |
max_lines_per_text | 1000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |