書き込みを何度でもやり直せる、非破壊編集のスクリーンショットツール

書き込みを何度でもやり直せる、非破壊編集のスクリーンショットツール

撮った画像に何度でも描き直しができる、「下書き帳つき」のスクリーンショットアプリを Windows 用に自作しました。
矢印や文字を書き込んで保存したあとでも、書き込む前の状態や途中の状態に、いつでも戻せます。
この記事では、どんな困りごとがあって、それをどう解消したのかをご紹介します。

書き込んで保存したら、もう直せない

手順書を作るとき、問い合わせに画面つきで答えるとき、報告書に画面を貼るとき。スクリーンショットに矢印を足したり、枠で囲んだり、短い説明を書き込んだりする作業は、多くの職場で日常的に発生します。

困るのは、そのあとです。「この矢印、ひとつ下の項目を指してほしい」「ここの文言は伏せておいてほしい」と言われたとき、書き込みが画像に焼き付いていると、手元の画像はもう直せません。撮り直すか、元画像を探し出して最初から描き直すことになります。

私自身、無料のスクリーンショットツール「Screenpresso」を長く使っていました。特に困っていないつもりでしたが、改めて振り返ると、不満はいくつもありました。

  • 無料版でも、有料プランへの案内が定期的に表示される
  • 保存できる画像の数に上限があるようだった
  • 編集して保存した画像は、あとから再編集できない
  • Windows 11 で他のショートカットとぶつかり、キー操作からの範囲選択がスムーズにいかなくなった

なかでも一番効いていたのが、3つ目の「再編集できない」でした。

友人の「ある。」から作り始めた

作るきっかけは、高校時代の友人との会話です。クライアントワークが一段落した時期に「欲しいアプリってある?」と聞いてみたところ、返ってきたのは「ある。」の一言。それがスクリーンショットアプリでした。

それなら、自分の不満をすべて解消したアプリを作って、友人にも渡そうと考えました。無償で渡したのには理由があります。自分のためだけに作ると、どうしても作り手の思い込みで使い勝手を決めてしまいます。普段から使う人の目を借りれば、客観的な視点を保てますし、的確なフィードバックで UI や使い勝手を磨けると考えました。

開発は、ショートカットキーからの撮影、ウィンドウを指定しての撮影、撮った画像の編集、編集履歴の保存、という順に進めました。

解決策:書き込みを「版」として残す

このアプリの画像エディタでは、矢印・四角や丸の囲み・文字・連番の番号札・ペン・蛍光ペン・モザイク・画像の貼り付けといった書き込みができます。

特徴は、書き込みを画像に焼き付けないことです。書き込みを足したり動かしたりするたびに、その時点の状態が「版」として自動で記録されます。画面の右側にある履歴の一覧には v1、v2、v3……と版が並び、クリックすればその時点の状態に戻ります。直前の操作を取り消す Ctrl+Z(元に戻す)と Ctrl+Y(やり直し)も使えます。

画像エディタ。書き込みのたびに記録された版が、右側の履歴に v1〜v6 として並ぶ

履歴から v2 を選ぶと、v3 以降の書き込みが消えて v2 の状態に戻る

元の画像ファイルは一切書き換えません。書き込みを入れた画像が必要なときは、クリップボードへコピーするか、別の名前を付けて書き出します。ですから、送った後に修正を頼まれても、エディタで画像を開き直して矢印を1本動かし、書き出し直すだけで済みます。撮り直しも、最初からの描き直しも要りません。

仕組みとしては、書き込みを「絵」ではなく「データ」として持っています。矢印なら始点と終点、色、太さ。文字なら位置と内容とフォントサイズ。こうした情報を、パソコンの中に置く小さなデータベース(SQLite。1つのファイルで動くデータベースです)に、版番号を付けて追記していきます。実際のテーブル定義は次のとおりです。

CREATE TABLE IF NOT EXISTS revisions (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    project_id INTEGER NOT NULL,
    version_number INTEGER NOT NULL,
    shapes_json TEXT NOT NULL,
    description TEXT DEFAULT '',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
);

shapes_json に、その版の書き込みが丸ごと入ります。画像を開くと最新の版を読み込み、元画像の上に書き込みを描き直して表示します。画像そのものを何枚も保存するのではなく、書き込みの情報だけを積み重ねるので、版がいくら増えても元画像は1枚のままです。

私の知る限り、Screenpresso には編集履歴を残して過去の状態に戻る機能はありませんでした。この「版で残す」仕組みは、今回いちばん力を入れたところです。

撮ったら、そのまま編集へ

撮影から編集までの流れも、つなげてあります。

ショートカットキーで撮影すると、画面の右下に、撮った画像の縮小表示つきの小さな通知が出ます。そこには「画像エディタで編集」「保存フォルダを開く」の2つのボタンがあり、矢印を入れたいならエディタへ、ファイルを確認したいならフォルダへ、その場で選べます。通知は8秒ほどで消えますが、マウスを乗せている間は消えません。

撮影直後に画面右下に出る通知。「画像エディタで編集」「保存フォルダを開く」の2つのボタンがある

エディタで書き込みを終えたら、Enter キーひとつでクリップボードへコピーしてエディタを閉じます。そのままチャットやメールに貼り付ければ完了です。

撮影と編集をひと続きにする発想は、Screenpresso に倣ったものです。ただ、友人にとっては初めての体験だったようで、いちばん喜んでくれたのがこの部分でした。

自分の道具だから、余計な制約がない

自分で作ったアプリなので、有料プランへの案内も、保存枚数の上限もありません。撮った画像は JPG と PNG の2形式で、決まったフォルダに日時の名前で保存され続けます。

撮影のショートカットキー、保存先のフォルダ、JPG の画質などは、設定ファイルを書き換えるだけで変更できます。Screenpresso で困った「Windows 11 の他のショートカットとぶつかる」問題も、ぶつからないキーに変えれば解消します。キーがほかのアプリと競合して登録できなかった場合は、パソコン右下のタスクトレイのメニューにその旨が表示されるので、原因にもすぐ気付けます。

結果どう変わったか

友人は自宅でも職場でも、このアプリを毎日のように使ってくれています。

そして私自身も、Screenpresso を完全にアンインストールしました。仕事でも私用でも、今はこの自作アプリだけで撮影と書き込みをしています。

作ってみて分かったのは、毎日使う道具の小さな不満は、自分では「特に困っていない」と思い込みやすいということです。友人に聞かれて改めて振り返るまで、私は再編集できないことを当たり前だと受け入れていました。

日々の業務の中で「この道具のここだけが不便」と感じているものがあれば、それは自分専用の道具を作る良いきっかけになります。今回のような、自分や職場向けの小さな専用ツールの開発も承っています。似たようなお困りごとがあれば、お気軽にお問い合わせください。


使用技術: Python, PyQt6, tkinter, Pillow, pystray, mss, SQLite, Win32 API, Windows

同様の開発をご希望ですか?

この事例と同様の開発やカスタマイズについて、
お気軽にご相談ください。

お問い合わせ