@ka2n

Technology and beer

GitHubの通知をまとめて開くブラウザ拡張機能を作った

https://github.com/notifications に出てくる通知をまとめてタブで開いて消化していくのが日課なんだけど、それを効率化できるブラウザ拡張機能を作った。

通知ページの右上にOpen Allと書いたボタンを追加します。一応新旧UIで動くようにしてある。もうすぐ新UIがデフォルトになって旧UIは無くなる雰囲気が出ている。

Image from Gyazo

また、新UIではチェックボックスがあるので、チェックをした通知のみまとめて開くボタンも追加した。

Image from Gyazo

インストールは下記からです。

chrome.google.com addons.mozilla.org

ソースコードこちら

CloudFlare Workersを使って無料プランでも無理矢理キャッシュの出し分けを実現する

originのVaryヘッダーを元にキャッシュを制御するべきだけど、あらかじめキャッシュを分けたい条件が判別できるなら、以下の方法でURLを書き換えてしまえばOK.

import { createHash } from 'crypto'

export async function handleRequest(request: Request): Promise<Response> {
  const vary = request.headers.get('accept-language') || ''
  const varyHash = createHash('md5')
    .update(vary)
    .digest('hex')
  
  let url = new URL(request.url)
  url.searchParams.append('_vary', varyHash)
  request = new Request(url.toString(), request as RequestInit)

  return fetch(request, {
    cf: {
      cacheEverything: true,
    }
  })
}

まさに貧者のCDN

now.shとFastlyを組み合せる場合の設定

now.shを好んで使っているが、CDNレイヤーの挙動が満足いかない事がありFastlyを試してみている。

ドキュメントによると、now.sh自体のCDNをバイパスするにはいくつか条件があるみたいだけど、リクエストパラメーターに?_now_no_cache=1が付与されていれば良い模様。

Image from Gyazo

レスポンスヘッダーにx-now-cache: BYPASSが入るようになり、Cache-Controlヘッダーも勝手に修正されなくなった。

これをVCLで実現するには以下のようなVCL Snippetを追加すればそれでOKらしい。

set req.url = querystring.add(req.url, "_now_no_cache", "1");

簡単にできて面白い。