ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

ドキュメントに使われているが、環境にないフォントの名前をテキストに書き出すJavaScriptを書いた

概要

ドキュメントに使われているけど環境にないフォントはフォント検索を使えば確認できる。

できるんだけど、誰かに伝えるにはキャプチャを撮ったり、自力でフォント名をコピペしたりしないといけなくて、スマートじゃないよね。

そんなわけで、そんなフォントの名前をテキストに書き出すJavaScriptを書いた。

コード

font.name はフォントスタイル(RやDBなど)が重複しちゃっていることがあるんだけど、今回はスルーした。

var doc = app.activeDocument;
var results = [];
for (var i = 0, iLen = doc.fonts.length; i < iLen; i++) {
    if (doc.fonts[i].status != FontStatus.INSTALLED) {
        results.push(doc.fonts[i].name);
    }
}
var writeStr = results.join('\n');
writeStringToFile('~/Desktop/result_' + getNowYMDHMS() + '.txt', writeStr);

/**
 * テキストファイル書き出し
 * @param  {String} filePath      保存先のファイルパス
 * @param  {String} stringToWrite 保存するテキスト
 */
function writeStringToFile(filePath, stringToWrite) {
    var fileObj = new File(filePath);
    if (fileObj) {
        try {
            fileObj.encoding = "UTF-8"
            var flag = fileObj.open("w");
            if (flag == true) {
                fileObj.write(stringToWrite);
            }
        } catch (e) {

        } finally {
            fileObj.close();
        }
    }
}

/**
 * 現在時刻を文字列で取得
 */
function getNowYMDHMS() {
    var dt = new Date();
    var y = dt.getFullYear();
    var m = ('00' + (dt.getMonth()+1)).slice(-2);
    var d = ('00' + dt.getDate()).slice(-2);
    var h = ('00' + dt.getHours()).slice(-2);
    var mm = ('00' + dt.getMinutes()).slice(-2);
    var s = ('00' + dt.getSeconds()).slice(-2);
    var result = y + m + d + h + mm + s;
    return result;
}

使い方

  1. ドキュメントを開く
  2. スクリプトを実行する
  3. デスクトップに result_20200213000220.txt (数値の部分は一意)といったテキストファイルが生成される

最後に

標準機能でテキストに書き出す機能があったらいいのにね

SwiftUIゴリゴリキャッチアップ会に参加してきた

概要

自分のメモを参加ログとして公開

イベントページ

https://wwdc-gorilla.connpass.com/event/134116/

セッションメモ

over view

  • 見たほうがいいセッション
    • SwiftUI Essentials
    • Data Flow ~
    • Integrating SwiftUI
    • Builting Custom Views in SwiftUI
    • SwiftUI On All Devices
  • キャッチアップ先
    • hackingwithswift.com
    • designcode.io

Unidirectional Data Flow Through SwiftUI

  • 資料
  • SwiftUIはReact+MobXみたいな感じ
    • 単一方向にデータが流れるメリット
      • 疎結合にしやすい
      • テストが書きやすい
        • MVVMはVMをきれいに書けていないとテストがごちゃっとなりやすい
      • スケーラブル
        • 個人の学習コストを少なくアーキテクチャで強制する

SE-XXXX Function Builders を読み解く / Reading the spec of Function Builders

