コンテンツにスキップ

045. PATCH(データの部分更新:必要な箇所だけをスマートに直す)

原理:「職人のような手直し」の美学

PATCHリクエストの精密さ

「PATCH(パッチ)」は、HTTPリクエストの中でも最も効率的で、繊細な役割を果たします。 PUTが「古いものを捨てて、新しいものでまるごと置き換える(全体更新)」だったのに対し、PATCHは「今あるものの、ここだけをちょっと書き換えてほしい(部分更新)」という、ピンポイントな要求のために使われます。

洋服に「パッチ(当て布)」を当てるように、壊れたり古くなったりした一部分だけを修理する。そんなイメージです。 PUTと違い、PATCHには必ずしも「等巾性」が保証されているわけではありませんが、通信量を劇的に減らし、サーバー側の処理も「その項目だけ」に集中させることができるため、現代の高速なWebアプリ開発(特にモバイル環境)では非常に重宝されます。

なぜPATCHが必要なのか?

例えば、何百項目もあるユーザープロフィールの中で、「一言コメント」だけを更新したい場合を考えてみてください。 - PUTの場合: ユーザーの氏名、年齢、住所、家族構成……すべてをもう一度サーバーに送り直さなければなりません。 - PATCHの場合: 「一言コメント」の内容だけをサーバーに届けます。 どちらがスマートで、どちらがミス(他人が同時に書き換えた情報を上書きしてしまう等の事故)が少ないかは一目瞭然ですね。


実践:最小限の通信で「即時反映」を体験する

1. インラインでのステータス変更

タスクの「優先度」だけを、リストの中でポチポチと切り替えるような例です。

<!-- task-item.html -->
<div id="item-priority">
    <span>現在の優先度:通常</span>
    <!-- 
      hx-patch: 優先度だけを変更する
      hx-vals: 「新しい優先度は'高'ですよ」という小さなデータを添える
    -->
    <button hx-patch="/api/tasks/99" 
            hx-vals='{"priority": "high"}'
            hx-target="#item-priority">
        「高」にする
    </button>
</div>

2. インクリメンタルな保存(自動保存)

入力欄からフォーカスが外れた瞬間に、その一項目だけをこっそり保存する「オートセーブ」もPATCHの得意分野です。

<input type="text" name="bio" value="自己紹介を書いています..."
       hx-patch="/user/settings" 
       hx-trigger="blur changed" 
       hx-target="#save-msg">
<span id="save-msg"></span>

比較:PUT(全体置換) vs PATCH(部分修正)

PUT

  • 範囲: 全部。
  • 安心感: 毎回新しい状態に「リセット」されるため、管理が楽。
  • 不便: 巨大なデータを送るのが重い。

PATCH

  • 範囲: 一部。
  • 安心感: 他のデータに触らないため、同時編集などの競合に強い。
  • 不便: サーバー側で「どの項目が送られてきたか」を判断するコードが少しだけ複雑になる。

まとめ:初心者のための「洗練」の極意

PATCHを意識的に選択できるようになったら、あなたはもう「単に動くものを作る」段階から、Web通信の効率を考える「玄人」の仲間入りです。

  • 大げさにしない: 小さな変更には、小さなPATCHリクエストを。これがWebアプリの品質(UX)に直結します。
  • サーバーとの密な連携: サーバー側も「PATCHが来たら、特定の項目だけをSQLなどで更新する」という専用の窓口を用意してあげましょう。
  • ユーザーの負担を減らす: 通信量が少なければ、それだけレスポンスも速くなります。サクサク動く心地よさは、この「引き算」から生まれます。

必要な分だけ、必要なときに。hx-patch という精密なツールを使いこなして、無駄のない、美しくスマートなWebアプリを完成させてください。第3章の序盤を駆け抜けた次は、リクエストの中に情報を忍ばせる「URLパラメータ(046. Query Parameters)」の世界へ進みましょう。