写真をアップロードしないツールという選択
写真を扱うWebツールの多くは、画像を一度サーバーに送信し、処理した結果を送り返す仕組みになっています。フィルター加工、背景除去、画質のアップスケールなど、高度な処理を行うツールほどこの傾向が強くなります。サーバー側の計算資源を使えるので、複雑な処理を高速に行えるのが利点です。
一方で「かんたんコラージュ」は、あえてこの仕組みを採用しませんでした。選んだ写真を並べて1枚に合成する処理は、すべてブラウザの中だけで完結します。この記事では、その設計を選んだ理由と、実際にどういう仕組みで動いているのかを説明します。
ブラウザの中だけで完結するとはどういうことか
コラージュ作成の核になっているのは、ブラウザに標準で搭載されている「Canvas」という描画機能です。写真を選ぶと、その画像データはブラウザのメモリ上に読み込まれ、選んだレイアウトやフレームに合わせてCanvas上に描画されます。位置の入れ替えや比率の変更も、すべてこのCanvasの再描画で行われます。
「写真に保存」を押したときも、Canvasに描かれた内容をそのまま画像データとして書き出し、端末の写真アプリに渡しているだけです。この一連の流れの中に、写真データを外部のサーバーへ送信する処理は一切含まれていません。ネットワーク通信が発生するのは、最初にこのページ自体(HTMLやJavaScriptのファイル)を読み込むときだけで、そこに写真データは含まれません。
サーバーに送らないことのメリット
この設計には、いくつかの実務的なメリットがあります。
- 写真が外部に残らない:サーバーにアップロードしない以上、運営者側にも写真データが保存されません。旅行の記念写真や家族の写真など、他人に見られたくない画像を扱う場面でも安心して使えます。
- 通信環境に左右されにくい:アップロード・ダウンロードの往復が発生しないため、電波の弱い場所でも処理が止まりにくく、待ち時間も短くなります。
- 個人情報の取り扱いがシンプルになる:写真自体を保持・管理する必要がないため、万が一のサーバー障害や不正アクセスがあっても、写真データが漏えいするリスクがそもそも存在しません。
トレードオフも正直に書いておく
もちろん良いことばかりではありません。サーバー側で処理をしない分、次のような制約があります。
- AIによる高度な自動補正や背景除去のような、大きな計算資源を必要とする処理には向きません。
- 作成したコラージュをクラウド上に保存して複数端末で共有する、といった機能は原則として作れません(実現するなら別途サーバー保存の同意が必要になります)。
- 処理速度は端末の性能に依存します。古い端末では、大きな写真を複数枚扱うと動作が重くなることがあります。
それでも、旅行や日常のスナップ写真を2〜4枚まとめてSNS用に1枚にする、という用途であれば、サーバーを介さない処理で十分に完結できると考え、この設計を選びました。
撮影日時や位置情報(EXIF)も同じ考え方で扱っている
スマートフォンで撮った写真には、撮影日時・カメラの機種・絞りやシャッタースピード、場合によっては撮影場所の緯度経度(GPS情報)までもが「EXIF」という形式で写真ファイルの中に埋め込まれています。位置情報は特に扱いに気をつけたい情報のひとつです。
「かんたんコラージュ」で情報帯にカメラ設定や場所を表示する機能も、この写真内蔵のEXIFデータを読み取って使っています。ここでも処理はサーバーを介さず、ブラウザの中で写真ファイルのバイナリを直接解析する形で行っています。GPS座標を情報帯に入れられる機能もありますが、これはあくまで利用者が「入れる」を選んだ場合にのみキャンバスに描き込まれる仕組みで、自動的に他者へ送信されたり、運営者側に通知されたりすることはありません。ブラウザのタブを閉じれば、読み取ったEXIF情報もその場でメモリから消えます。
言い換えると、「写真データを送らない」という設計方針は、写真そのものだけでなく、そこに付随する撮影日時や位置情報のような、意図せず流出すると困る種類のメタデータにも一貫して適用されています。
実のところ、開発の過程でクラウド保存の機能を検討したことは一度もありません。コラージュ作成は「今すぐ写真をまとめて、その場で保存して終わり」という一度きりの作業がほとんどで、あとからサーバー側に写真を残しておく必要性を感じなかったためです。サーバーに保存する機能をあえて作らなかったのは、プライバシーへの配慮という以前に、まず「その機能自体が不要だ」という判断があり、一時的な利用にしか使わないものをサーバーに預かる理由がない、という単純な結論に行き着いた結果です。
もともとこのツールはPythonのスクリプトとして書き始めたもので、写真を並べてコラージュにする処理自体はPythonだけでも完結していました。それをわざわざブラウザで動くWebアプリとして作り直したのは、UIも含めて作り込んだほうが自分自身楽しめると感じたからで、機能を追加したかったわけではありません。結果として、処理を全部ブラウザの中で完結させる今の構成は、最初から狙って選んだというより、PythonのスクリプトをそのままWeb上で再現した自然な延長線でした。
「写真を預からない」という制約は、裏を返せば「写真を預かる責任を負わない」という設計でもあります。派手な自動加工機能はなくても、日常的にコラージュを作りたいという用途には、この割り切りが向いていると考えています。