SwiftUI(beta 3)でどこまで書ける(書けない)?

  • beta3 の時点の話なので、将来的に変わる可能性がかなり高い
  • 現時点では結構厳しいところもあるけど、みんなで良くしていきたい
  • 特徴
    • Declarative
      • いい面もあり悪い面もあり
      • 複雑なものは難しいのでは
    • Struct
      • 小さいコンポーネントを組み合わせて構築していく
    • Single Source Of Truth
      • ビジュアルエディターで実装してもすべてコードとして残る
      • コードとして管理できるのがとても良い点
  • がんばって書くのか、頑張っても書けないのかの線引が難しい
    • UIKitで書いたほうがいいところ、SwiftUIで書いたほうがいいところの判断が必要
      • いまのところUIKitメインがいい
    • チュートリアルを全部やってみてできることを学ぶ
      • チュートリアルでできることがSwiftUIでできることの最大限ではないか(現時点かな?)
  • SwiftUI vs UIKit
    • iOS13でできることで比較することになる
    • UICollectionViewCompositionLayout
      • カスタムがしやすくなっている
      • 90%ぐらいはこれで書けるようになる
  • View vs Struct
    • Visual View Hierachy
      • 直接ビューを触ることができない
        • 実際のViewを触ることができない
        • 変換されて描画されるので成果物はさわれない
      • インタラクションをどうする?
        • 複雑なインタラクションがある場合は諦めたほうがいいかも
  • スクロールビューのスクロール量の取得ができないので、カルーセル的なものは厳しい
    • iOS13ならCollectionViewを使ったほうがいいだろう
    • スクロールの内部状態を取得できる口がほしい
  • 続きを読むを押したら文章がすべて表示されるようなものは、やればできる感じ
    • Viewを作り変えるとアニメーションがきれいじゃない
    • 高さを変えるならmodefierでやる
      • lengthにnilを渡せるっぽいぞ
  • エッジに沿うような画像の実装が難しい?
  • サインイン画面はできる
    • テキストフィールドのデリゲートは使いものにならないので、テキストをバインディングしてValidateする
  • Formっぽいものは得意
    • 設定画面とかかな
    • テキストフィールドがあるものは厳しい
      • キーボードでテキストフィールドが隠れてしまう
        • スクロール量を制御できないのでスクロールさせることすらできない
  • SwiftUIのテキストフィールドは日本語が入力できないバグがある
    • 中国語もだめ
  • 増減するフォーム
    • まあまあできる
  • キーボードを隠すこともやりにくい
    • 個別のViewにisEditingが送れない
    • やるならRootViewに対してisEditingに送る
  • Viewの途中の状態を操作することが難しい
    • Staticな画面を作ることにしか使えないのでは

まとめ

  • beta版だから今後に期待って感じかな
  • チュートリアルの完走とセッションの動画を観よう

置換リストをもとにファイルをリネームするシンプルなAppleScriptを、BOOTHで販売開始しました

概要

リネーム前後のファイル名をタブで区切ったテキストファイルを読み込み、該当するファイルをリネームするシンプルなAppleScriptをBOOTHで販売開始しました。

商品ページ

macneko.booth.pm

Youtubeに紹介動画をアップロードしました。

こだわったところ

動画と使い方の部分を見ていただければわかるかもしれませんが、なるべくユーザーが簡単に使えるように設計しています。
例えば、次のようなところです。

  • リネームしたいファイルと同じフォルダにリストを設置することで、ユーザーがダイアログからフォルダを選択しなくてもいいようにした
  • リストをスクリプトにドラッグ&ドロップするだけでリネーム処理が実行できるようにした
  • 実行完了時にダイアログを表示して、リネームが行われたファイルの件数を表示するようにした

高性能のリネームアプリケーションを使うと自由に設定を決めることができますが、その反面、設定をする箇所がどうしても多くなります。
このスクリプトは機能を最小限に絞っているがゆえに、設定に悩むこともなくすぐに使うことができると思います。

商品紹介

同じ内容のものがREADMEとして商品に同梱されています。

概要

リネーム前後のファイル名をタブで区切ったテキストファイルを読み込み、該当するファイルをリネームするスクリプトです

更新履歴

更新日 更新内容
1.0.0 2019/06/18 初版作成

