開発のきっかけ:日常に潜む「うっかり」と「広告」の壁
今回このアプリを開発するに至ったのは、私の家庭内で起きた3つの切実な問題がきっかけでした。
- 高齢の両親の「画面放置」リスク 高齢の両親のスマホに、家族や孫の写真・動画を入れてあげていたのですが、両親が写真を表示したまま、うっかり画面をロックせずに端末をその辺に放置してしまうことが度々ありました。悪気はないのですが、誰の目に触れるか分からず、セキュリティ的に少しハラハラする瞬間でした。
- 子供のゲームによる「誤操作」リスク また、遊びに来た子供(孫)が、親の端末を借りて友達と一緒にゲームをすることがあります。その際、子供たちが意図しない誤操作によって、プライベートな写真フォルダを開いてしまったり、見られたくない写真が表示されてしまったりするリスクもありました。
- 既存アプリの「広告多すぎ」問題 「それなら、鍵付きのフォルダに保存できる市販のアプリを入れれば解決するのでは?」と思い、同様の機能を持ったアプリをいくつか試してみました。しかし、どれも画面中に広告が溢れており、動画を見ようとすると全画面広告が強制挿入されるものばかり。操作に慣れていない高齢の両親にとっては、広告が出た後に「どこを押して閉じればいいのか」が難しく、結局使いこなせませんでした。
「ネットに繋がらず、広告も一切出ない。操作がこれ以上ないくらいシンプルで、高齢者でも迷わず安全に家族の写真を守れる専用の場所が必要だ」
そう思い、既存のアプリに頼るのをやめて、自分でビルドすることを決意しました。
既存の「ロック機能」との決定的な違いと技術的アプローチ
1. アプリ固有フォルダ(ローカル完結)によるクラウド流出の遮断
Googleフォトは強力ですが、根本は「クラウドへのバックアップ」をメインとした思想のアプリです。設定の誤操作や、システムの気まぐれな同期仕様によって、「隠したはずの写真がうっかりネット側に流出してしまうかもしれない」という心理的ストレスが常に付きまといます。
『フォト・守』は、内部ストレージのアプリ固有領域(Context.filesDirなど)のみにデータを保存する完全ローカル完結設計にしました。Androidの仕様上、このアプリ固有領域(Context.filesDir)を選んだ場合、「アプリをアンインストールすると、保存していたデータも一緒に消去される」という挙動になります。
開発にあたって、この「アプリ消去でデータも消える仕様」をどうするかは非常に悩んだポイントでした。しかし、このアプリのユースケースを徹底的に整理した結果、あえてこの仕様のまま「割り切る」という決断をしました。
なぜなら、このアプリは大事な思い出の「マスターデータを恒久的にバックアップする場所」ではないからです。元データは自宅のPCや別の安全なストレージにしっかり保管されていることが前提であり、このアプリの役割は「あくまでも、持ち出し用の端末(両親が触ったり、子供がゲームで遊んだりするスマホ)で、見せたい動画や写真を安全に再生する」という一点に特化しているからです。
「消えるということは、端末を紛失したり、いざという時にアプリを消したりすれば、痕跡をこの世から完全に消し去ることができる」
そう割り切ったことで、余計なデータ移行機能やバックアップ機能を削ぎ落とし、極限までシンプルで迷わない、本来の目的にまっすぐなアプリに仕上げることができました。
2. 「場所を隠す」のではなく「ファイル自体をAES暗号化」する
多くの写真隠しアプリやシステムのロック機能は、単にファイルの拡張子を変えたり、特定のシステムフォルダに移動させて「見えなくしているだけ(アクセス制限の蓋をしているだけ)」のケースが多々あります。
これだと、万が一スマホをPCにUSB接続され、特殊なファイルエクスプローラーなどで強引にストレージ内を覗かれた場合、中身を引っこ抜かれてしまう脆弱性が残ります。
『フォト・守』では、データをアプリ固有フォルダに格納する際、ファイル自体をAES等の暗号化アルゴリズムでガチガチにロックしています。 AndroidのOS仕様によってPC接続時でもこの領域は不可視ですが、仮にルート権限等でファイルを盗み出されたとしても、中身はただの壊れたデータ(暗号文字列)にしか見えません。PCの大画面で写真や動画を覗き見られるリスクを完全にゼロにしました。
3. 暗号化したままスムーズに画像プレビュー・動画再生を実現する
ここが開発において、AI(Copilot)と一番試行錯誤した技術的ハイライトです。
ファイルを暗号化すること自体は簡単ですが、それをユーザーが「見たい」と思った時に、一瞬で複合してアプリ内で画像プレビューを表示したり、重い動画ファイルをカクつかずに再生したりするのは至難の業です。
動画をいちいち丸ごと復号して一時ファイルに書き出していては、ストレージに痕跡が残りますし、メモリ不足でアプリが落ちてしまいます。そこで、メモリ上でリアルタイムに復号ストリームを流し込みながら、アプリ内だけで完結してサクサク再生できる仕組みを作り込みました。
初のGoogle Play掲載と、広告に対する「実験」と「配慮」
実は、今回開発した『フォト・守』が、私にとって初めてのGoogle Playストアへの掲載(リリース)となります。
アプリを実際にストアへ公開するまでの一連の流れや、ライブラリの組み込みを体系的に学ぶ「勉強」の意味もあり、本アプリでは一部、広告実装の実験も行いました。
既存のアプリのように「全画面を覆い尽くす広告」や「動画を見ようとした瞬間に強制挿入される広告」は、自分がユーザーの立場なら絶対に許せない仕様です。特に高齢の両親が使うことを考えると、迷子の原因にしかなりません。
そこで、広告を表示させる場所は「ファイル一覧画面の最下部(小さなバナー広告)」のみに徹底して限定しました。
アプリの本来の目的である「写真のプレビュー表示」や「動画再生」を行っている最中は、広告を一切非表示にしています。大切な思い出の空間を、チラチラ動く広告で邪魔されることはありません。
📥 アプリ「フォト・守」をPlayストアでチェックする
・価格:無料
・仕様:完全ローカル・通信なし
・広告:ファイル一覧下部のみ(写真・動画再生中はなし)
👉 Google Play ストアでダウンロード
🛠️ 次回予告:開発者向けの泥臭い技術的な裏話
無事に形になった「フォト・守」ですが、バックグラウンドでのAES暗号ストリーミングや、Android特有の挙動制御など、実装の裏側はAI(Copilot)と共にバグと戦う泥臭い試行錯誤の連続でした。
- 全復号から、一瞬で再生が始まる「一部復号ストリーミング」への大転換
- 他アプリでも使い回せるように「画像と動画のAdapter」を完全分離した設計
- 後から「パスワード変更機能」を追加したことによる、暗号化階層の全面リファクタリング
- 静止画スワイプ時の「前の画面の拡大率・座標情報」が残る罠との攻防
- 一番の苦労:バックグラウンド移行時に「タスクプレビュー」をクリアし、パスワードを即座に破棄するセキュリティ制御
- OSの「戻る機能(左スワイプ vs 下部3ボタン)」による機種ごとの挙動差の吸収
- 一覧画面での「サムネイルのリアルタイム復号」を滑らかにする重い処理の非同期化
などなど、アセンブラやC言語を触ってきた目線からも「Android開発ならではの罠」が盛りだくさんでした。





コメント