2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Bookmarkable Diff - ブックマークできる Diff ツールを作った

Last updated at Posted at 2020-03-01

URL

デモ

demo.gif

モチベーション

  • Mac でサクッと diff とりたい
  • diff 結果を他人に共有したい
  • でも diff 結果を外部に保存したくない

現状

  • 過去色々なデスクトップアプリを試したが、どれも肌に合わなかった。
    • WinMerge を Wine で起動し html 出力する日々にも疲れてしまった。
  • 簡単に diff できる Web サイトはいくつかある。
    • しかし、結果を他人に共有したいとなったら、どこもテキストを得体の知れないサーバー側に保存しようとする。
    • これはいただけない。

ないなら作ればいいじゃない。

大雑把な仕組みの説明

Diff

  • https://www.npmjs.com/package/diff
    • 強い。
  • 1 文字入力ごとに diff が実行されても無駄なので、 lodash/throttle で間引いている
    • だから、diff の反映が入力から少し遅れて見える。代わりに、入力はスムーズ。

URL を生成する時

  • 「Generatoe URL」ボタンをクリックする。
  • 左右のテキストと「Diff options」の設定値を json テキスト化し、圧縮する。
  • 圧縮テキストをクエリパラメータとして URL と連結。
  • それを URL 欄に反映する。
    • ?v=~ の部分がそれである。
    • 以下のサイトで展開を確認できる(Algorithm は lzma)
    • 暗号化はしていないため、このクエリパラメータを漏らしたらアウト。

URL を開く時

  • URL を開く。
  • クエリパラメータから圧縮文字列を読み取り、展開する。
  • 展開された json テキストの各値を、画面に反映する。

以上、全てクライアントサイド、ブラウザ上の JavaScript の処理で完結する。
完全にストレージレスな diff ツールである。
URL さえブックマークすれば、PC・スマホ、どこでも diff を確認することができる。

Bookmarkable Diff!
Write once, Diff anywhere!!

注意

  • 勉強のため Google Analytics を使っている。
  • 記録内容は、「画面遷移」と「ボタンのクリック」。
  • クエリパラメータは記録していない。
  • プライバシーに関わりうる情報であるクエリパラメータは、送信されないよう細心の注意を払って実装した。
  • 送信内容を確認したい場合は、「Google Analytics Debugger」を使って確認してみてほしい。
  • もし万が一、クエリパラメータを送信してるようなことがあれば、ご連絡いただけると幸いです。

あとどう頑張ってもダサいデザインにしかなりませんでした。助けて下さい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?