使い方

  1. リネーム前のファイル名とリネーム後のファイル名をタブ記号で区切ったテキストファイルを作成します(都合上、タブ記号を【TAB】と表しています)

    bar.txt【TAB】barbarbar.txt
    foo.txt【TAB】foofoofoo.txt

  2. 1で作成したテキストファイルを リネーム対象のファイルと同じフォルダ内に設置 します

  3. rename-files-from-list.app をダブルクリック、もしくは1で作成したテキストファイルを rename-files-from-list.app にドラッグ&ドロップするとスクリプトが起動して、リネーム処理が実行されます
    • ダブルクリックで起動した場合は、テキストファイルを選択するダイアログが表示されるので、1で作成したテキストファイルを選択すると、リネーム処理が実行されます
    • ドラッグ&ドロップで起動した場合は、なにも選択することなくリネーム処理が実行されます
  4. 処理が完了するとアラートが表示されます。OKをクリックするとスクリプトが終了し、リネームが完了します
    • アラートに「xx件のうちyy件のリネームが完了しました」というメッセージが表示されます。なにも問題がなければ xx と yy は同じ数値になりますが、なにかしらの要因で処理がスキップされた場合は yy の数値が減少します(スキップする要因は 注意点 を参照してください)

注意点

スクリプトを実行する前に必ず読んでいただきたいこと

  • 必ずバックアップをとってから実行してください
    • 意図しない要因によりスクリプトが途中で中断されてしまうことが起こり得るため、元の状態に復帰できるように必ずバックアップをとってください
  • このスクリプトやその他のファイルを、無断で転載・配布・販売することを禁じます
  • スクリプトの使用により生じたあらゆる損害について,私どもは責任を負いません

スクリプト起動時にアラートが表示された方へ

  • macOSのバージョンによっては、初回起動時のみ、以下のようなアラートが表示されますので、「OK」をクリックしてください
  • 「許可しない」をクリックした場合、スクリプトを起動すると以下のようなアラートが表示されて、スクリプトが実行できなくなりますのでご注意ください
  • スクリプトが起動できなくなってしまった場合は、「システム環境設定>セキュリティとプライバシー」を開き、サイドバーの「オートメーション」をクリックし、 rename-files-from-list.app のチェックボックスをクリックしてチェックを入れることで、実行できるようになります(以下の画像の赤枠部分です)

リネーム処理がスキップされてしまう方へ

以下の点をご確認ください。

  • リストファイルが正しいか
    • リネーム前のファイル名とリネーム後のファイル名とが一対一になっているか
    • 余分なタブが挿入されていないか
    • ファイル名が正しいか
  • リネーム前のファイル名に記載されたファイルがリストファイルと同階層に存在しているか
    • リネーム前のファイル名のファイルが存在しない場合はリネーム処理を行いません
  • リネーム後のファイル名に記載されたファイルがリストファイルと同階層にすでに存在していないか
    • リネーム後のファイル名のファイルがすでに存在した場合はリネーム処理を行いません

Recap of WWDC19 に参加してきた

イベント詳細

https://mercaridev.connpass.com/event/132676/

セッション内容

Project Catalyst: UIKit on the Mac is finally here! by Tim Oliver

  • iPhoneはmacOSとほぼ同じOSで動くというところが最初にあった
    • 実際はほぼ同じだけど、UI周りが違っている
  • AppKit(1994)、UIKit(2005)
    • UIKitに慣れている人がAppKitに入門するとAPIの違いなどで厳しい
      • わかる
      • NSViewがまず厳しい
  • Marzipanが発表された
    • macOSとiOSが統合されると思われていた
    • Appleが一つのアプリをMarzipanで作成されて公開された。Sneak Peek
  • 2019年にCatalystが登場!
  • 自分でアプリを作って試したみた、のデモ
    • AutoLayoutが聞いてるからmacOSアプリとしてビルドしても、自由自在にウィンドウの大きさを変えられる
    • 画面サイズに縛られないというのも、なるほどという感じだ(自分で変えられるから)
    • フォントサイズも違うらしい
    • 結局iOSアプリをmacOSで動かしている感じなので、ダイアログなどがiOSのものなのでユーザーにわかってしまう
      • macOSのユーザビリティとは一致しないところが多そうだ
  • まとめ
    • 作るの簡単。macにチェックを入れてビルドするだけ
    • Viewの切り分けなどが大変だ
      • まあ、そりゃそうですね…
    • 良いアプリを作ろうね!
      • macOSアプリ作りやすくなる…というわけではない感じだ
      • でも手軽でいいのかも

