クリップボード拡張Macアプリケーション「Clipy」を公開しましたので、内部で使っているフレームワークや作成の経緯などを書いていきます。
開発背景
私はMacを使い出してからClipMenuを愛用してきました。
クリップボード拡張という便利機能に加え、スニペット機能によって格段に作業効率が上がるためです。
しかし、OSとの相性が悪いのかかなりの確率でアプリ自体のCPU使用率が100%になり固まってしまい作業がストップしていました。
原因として考えられるのは、
- ClipMenu本体の開発が Snow Leopard対応までで止まっている
- ペーストの内容をメモリ上に保存している
などといったことが考えられます。
本家ClipMenuの開発では、Swiftでのリファクタバージョンの開発始まったため、使用していましたが、一番愛用しているスニペット拡張は未実装となっていました。
その後アップデートもないため、またMacアプリ開発の初期段階として今回自作することにしました。
ClipMenuの作者naotaka氏は、Objective-Cで記述された前バージョンをオープンソースとして公開されています。
ClipMenu リポジトリ
今回新たにClipyを公開できたのは、このオープンソース公開があったためです。
改めてnaotaka氏に感謝申し上げます。
変更点
今回ClipMenuの改変にともない、既存の機能のクリップボード拡張・スニペット機能のみにしぼってVersion1.0.0としてリリースしました。
変更点は
- クリップ履歴のオブジェクトをメモリ上ではなくDBに保存
- data本体ファイルはディスクに保存し、DBにそのパスを格納
- Objective-Cの実装からSwiftへ
- 内部DBをCoreDataからRealmへ
- アイコンの変更
等を行いました。
js拡張などの拡張機能はまるごと削除していますが、クリップボード拡張アプリとしての基本は全て実装されています。
WebSite
アプリ開発にともないWebSiteを公開しました。
Downloadボタンより、dmgファイルをダウンロードして使用してください
http://clipy-app.com
オープンソース
ClipMenuのライセンスに従いClipyも全てオープンソースとして公開しています。
Clipy リポジトリ
実装はSwiftの機能を活かした実装にはまだなっておらず、Objective-Cらしさがのこっている部分はありますが、実働しているコードとして少なくとも参考になると思います。
機能自体も絞っているため実装も比較的おいやすいはずです。
2次利用
オープンソースとして公開しており、MITライセンスですが、ClipMenuのAppStoreへの配布問題にもある通り、Clipyにも同様の条件をつけさせていただきます。
また、ライセンス標記としてClipMenuのライセンスにも準拠してください。
せっかくのオープンソースですから、有料で購入ということがないように記事の拡散をしていただければと思います。
##フレームワーク
内部フレームワークとして以下を使用しています。
-
Realm
- 内部DBにRealmを使用しました。Realmがβ版というこもあり、不便な部分もありましたが、高速なレスポンス・実装のしやすさではこれまではDBの中で郡を抜いていると思います。これからも積極的に取り入れていきたいです。
-
ShortcutRecorder
- ショートカットキーの登録にはshortcutRecorderを使用しました。現状ShortcutRecorder2が整備されているOSSですが、こちらで⌘キー以外が表示されない問題があったため、forkプロジェクトの使用できるものを使用しました。
- DBPreferenceWindowController
-
Sparkle
- アップデートの確認にはSparkleを使用しました。Sparkleの使用についてはあまりまとまっている記事がないため、使用方法などまとめて別記事にアップする予定です。
直接は関係ありませんが、今回アプリケーションをインストールする.dmgにも背景等を使用したカスタムdmgを使用しました。
別記事にて作成方法などをまとめていきたいと思います。
Feature
現状の機能では、安定版とはいえClipMenuのぱくり、劣化版でしかありません。
その他機能の拡張も行っていきますが、今後Clipyが進んでいく実装はスニペット拡張をメインとして考えています。
Snippet Market
スニペットをIDEのパッケージマネジャーのような形でアップロード・ダウンロードできる機能を考えています。
例えば、プログラムでの定型文、メールでの定型文などスニペットとして予め登録しておくことで、時間をはるかに短縮できることがあります。
他人のスニペットにはコードの闇の知見、解決策などが詰まっているかもしれません。
そのスニペットを共有できれば、便利ですし、おもしろいはずです。
動的スニペット
他のアプリケーションには導入されていたりしますが、動的なスニペットを実装も考えています。
例えば、予め日付を表示するスニペットを登録しておけば、その日の日付が入力されるなどです。
issue&PullRequest
前述した通りClipyは全てオープンソースとして公開されています。
バグや不具合、要望等ありましたら、Issue、PullRequestなどお待ちしています。
記述は日本語で問題ありません。
なにかありましたら、@econa77 もしくは @clipy-appまでご連絡ください。
これから進化させていきますので、どうぞよろしくお願いいたします。