Linux で Cloudflare R2 などを使って Gyazo っぽい仕組みを作った

読了まで:約2分



私は大分前から Gyazo の有償プランを契約していたのですが、 近年はまったく使っていなかった上に、

これ今の使い方だと Gyazo を使う意味ってなくね……?

気がついてしまい、経費削減の準備も兼ねて Linux ローカルで似た様な仕組みを作れないか、思ってやってみたら出来た、と言うのが今回の話です。

今回再現した Gyazo っぽい仕組みとは?

大まかな流れとしては下記の様な仕組みです:

  1. いくつかの方法でスクリーンショットなどを取る
  2. それを独自ドメインを割当てた Cloudflare R2 に upload する
  3. その upload した画像ファイルをブラウザで開く

どうやって再現したの?

具体的には下記のスクリプトを Openbox の Keybinding から呼び出す形にしました。

おこのスクリプトを実行するためには、

  • coreutils + xdg-utils + bash
  • s5cmd(Cloudflare R2 へのアップロードに利用)
  • op(1passwod の cli)
  • maim + xdotool(screenshot などを撮るために利用)

言った辺りのコマンドが必要で、Cloudflare R2 の Credentials を隠すために 1password を利用しているため、 当然 1password の契約が必要となってきます。

とは言え 1password 周りは他の方法でもたぶん代用可能なので、その辺りは各自工夫してみると良いかと思います

#!/usr/bin/env bash

set -euo pipefail

exec 2>&1 >$HOME/.cache/r2yazo.log

export S3_ENDPOINT_URL="op://Application/R2Yazo/S3_ENDPOINT_URL"
export AWS_ACCESS_KEY_ID="op://Application/R2Yazo/AWS_ACCESS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="op://Application/R2Yazo/AWS_SECRET_ACCESS_KEY"

export R2YAZO_URL="https://zo.kalaclista.com"
export R2YAZO_DIR="${HOME}/Pictures/R2Yazo"

filename() {
  echo $(date +%Y/%m/%d/%H-%M-%S).webp
  return 0
}

push-to-r2() {
  op run -- bash -c 'env s5cmd --endpoint-url $S3_ENDPOINT_URL sync --delete ${R2YAZO_DIR}/* s3://kalaclista-r2yazo/'
}

crop() {
  maim -u -s -f webp "${1}"
}

capture() {
  local wid="$(xdotool selectwindow)"
  maim -u -f webp -i $wid "${1}"
}

screenshot() {
  maim -u -f webp "${1}"
}

main() {
  local action=$1 fn="$(filename)"
  local fp="${R2YAZO_DIR}/${fn}"

  mkdir -p "$(dirname "${fp}")"

  case $action in
    capture) capture "${fp}" ;;
    crop) crop "${fp}" ;;
    screenshot) screenshot "${fp}" ;;
    push) push-to-r2 ; exit 0 ;;
    *) exit 1 ;;
  esac

  push-to-r2 && xdg-open "${R2YAZO_URL}/${fn}"
}

main "${@:-}"

作ってみた感想

なんとも言えない感じで Gyazo っぽいです。

ただ Gyazo っぽいとは言え Linux でしか動かせない上、GIF アニメーションなどは作れないため、 その辺りは別の方法を取る必要がある様に感じます。

また Gyazo っぽい動きを最低限再現するだけの仕組みなので、当然 Web インンターフェースなどはありません。 特に Gyazo に付いている画像加工やパスワードを付ける、と言う仕組みも当然有りません。

そのため、

とりあえずスクリーンショートを取ってサクっとアップロードする

言うぐらいにしか使えないため、まぁ本当に役に立つかどうかは人次第なところでしょう。

ちなみに私は Gyazo をスクリーンショットを上げるぐらいの用途にしか使ってなかったので、ぶんこれだけで事足りそうな予感がします……。

まぁ Gyazo が必要になればまたその時に契約すれば良いだけなので、当面はこれでしのげると感じています。はい。

以上

……と言う様な仕組みを今日一日で組み上げていたのですが、 まぁ Gyazo っぽい動き自体は Linux の cli toolchain で出来上がりました。

とは言え Gyazo が素晴しいのはこれ + αの部分で、Windows や macOS での対応や、 アップロードした画像の編集、パスワードを付与して閲覧者を制限したりして云々……、言った辺りなので、それらの付加価値を得たいのであれば、是非とも課金して Gyazo を利用すると良いと思います。


アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。うつ病を抱えつつアルバイト中。

今は業務や趣味でプログラミングをして生活しています。