MVVM with Combine by Akifumi Fukaya

  • 資料
  • combineとは
    • Appleが発表した新しいフレームワーク
    • Reactiveに関する公式なフレームワーク
    • iOS13、watchOS6以上
      • 使えるのは再来年ぐらいかなー
  • 機能
    • Generic
    • Type Safe
    • Comptision first
    • Request driven
  • 構成要素
    • Publishers
  • Publishers
  • Subscribers
    • Publishersから値を受けとることのできるプロトコル
  • Opereater
    • 値をうけたときの振る舞い
    • value type -> Struct
  • MVVMでどう使うか(MVVMが適切かどうかは別の話…)
  • メモとるの、むずい…
    • コード読んだほうが良さそう
  • Runloop.mainってschedulerをセットしているけど、現在schedulerが実装されていないので、サンプルコードのdebounceの部分は動かない
    • schedulerはほぼ実装されていないんだそうな
    • そのうち実装されるのかな
      • じゃないとしんどそう
      • 次のリリースで実装されるっぽい

SwiftUIってこんなやつ Sato Takeshi

  • 資料
  • SwiftUIとは
    • UIKit, AppKitから切り離された新しいレンダリングシステム
    • Pure Swiftで書かれている
    • Previewでタップイベントも使える
  • Appleが公開しているチュートリアルがあるのでおすすめ
    • コードも確認できるよ
  • チュートリアルアプリをみてみよう
    • いままでとは違う書き方が使われている -> Swift5.1の新機能が多数使われている
  • Viewがプロトコルで定義されている
  • これもコードを追うタイプの話だからメモ取りづらい
  • Previewに修正が即座に反映されるの、すごくいいなぁ
    • 実装速度がすごくあがるなぁ、いいなぁ
  • Implicit returns from single-expression functions
  • Function Builder
    • View Bulder

WWDC19 Recap of ML by Akira Fukunaga

  • MLについて
  • Create ML
    • SwiftでML Modelを作れるフレームワーク
    • Xcode10上でGUIで触れた
    • Xcode11では分離したアプリケーションになった
      • Xcodeから遷移できる
    • 9つあるってセッションで言っていたけど、Seed1では2つしか選べない
    • デモ
      • カタリナにするとQuickTimeがスクリーンレコーディングすると落ちるらしい
  • Domain APIs
    • Appleがすでに学習済のモデルを提供してくれているので、それを使う
    • vision と natural language系にくわえて、たくさん追加された
    • Image Saliency
      • 写真の中でより重要、または判別しやすいものをSaliencyが高いというらしい
      • Appleが2つ用意している
        • Attention based
          • 人間が注目しやすそうなもの?
        • Objectness based
          • 前景、後景に関するもの
          • 前処理に使えそう
    • Sentiment analysis
      • ユーザーが入力した文字列を判定して感情を数値化する
      • 日本語はまだ対応していない…
  • Core ML
    • 端末で実行する機械学習
    • サーバと通信しないのでセキュア、という謳い文句
    • Model personalization
      • 端末でモデルをチューニング(微調整)できる
      • たとえば犬を判別するモデルがあったときに自分の犬だけを判別するようにチューニングできる

