‘Applescript’ タグのついている投稿

AppleScriptやXojoからシェルに処理を投げると通らない場合の対処

2022/04/01

 少し前に仕事マシンがM1 MBAに切り替わったワケですが、OSがmacOS 12 Montereyになったことで(以前からあるにはあったけどなんとかなってた)AppleScriptやXojoなどの別環境内からシェルに処理を投げた際に「ターミナルでは通っていた一部の処理が通らなくなる」現象が顕在化し、だいぶ頑張って解決したので数年後に同じことで困らないように記録を残しておきます。

そもそもなんでそういう現象が起きるのか

 Macの「ターミナル」はbashやzshといった「シェル」を使うためのアプリです。Windowsで言うところのコマンドプロンプトですね。で、例えばOSに元々入っているバージョンとは違うPerlやPythonを使いたいとか、非標準モジュールを入れて使いたいといったような場合にはmacの場合はパッケージマネージャーのHomebrewMacPortsをまず入れてその後それを使ってさまざまな必要なものを入れていって環境を構築するわけですが、入れたものを有効にするために「パスを通す」作業が度々発生します。これは作業手順自体は検索すればいくらでもWebで見つかるのですが、要はシェル(bashやzsh)の環境設定ファイルである「.bash_profile」や「.zshrc」にシェルの起動時に自動実行する設定(環境変数の設定など)を記述しておく作業です。これをやることでいちいち実行ファイルのあるディレクトリに移動してからコマンドを実行するようなことをしないでも良くなるわけです。

設定が読み込まれなかったためエラーが発生

設定が読み込まれなかったためエラーが発生

 ただ、「.bash_profile」や「.zshrc」への記述は、あくまでターミナルでシェルを起動した際に読み込まれる設定であるため、AppleScriptやXojo内からシェルに処理を投げた場合には適用されません。このため、ターミナルでは通っていた処理が通らなくなったりします。

シェルに処理を投げる際に設定を読ませれば処理は通る

 ではどうすればよいのかと言うと、例えばApplescriptの場合なら以下のように

 命令文の前に環境設定の記述をセミコロンで繋げて実行してやれば処理が通ります(この場合サンプルとしてHomebrewのバージョンを表示させている)。環境設定の記述はターミナルで処理が通っているのなら現在有効にしているシェルの設定ファイルのどこかに記述があるはず。

bashやzshの環境設定を読み込んで実行するようにした

 ただ、上記の方法だとApplescript等のコード自体に各環境に依存する表記を追記することになるため、違うマシンにスクリプトを持って行くとたちまち動かなくなるといったような話になりそうです。それはできれば避けたいため、シェルの環境設定ファイル自体を読み込むperlスクリプトを作ってみました。

 exportもしくはevalで始まる行を抽出してセミコロンで繋げたものを返すので、あとはそれを実際に実行する処理の前に連結してシェルに処理を投げればOKです。

Applescriptに組み込んだ

Applescriptに組み込んだ


Applescriptに組み込んだ場合は以下のような感じ。上のperlスクリプトをshellconfigexec.plの名称でスクリプトバンドル形式ファイル内のContents/Resourcesフォルダに保存して実行しています(macOS 12 Montereyではアプリ形式で保存しようとするとエラーが出て保存できなかったりするため、スクリプトバンドル形式で保存してスクリプトメニューから実行)。

 シェルの設定ファイルの処理を全部引っこ抜いて実行が乱暴すぎるという場合は読み込みファイルを独自定義してルートディレクトリに置いておき、それを指定して読み込ませればよいです。

(2022.4.4)

mi内でタグ以外の箇所の半角英数字を一括全角置換したい

2018/04/05

 電書で縦書きの本を作ることが多いため、テキストエディタ「mi」内でXHTMLファイル内の半角英数字を全角に打ち替えなければならないことが時々あります。なんでそういうことになるのかと言えば、InDesignのデータ内では半角の英数字でも段落の設定次第で正立させて表示できるんですね。でもXHTMLとして書き出してしまうとそういう設定は飛んでしまうので半角英数字として横転してしまいます。なのでこれまでできるだけInDesign内で半角から全角に置換するようにしていましたが、やはり書き出してしまってから置換できてなかったのが判明して手で打ち替えるというケースがそれなりにあり、特に長めの単語ではめんどくさいし入力ミスが怖いなーと思っておりました。
 ということで普段使っているテキストエディタ「mi」内で気軽に置換できるようにしたので以下メモです。

やりたいこと

  1. miに書き出した段階ではXHTMLタグテキストの編集になるため、タグ部分は除外して置換処理をしたい
  2. テキスト全体ではなく該当部分を選んで置換処理をかけたい
  3. できるならショートカットで置換できるように設定したい

Perlでの置換処理の内容

 Perlで処理するための置換コード自体は以下。処理としてはテキストを<>で括られた文字列(要はXHTMLのタグ)を区切り文字として分割し、配列内各要素がタグかどうかを判定してタグではないものに対してのみ置換処理をかけています(なので使用者がタグの真ん中あたりから適当に範囲選択したりするとアレなことにはなるけどそれは無視)。ここいらのコードは市川せうぞーさんにヒントをいただきました。ありがとうございます。

ワンライナー化してAppleScriptに組み込む

これをワンライナー化してAppleScriptに組み込むことでmiでの現在の選択部分に対して置換をかけられるようになります。

 なお「on run」「end run」の行に関してはmi内のツールから実行するための記述なので、単体アプリとして保存して使うならなくてよいです。範囲選択した状態でアプリを実行すれば大丈夫。
miのモードにスクリプトを組み込む方法については詳述はしないのでmi公式ページなど見てください。実例としては以前に作ったこれの「その他」(Miscellaneous)フォルダに各種仕込んだりしてます。

キーボードショートカットで使えるようにしてさらに便利に

 で、これをキーボードショートカット一発で使えると本当に快適だなーと思って調べていたのですが、macOS設定メニュー内、キーボード項目のショートカット設定で行けるという情報を見つけました。素晴らしい! 何でも行けるじゃないですかこれなら。

 ということで早速設定。ついでにひらがな←→カタカナの変換も仕込みました。そちらもタグは除外して置換するようにしました。まあXHTMLのタグ内にカナとか漢字が混じってるとは思えないけど。

タグの部分以外が一括で置換された

タグの部分以外が一括で置換された

 他にも仕事ごとにいろいろ仕込んで使えそうだけどまあそこいらはおいおい。

(2018.4.5)

NumbersからCSVを書き出すドロップレット

2018/03/12

 ちょっと前からNumbersの新バージョンでAppleScriptを使ってCSVをエクスポートしようとするとエクスポートに失敗する上にNumbersの元ファイルが壊れて開けなくなるという不具合が出てまして、旧バージョンのNumbersを使うことでごまかしていたのですが、マシン更新でさすがにごまかしきれなくなってきたので適当に英語のフォーラムを漁ってどうにかしました。まあサンプルコードがフォルダ選択なのをドロップレットにした以外何にもしてませんが、また数年後に同じネタでハマってググるの嫌なので備忘録として置いておきます。

 以上。ドロップレットとして使うにはスクリプトエディタにペーストしてアプリとして保存してね。しかしファイル壊れるってよっぽどだよな。あと未だにAppleScriptの型変換苦手です。ワケがわからん。

(2018.3.13)

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。