最近、MarsEdit 2 を使って、それについての 記事 を書いてみたり、ecto 3 Alpha を使って 記事 を書いてみたりしていたわけですが、自分は?というと、Kaku の画像挿入機能を試しに作ってみていました。
なぜいま画像挿入機能を作っているのかというと、他に作ってみたい機能や、他に作ってみたいソフトもあるのですが、現実問題、いまとりあえず足りないのは、Kaku の画像・リンク挿入機能あたりだろう、と。また、すでに書いたように、Mac 向けの二大ブログエディタを実戦で使ってみた結果、「やっぱり画像やリンクの扱いをなんとかしないと、記事を書くのがなかなかスムースにならない」ということを痛感したからでもあります。
こういった機能を作るには、画像の扱いやら、外部ファイルの扱いやら、ドラッグ&ドロップの扱いやら、自分がこれまで学んできたことがほとんど役に立たなそうな領域(=避けてきた領域)に挑むことになるので、かなりビビっていますが(下にも弱気発言)、今日からしばらくは、その中で気付いたことを記事にしていきます(たぶん)。
Core Data は素敵
「脱線(2)」で、Core Data ベースの Kaku「CoreKaku」を途中まで作ってみた、ということを書きましたが、このとき初めて実践した Core Data が楽しく、こういった機能を作るときは Core Data を使おう、と心に決めていました(というか、Core Data 以外でのやり方を考えるのが面倒くさいというか…)。というわけで、この画像挿入機能は、全面的に Core Data を使って作られています。
まず練習用に、こんなプロトタイプを作ることにしました:
- ドラッグ&ドロップで画像を登録して、管理するアプリ
- データベースには、画像本体は置かず、画像ファイルのパスとサムネイルを保存
- 画像のパラメータから
img
タグを自動生成
しかしこれは、GUI 上の操作とコピペ(おい)で、2秒ほどで完成(ウソですが)。これ以上は、記事のデータと連携できないと意味がないので、早々と Kaku との統合に作業を移しました。Core Data 恐るべし。
(※ Core Data はこうして、中心となる機能が動き出すのはかなり早いのですが、かなり開放的、というか、本当にまともなプログラムとして仕上げていくのには、時間と知識が必要 な気がします。例えば、保存ファイルはデフォルトの1個のままでいいのか、とか、もし大量の画像が登録されても、そのままでパフォーマンスが出るか、とか。動くには動くんですが、それ以外の部分を僕の知識でカバーできるか心配。今は快調に動いているんですが、それができなければこの機能は載せないかもしれません。けっこう弱気。)
AppleScript Studio プロジェクトと Core Data
ここで、AppleScript Studio ベースである Kaku 上で Core Data が動くように しなければなりません。
昔の僕なら「そんなことできるの?」と思っていたでしょうが、AppleScript Studio アプリも Cocoa アプリの変種(?)だ、ということを念頭に置けば、できないはずがありません。たぶん、非 Core Data の Cocoa アプリを Core Data 化するのと変わらないのではないでしょうか。
必要な作業は:
Core Data.framework
をプロジェクトに追加する。本来 Xcode で「ファイル」 → 「新規プロジェクト」 → 「Core Data Application」 とすると、始めから
Core Data.framework
を含んだプロジェクトとともに、データモデルファイル(「AppName_DataModel.xcdatamodel
」)と、あらかじめ基本的なコードが書き込まれた、アプリケーションデリゲートのヘッダ/実装ファイル(「AppName_AppDelegate.h/m
」)が入っている。これらは知識があれば自分で用意することもできると思うが、(とりあえずは)これらがあった方が楽なので、なんとかする。僕の場合は、別に「Kaku」という名の Core Data アプリケーションプロジェクトを作成して、そこから拝借。
あとは Objective-C/Cocoa + Core Data の知識があれば、
call method
でなんでもできるよ!(※素敵なパラドックス。そんな知識があるなら、なぜ初めからそれで作らないのか、と。笑 僕は AppleScript のほうが慣れているから、としか言いようがありません…ってそれもやっぱりおかしいような。)
大体こんな感じでしょうか。
逆にほとんど Objective-C/Cocoa で書いた Core Data Application の一部を AppleScript(Studio)で動かすことも可能。前述の CoreKaku がこのアプローチ。…ってこれ、よく考えるとちょっと便利かもしれないなぁ。Objective-C/Cocoa の部分と AppleScript(Studio)の部分は、僕の印象よりもはるかにシームレスに共存できるんだな、と感じました。
ちなみに、こういった方法を最初に知ったのは applescript-studio ML のこの 投稿 です。できたら僕もまとめて、「Notes」コーナーに投稿しようと思います。
※ この記事は、かなり初期段階の画像挿入機能を備えた Kaku で作成しました。