What's new in UICollectionView by Masaki Haga

  • SwiftUIなどの影でUITableViewとUICollectionViewに大きな変更が入っていた
  • 〜 iOS12 までのUICollectionView
    • perforemBatchUpdateを呼んでData不整合によりCrash
      • DatasourceKit使ったりすると良い
    • 親ViewControllerのSizeにあわせたCellのSize指定がめんどくさい
    • 縦CollectionViewの中に横スクロールのUICollectionViewを何個かいれたいが、Scroll位置の保存などがめんどくさい
  • 新しいUICollectionView
    • 2種類のセッションがあるけど、どっちも必見
      • 昨日TLでも同じ話を聞いたな
  • Data Source
    • [old] UICollectionViewDataSource
    • [NEW] UICollectionViewDiffableDataSourceを使うようになる
  • 新しいData Sourceの宣言
    • UICollectionViewDiffableDataSourceをUICollectionViewとCellProviderを引数に初期化する( Delegate型ではなくClosure型のCallback)
    • snapshotをapplyしてCollectionViewに反映
  • 注意
    • snapshotにわたすScctionの値とItemの値はHashable
    • snapshotはHashValueによって値の同一性を認識する
    • defaultの実装では違うものと認識される(?)
      • hasherにidentifierだけを渡して判定させる
        • たとえばタイトルがかわってもidentifierは変わらないので同一と認識させることができる
  • Layout
    • [old] UIColloctionViewFlowLayout + UIColloctionViewDelegateFlowLayout
    • [NEW] メモしそこなった
      • またNSプレフィックスがでてくるのか…
  • 新しいLayoutの宣言
    • UIColloctionViewCompositionLayout
      • initの引数としてNSCollectionLayoutSectionか、SectionProviderというClosureを渡す
  • Nested Collection View
    • 縦スクロールの中の横スクロールが簡単にかけるようになった
      • 最高じゃん
    • UIKit側で_UICollectionViewOr~的なScrollViewを勝手にいれてくれる
    • 画面外から戻ってきてもとのCollectionViewが保存されている

感想

メモがんばった。
SwiftUIが一番関心があるけど、Catalystも気になるなー。
簡単にmacOSアプリが作れるようになってくれ…。

3DCG Meetup #15 でExtendScriptとCEPの話をしてきた

概要

だいぶ遅くなってしまったけど、勉強会で登壇してきたのでブログに残しておく。

スライド

Speakerdeckで公開している。

おそらく 2019/05/18 時点で、ExtendScript DebuggerからCEPまでを通しで説明して、かつ手順を書いている資料や記事はないはずので、勉強会に参加したひとはもちろん、SNSなどで見かけた人が読んでも伝わるように頑張ってまとめた。
スライドに手順を書くと陳腐化しやすいので避けるのが定石なんだろうけど、あとからスライドを見直したときに手順があると「手を動かして覚える」ことができるかなって思って、あえて手順を載せることにした。

サンプルコード

当日登壇中に行ったデモで利用したコード+時間配分的にデモできなかったコードを、GitHubで公開している。
READMEに各サンプルの概要を記載しているので、気になるものを動かしてほしい。

https://github.com/macneko-ayu/20190518-3dcg-meetup-sample

個人的に気に入っているのは GoogleスプレッドシートとPhotoshopを連携させたCEPのサンプル で、Googleスプレッドシートから値を取得するところはほぼGoogleのサンプルコードをそのまま使っているというお手軽なもの。
あまりに簡単に実装できるのでちょっと拍子抜けしたぐらい。
ただ、デモを動かすのには少し手順が必要なので、後日手順を記載した記事を公開する予定。

登壇した勉強会

登壇したのは 2019/05/18 に開催された 3DCG Meetup #15
「3DCG制作者による情報交換&スキルアップ促進の為の勉強会」ということで、私以外は3DCGに関する登壇が行われていた。
当日はTA職の方やエンジニアの方の参加も多く、主催者の めんたいこ さんやスタッフの方々のフォローのおかげもあり、わりと場の空気に馴染んで気負うことなく登壇できたんじゃないかと思っている。
こういうフォローできる主催者、スタッフの動きは自分のもくもく会でも意識していきたいところ。
そういう面でも勉強になった勉強会だった。

登壇時のQA

記憶違いがあったらごめんなさい。

Q. ExtendScript Debuggerは過去のバージョンでも使える?

私は最新の2018、2019でしか使ってないけど、たぶん使えるんじゃないでしょうか。Adobeさんのさじ加減次第

Q. 自動化するときに100%を目指す?コストはどう考える?

自動化は70%程度を目指す。そこから100%までの30%を詰めるのがしんどくてコストもすごくかかるので、目指さないほうがよい。
自動化は効率化という趣旨で捉えられることが多いけど、もう一つの目的があってそれが「ミスを減らす」こと。
人間はミスをする生き物なので、そのミスを減らすための自動化という手段がある。
ミスを減らすためにコストをかけたほうがよい。

