見出し画像

Pixelmator Pro AppleScriptコンテストで世界一

Pixelmator Proといえば、Macユーザーならみんな知ってる高性能グラフィックアプリ。そのAppleScriptコンテストで世界一を取ったときの話です。


縛られまくりのプログラムコンテスト

それまで、Pixelmator ProはAppleScriptに対応していなかったのですが、2020年にAppleScriptに対応しました。この対応を記念して、メーカーによるAppleScriptコンテストが開催されました。

そのレギュレーションがなかなか大変でした。

100行以内で記述

100行って本当に短いので、あっという間に100行に達してしまいます。しかも、昨日までさわったことのないアプリのScriptで何か意味のある内容を実現するのは、とても難しいです。

1行あたりの記述量を詰め込まない

AppleScriptの書き方によって、1行に大量の内容を詰め込むことはできてしまいます。それは禁止ということになりました。

追加で外部ライブラリをインストールするのは禁止

外部ライブラリに機能を詰め込んで呼び出すのは禁止されました。とくに、最近はAppleScriptでもCocoaの機能呼び出しが一般化して、長くなりがちなので、そのあたりの機能の組み込みにも一定の歯止めがかけられた格好です。

Pixelmator書類以外の何かを追加インストールするのは禁止

何かのFrameworkをインストールさせるなどの方法は禁止されました。

Pixelmator Proを操作するプログラムの量の規定

100行のうち、Pixelmator Proを操作する内容が全体の8割程度(うろおぼえ)あること。Cocoaの機能呼び出しやshell commandの呼び出しがほとんどでPixelmator Proでは結果を表示するだけ、というAppleScriptを書いたらダメ、ということに。

Script Debuggerで動くこと

主催がPixelmator TeamとAppleScriptのIDEを開発・販売しているLate Night Softwareだったので、Script Debugger上で動くことが明記されていました。これは、Apple純正のスクリプトエディタよりも高機能なため、とくに問題にはなりません。

システムに害を及ぼすような内容は禁止

当然のレギュレーションでしょう。マシンを破壊したり個人情報をバラ撒くようなものは、作りたくありません。

コンテストの告知から締切まで1か月もなかったような気がしますが、これは応募しなければ! と感じて応募してみました。

どういうものを作るべきなのか?

まず、ほぼ初見のアプリなので機能の内容がよくわかりませんでした。

Pixelmator ProのAppleScript用語辞書。Pixelmator Proの持つ設定値や、オブジェクトへの生成やアクセス、内部機能などAppleScriptに対して公開されているものが、「アプリのアイコンをスクリプトエディタにドラッグ&ドロップする」という簡単な操作で確認できる。ひととおり、Pixelmator Proの画面上の機能とのつけあわせが必要(コンテストのかぎられた時間の中ですべてをチェックするのは無理)

グラフィックアプリといっても、ベクターのデータを扱うIllustratorのようなものもあれば、ピクセルのデータを扱うPhotoshopのようなものもあります。

いろいろ調べてみると、Pixelmator Proはこれらの両方の性格を持つ、ベクターもラスター(ピクセル)も扱えるアプリでした。各種フィルターの処理ができつつも、元画像は破壊しないといった特徴もありました。

全体的な傾向は「お安く買えるPhotoshop」といった雰囲気で、カメラのRaw画像現像などに力点を置きつつ、機械学習によるオブジェクト認識など、さまざまな意欲的な機能が実装されつつも……自分が何に使ったらよいのかは、正直なところ、短い試用期間では見えてこなかったのです。

長年、Pixelmator Proを使ってきたユーザーだったら、こういう処理をやりたいとか、割とすっと出てくると思うのですが、今日昨日で使い始めた自分に、そんなアイデアは逆立ちしても出てこない、ということが最初から分かりきっていました

そこで、発想の転換。グラフィックアプリ「らしくない」使い方をしてしまえ! ということになりました。

Pixelmator Proでゲームを!

これまでにも、コンテストとか展示会のデモで、「困ったらゲーム」というワザを使ってきました。FileMaker Proでバーコードバトラーのようにホームページ同士を戦わせる「FM Battler」とか(当時、USから視察に来ていたClaris社の社長が「データベースをゲームに使うなんて、、、」という目で見ていました)。

なので、Pixelmator Proをゲームに使うのは、それほど無茶な話ではなかったのです。

しかし、「作れる」のと「実際に動く」のは別の話です。もともとPixelmator Proはグラフィックアプリなので、そんなにAppleScriptからコマンドを送って、すぐに反映されるような作りにはなっていません。

むしろ、細かい部品に連続して大量のコマンドを送信して操作したら、クラッシュを引き起こす可能性すらありそうでした。細かい部品を書類上に配置して、ドットを表現してグラフィックを表示……という使い方は無理でした。

https://www.youtube.com/watch?v=47eb28w8tvg

https://www.youtube.com/watch?v=o_Tef2ZLbtg

実際にテストプログラムを組んで、応答性のテストをしてみたところ、画面全体をアニメーションさせるような処理も無理でした。まあ、当然なんですけれど。

上記のYouTubeのムービーは、AppleScriptでKamenokoのデータをPixelmator Proに出力したもの(上)と、Adobe Illustratorに出力したもの(下)です。同じマシン上でテストしたものですが、圧倒的にAdobe Illustratorにコマンドを送って実行したほうが早く終わります。

そこで、キー操作によるリアルタイムの応答性は確保しつつも、なるべく少ないオブジェクト操作で動きを表現するようなものを検討。

ありました。「もぐらたたき」です。

1枚のPixelmator書類には、たくさんのレイヤーを作っておくことができ、各レイヤーの表示状態はAppleScriptからコントロールできます。

シューティングゲームのような細かい動きを実現するのは無理がありそうでしたが、各レイヤーにもぐらが地上に出てくる状態を書いておいて、表示レイヤーを切り替えれば……作れます。

かくして、100行以内でもぐらたたきゲームをAppleScriptで記述。コンテストで世界一をとってPixelmator Proのアプリをゲットしたのでした。

後日、Pixelmator ProらしいScriptもいろいろ書いた

知り合いに見せたら「これで優勝されたら、参加者が泣く」「このなげやりなグラフィックは何?」などと言われたい放題でしたが、後日、実用的なAppleScriptをいろいろ組んだのでご安心ください。

複数の3D LUTでカラー調整してバッチ出力

Pixelmator Proの最前面の書類の選択範囲を他の書類にも適用させて切り抜いてPNG書き出し

https://www.youtube.com/watch?v=wMj6YUZJ_kE

Pixelmator Pro ML Super Resolution(超解像)デモ。画像の解像度をアップさせる


この記事が気に入ったらサポートをしてみませんか?