Electron × SQLiteで最強のクリップボードアプリを実現!
前回はlocalStorage
を使ったシンプルなクリップボード履歴アプリを紹介しましたが、今回はSQLiteを採用したバージョンをご紹介します。
SQLiteを使うことで、
- 長期間の履歴保存
- 高速な検索機能
- フラグ付きのお気に入り管理
といった機能をローカル環境で安定して実現できます。
✔ コードは非公開にしている理由
このアプリは、既に有料で販売されているプロダクトと同等のクオリティを目指して開発しており、今後の展開も考慮してコードの一般公開は行っていません。
- 有料販売されている同種アプリと機能が重複しており、トラブル回避のため
- 一部セキュリティ対策が含まれており、公開による悪用リスクを防ぐため
- 中級者以上が活用できるノウハウを応用しているため、商用展開も視野に
このような理由から「公開しないという選択」もまた、開発者として大切な判断だと考えています。
SQLite版にした理由
前回ご紹介した「localStorage版」のクリップボードアプリは、シンプルかつ軽量で扱いやすいのが特徴でした。しかし、長期運用や実務ユースを見据えると、以下のような課題が見えてきました。
- 保存上限がブラウザ依存で不安定
- ブラウザのクリアや更新でデータが消えるリスク
- ファイル管理や検索性の低さ
そこで、今回のSQLite版は、こうした課題をすべて解決する方向で構築しました。ローカルファイルとしての安定性に加え、SQLによる柔軟な検索・抽出が可能になり、より実用的なツールとなっています。
SQLite版の特徴
本アプリでは、Electron環境においてbetter-sqlite3
を使ってSQLiteデータベースを操作しています。特徴としては以下の通りです:
- 軽量かつ高速なローカルDBで、大量の履歴もストレスなく保存
- お気に入り管理や検索機能もDBのクエリで効率的に実装可能
- Mac/Windowsに対応したデスクトップアプリとして配布可能
また、今回はUIにもこだわり、タブ切り替えによる「通常履歴」と「お気に入り」の分離表示、さらにダークモードもサポート。開発者だけでなく、非エンジニアの方にも使いやすいUIを目指しました。
コード非公開にした理由
本アプリのソースコードはあえてGitHubで非公開としています。
理由は以下の通りです:
- 他サイトでは有料で販売されているレベルの完成度
- セキュリティ面からもロジックの一部を公開しない方が望ましい
- 「使う人のためのUI/UX設計」も含め、真剣に作り込んでいるため
一見、オープンにした方がアクセスは集まりやすいように感じるかもしれません。しかし、コードそのものではなく、「なぜこの構成にしたのか」「どう設計したのか」をしっかり伝えることで、十分に価値のある記事になると思っています。
localStorage版との違い
比較項目 | localStorage版 | SQLite版 |
---|---|---|
保存方法 | ブラウザのストレージ | ローカルDBファイル(.sqlite ) |
容量制限 | ブラウザ依存(約5〜10MB) | 実質制限なし(ディスク容量依存) |
永続性 | ブラウザキャッシュ削除で消える可能性あり | 半永続的(ファイルが削除されない限り保持) |
データ操作 | JSONベースで手動管理 | SQLで柔軟な検索・更新が可能 |
複雑な処理 | 不向き | クエリで簡単に実現可能 |
導入の手軽さ | 非常に簡単 | 初期セットアップがやや必要 |
localStorage版は「軽く試すには最適」ですが、SQLite版は「本気で使う人のための設計」と言えるレベルです。特に履歴が増えてくると、検索やお気に入り管理の面で圧倒的に差が出てきます。
開発のハマりポイント
SQLite版にすることで得られるメリットは多い一方、開発中にはいくつかのハマりポイントがありました。ここではその一部を共有します。
1. GitHubにpushできない(ファイルサイズ制限)
Electronビルド後のdist/
やnode_modules/
に含まれる一部ファイル(特にElectron Framework
)が100MBを超え、GitHubにpushできない問題が発生。.gitignore
で除外しても、既にコミットされた履歴が残っていては意味がないため、
git filter-repo --path dist/ --invert-paths --force<br>
を使って履歴ごと削除し、--force
で再pushする必要がありました。
2. ElectronとSQLiteのバージョン競合
ElectronでSQLiteを使うにはbetter-sqlite3
などのネイティブモジュールを使用しますが、ElectronのバージョンとNodeのABIに対応するバイナリが必要です。うまく合っていないと以下のようなエラーが出てハマりました:
この対処にはelectron-rebuild
またはnpm rebuild
を明示的に使う必要がありました。
3. プリロードスクリプトのセキュリティ対策
Electronのpreload.js
でSQLiteにアクセスさせるため、contextIsolationやnodeIntegrationなどの設定調整が必要でした。安全性を保ちつつ、ipcMain
/ipcRenderer
でやり取りできるようにしたのも学びのポイントです。
まとめ
今回ご紹介したElectron×SQLiteによるクリップボード履歴アプリは、本格的なローカルアプリ開発の第一歩として非常におすすめできる構成です。localStorage版と比べても、
- データ容量の制限がほぼない
- SQLで高速かつ柔軟な検索が可能
- 永続化・お気に入り管理に強い
という実用面での大きなアドバンテージがあります。
その一方で、Electronの特性やネイティブモジュールの扱いには独自の学習が必要であり、開発環境の構築やデプロイには注意が必要です。今回の開発で得た知見は、今後のデスクトップアプリ開発に大きく活きると感じています。
今後の展望
SQLite版の完成により、以下のような追加機能を今後実装していく予定です。
- 🔍 全文検索機能の追加:Fuzzy Searchや正規表現検索への対応
- ⭐ お気に入りの並び替え:自由なソート順で整理可能に
- 🌙 ダークモードの自動切り替え:システム設定に応じて切り替え
- ☁ クラウド同期機能の検討:DropboxやGoogle Driveとの連携で複数端末共有
- 🔐 パスワードロック機能:セキュリティ面の強化
特に「軽くて便利だけど実用的」なローカルツールとして、一般公開・配布の検討も進めていく予定です。