Q. デザイナーなどエンジニアじゃない人に喜ばれたものは?

IllustratorのレイヤーをPNGやJPEGに書き出すもの。
ブログでもたぶん一番見られている。
ワークフローを考えてっていうものよりは、定型作業のちょっとした手間を減らすものがウケがよい。

登壇してみて

登壇までずっと「どうやったら伝わるかなぁ」「スクリプトやCEPを使いたいって人がどれぐらいいるんだろうなぁ。そのうちのどのぐらいに刺さるんだろうなぁ」と悩んでいたんだけど、登壇後にたくさんの人から「参考になった」「ESTKをいまでも使っていて開発中止になったって知らなかったので情報が知れて助かった」「自動化することの目的がわかってよかった」など感想をいただけた。
投げたボールがちゃんと返ってきてよかった。
登壇の機会をいただいためんたいこさん、ありがとうございました。

MacにAdobe CEPの開発環境を構築する with Visual Studio Code

概要

Adobeアプリケーションのエクステンション(CEP:Common Extensibility Platform)をMacで開発するための開発環境を構築する。
過去にBracketsを利用した開発環境構築の記事を書いたが、Adobe公式のVisual Studio CodeプラグインであるExtendScript Debuggerが発表されたので、開発環境をVisual Studio Codeに移行することにし、記事にまとめることにした。

この記事でやること

  • 開発環境について
  • 開発環境の構築について
  • サンプルエクステンションの作成・起動について

この記事でやらないこと

  • エクステンションの開発について

想定する環境

  • macOS 10.13.6
  • Adobe Creative Cloudの2015以降のアプリケーションがインストール済

開発環境について

開発環境の選定

概要でも述べたがAdobeが今後のスクリプト開発の環境としてVisual Studio Codeを選択した(気まぐれかもしれないが)ので、開発環境はVisual Studio Codeとなる。
Visual Studio CodeはBrackets以上に開発を効率化してくれるプラグインが豊富にあるため、HTML5+CSS+JavaScriptで構成されているCEPの開発にはもってこいだろう。

Visual Studio Codeとは

Visual Studio Codeは、Microsoftが開発したオープンソースのコードエディタ。
azure.microsoft.com

拡張機能が豊富で、自分の使いたい機能を追加、もしくは開発して公開することが可能である。
どんな機能拡張があるかは、下記のサイトを参照。
marketplace.visualstudio.com

開発環境の構築

ここからは実際に開発環境を構築していく手順を紹介する。

Visual Studio Codeのインストール

前述した公式サイトからダウンロードできる。

  1. 公式サイトから最新版のzipをダウンロードする
  2. ダウンロードしたzipを展開したらそのフォルダ内に Visual Studio Code.app が現れる
  3. アプリケーションをApplicationsディレクトリにコピーする
  4. コピーしたアプリケーションを起動する

Visual Studio Code拡張機能の CC Extension Builder をインストール

marketplace.visualstudio.com

CC Extension Builder は、簡単にCEPのテンプレートプロジェクトを作成することができるプラグイン。

  1. Visual Studio Codeのサイドバーメニューの機能拡張を選択し、検索フィールドにCC Extension Builderと入力する
  2. 検索フィールドで「CEP」と入力、表示された CC Extension Builder をクリックする
  3. Visual Studio Code上で CC Extension Builder のページが開くので、インストールボタンをクリック
  4. さきほどクリックしたインストールボタンがアンインストールボタンになっていればインストール成功

Player Debug Mode の設定

CEPをアプリケーションにインストールするには、本来はCEPのプロジェクトをパッケージしたzxpをインストールする必要がある。
そしてパッケージするためには、証明書が必要だったり、他ツールのインストールが必要だったりするんだけど、その準備がなかなか面倒くさく、かつデバッグのたびにパッケージするのも手間だ。
そこで、デバッグモードを有効にする。

まず、メニューから 表示 > コマンド パレット... を選択して、コマンドパレットを表示する。ショートカットは cmd + shift +p だ。
表示されたパレットの検索フィールドに「cep debug」と入力し、絞り込まれた選択肢の中から「Extension Creator: Enable CEP Debug Mode」を選択し、デバッグモードを有効にする。

デバッグモードを有効にすることでインストールする手間がなくなり、所定のディレクトリにCEPを設置することでデバッグ実行が可能になる。
作成したCEPのプロジェクトを以下のディレクトリに設置し、対象のアプリケーションを再起動すると、アプリケーションに作成したCEPが読み込まれる。

f:id:macneko-ayu:20180529162956p:plain
公式ドキュメントより抜粋

サンプルエクステンションの作成・起動について

CEPの開発環境が構築できているか、サンプルエクステンションを作成して確認する。

サンプルエクステンションの作成手順

  1. メニューから 表示 > コマンド パレット... を選択して、コマンドパレットを表示する
  2. 表示されたパレットの検索フィールドに「create cc」と入力し、絞り込まれた選択肢の中から「Extension Creator: Create a New CC Extension」を選択する
  3. 作成するExtension IDを入力するパレットが表示される。Extension IDはドメインを逆転させた形式となり、デフォルトでは com.example.helloworld と入力されているので、任意のIDを入力してEnterを押す
  4. 続いて作成するExtensitonの名前を入力するパレットが表示される。任意の名前を入力してEnterを押す
  5. 最後に作成するテンプレートの形式を選択する。「basic」「topcoat」「spectrum」「theme」の4種類が選択できる。各テンプレートにどんな差があるかは調べられていないので VSCodeで始めるAdobe CEP Extension開発 を読むと良さそう
  6. 以下のパスにサンプルエクステンションが作成されている。設定は次の項で行う
/Users/(user_name)/Library/Application Support/Adobe/CEP/extensions/com.example.helloworld

サンプルエクステンションの設定

作成したサンプルエクステンションの設定を変えて、InDesignで利用できるようにする。
変更するところは CSXS/manifest.xml にある以下の3つの項目。

  • InDesignのバージョン表記行
  • CEPのバージョン × 2ヶ所

前項で作成したサンプルエクステンションがVisual Studio Codeで開かれていると思うので、CSXS/manifest.xml を開く。

まず、InDesingのバージョン表記行を変更する。
作成された状態ではPhotoshopのみ有効になっているので、InDesignでの読み込み部分のコメントアウトを解除する。行頭の <!-- と行末の --> を削除するか、ショートカットの cmd + / でコメントアウトが解除できる。
そのあとは、エクステンションを利用できるInDesignのバージョンを変更する。 Version="[10.0,99.9]"[10.0,99.9] が「バージョン番号10から99.9まで対象」という意味になっている。
ここではInDesign CC 2018で利用するためにバージョンを [10.0,13.1] に変更する。

続いて、CEPのバージョンを変更する。
<ExtensionManifest Version="9.0" と記載されているところを探して、9.0 の部分を 7.0 に変更する。
そのあと <RequiredRuntime Name="CSXS" Version="9.0" /> と記載されているところを探して、9.0 の部分を 7.0 に変更する。

以上でInDesign 2018で利用できるように設定できた。
変更箇所を以下にまとめておく。

変更前

<!-- <Host Name="IDSN" Version="[10.0,99.9]" /> -->
<ExtensionManifest Version="9.0"
<RequiredRuntime Name="CSXS" Version="9.0" />

変更後

<Host Name="IDSN" Version="[10.0,13.1]" />
<ExtensionManifest Version="7.0"
<RequiredRuntime Name="CSXS" Version="7.0" />

サンプルエクステンションを利用する

  1. InDesign CC 2018を起動する
  2. メニューから ウィンドウ>エクステンション>Hello World を選択
  3. パネルが表示されるので、Call ExtendScript ボタンをクリック
  4. アラートが表示され、hello from ExtendScript というメッセージが表示されていれば成功

注意点

CEPが読み込まれない場合は、設定が誤っている可能性が高い。
簡単なチェックリストを紹介する。

  • Player Debug Mode が有効になっているか
  • 利用したいアプリケーションが manifest.xml でコメントアウトされていないか、もしくは記載が削除されていないか
  • 利用したいアプリケーションのバージョンが manifest.xml に含まれているか

公式ドキュメント

アプリケーションのIDや対応しているCEPのバージョン、各アプリケーションのCEP上でのバージョンなどはGitHubのリポジトリから参照できる。 github.com

最後に

出遅れた感はあるが、Visual Studio CodeでCEP開発を行うための環境構築について簡単にまとめた。
筆者自身は最近CEPを書いていないので情報が不足している部分も多いと思うので、このブログを参照して不足部分を補った記事を公開して筆者に教えていただけると、とても嬉しい。

+DESIGNING vol.47の「ラクラボ。/知れば知るほどラクになるスクリプトのススメ[AppleScript編]」の執筆を担当しました

概要

本日(2019/03/29)発売の+DESIGNING vol.47の企画ページ、「ラクラボ。/知れば知るほどラクになるスクリプトのススメ[AppleScript編]」の執筆を担当をしました。

公式サイトは以下。
www.plus-designing.jp

サイトでは各企画の見開き状態の画像が見られ、私が執筆したラクラボ。も一見開き分だけ見られます。

書店、Amazonなどでぜひお買い求めください。

きっかけ

+DESIGNINGの編集長である小林さんと著者陣の一人である村上さんから、「AppleScriptについての記事をラクラボ。で書いてみませんか?」とお話をいただいたことがきっかけでした。
いままで編集はしたことがあっても商業誌の原稿を書くという経験はなかったので、二つ返事でお請けしました。

記事の内容

ターゲット層を絞る必要があり、スクリプト初心者向けの導入となる内容にするか、一歩先に進んだ初級〜中級者向けの内容にするか、かなり悩みました。
vol.46のラクラボ。で、友人の id:uske-s さんがスクリプトの導入的な記事を書いており、そこから先に進むための後押しができるような内容にもしたいと思いました。
最終的にはスクリプト初心者向けの内容にしたのですが、機会があればAppleScriptとJavaScriptで同じ処理を行うスクリプトを書いて比較するといったものも書いてみたいですね(需要があるのか…)

執筆の進め方

原稿はDropbox Paperで適宜確認できる形で進めるという方針でした。

私はいきなり文章を書くことができないタイプなので、登壇資料と同様にMarkdownでざっくりと草案を書くことにしました。

書きたいことに沿った適当な見出し、たとえば「AppleScriptとは」「短めのサンプルコード書く」などといったものでブロック分けして、そのあと文章を意識しないで箇条書きでざっと要素を洗い出しました。
その草案内にキャプチャを差し込んだり、サンプルコードを差し込んだりして、全体の内容を決めます。
そのあと見直しを行って粗目に編集、たとえばてにをはだったり、誤字脱字の調整作業を行います。 これで草案は完成なので、この時点のものを編集さんに確認していただきました。

最後に草案をもとに文章化して、構成のおかしいところの調整作業を行って完成です。

編集さんにはひと手間おかけてしまいましたが、草案の時点で指摘をしていただくことで精度をあげられたと思っています。

最後に

執筆の機会を与えていただき、小林さん、村上さん、ありがとうございました。

また、この記事を読んだ方がAppleScript…じゃなくてもいいのでスクリプトに興味をもっていただけると幸いです。
AppleScriptは独特な構文ということもあり敬遠される方も多いかもしれませんが、Macを使うならば使えるようになって損はしないと思います。

読んでくれたみなさんもAppleScriptの記事を書いてくれよな!

おまけ

DTPerのスクリプトもくもく会もよろしくお願いします!

dtpmkmk.connpass.com

明日3/30にもイベントを開催しますので、そちらもぜひご参加ください!

dtpmkmk.connpass.com