特定のディレクトリに画像を入れると自動的に変換してくれるようにする

 ちなみにこういう処理は特定の監視用ディレクトリに画像ファイルを入れておけば定期的に変換するようにしておくと便利です。このような場合は定期的な処理を行うcronを使います。詳しくは別の機会に説明しますので、ここでは単純に手順だけ書いておきます。

まず、デスクトップにconvertというディレクトリを作成しておきます。コマンドでやるなら以下のようになります。

mkdir ~/Desktop/convert

次にこのconvertディレクトリの中に変換したJPEG画像を入れるjpgディレクトリを作成します。

mkdir ~/Desktop/convert/jpg

次にコマンドでcrontab -eと入力します。

するとエディタが起動するので以下のように入力します。なお、ユーザー名のweedは自分のユーザー名に置き換えてください。

*/1 * * * * sips -s format jpeg /Users/weed/Desktop/convert/*.heic -o /Users/weed/Desktop/convert/jpg

ちなみにエディタがvi(vim)の場合はエディタが起動したらiキーを押した後、上記のコマンドを入力します。入力したらescキーを押して:wqと入力すればOKです。

コマンドラインに戻る段階でmacOSのバージョン(多分catalina以降)によっては図のような警告が出ることがあります。これは、セキュリティが強化されていて、簡単にcronを設定できないようになっているためです。この警告はcronを設定するたびに現れます。

OKボタンをクリックするとcronが設定されます。

これで定期的な処理の設定は完了です。あとは監視用のディレクトリに画像を入れてみましょう。なお、今回は1分ごとに処理するようにしているので、タイミングによっては1分近く待たないと処理されません。

実際には1分ごとに変換され続けるのはよくありません(処理後に元画像を移動させる処理をしていないため)。1時間に1回の割合で処理するくらいがちょうどいいかもしれません。以下のように先頭の*/1の文字を0にすると毎時0分に変換処理が行われるようになります。なお、設定を変更する場合はcrontab -eと入力すると編集画面になります。

0 * * * * sips -s format jpeg /Users/weed/Desktop/convert/*.heic -o /Users/weed/Desktop/convert/jpg

1日1回朝の4時に処理するのでよければ以下のようになります。

0 4 * * * sips -s format jpeg /Users/weed/Desktop/convert/*.heic -o /Users/weed/Desktop/convert/jpg

macOS catalinaより前のバージョンでは、これで動作するはずです。ただし、macOS catalina以降では、このように設定しただけでは動作しません。次に説明する設定を行う必要があります。

macOS catalina以降の設定

 macOS catalina以降では、セキュリティが強化されていて、もう一段階設定を行わないと動作しません。

 まず、システム環境設定を開きます。

セキュリティとプライバシーを選択します。画面が表示されたら画面左下の鍵のアイコンをクリックします。クリックすると管理者のパスワード入力を求められますので入力します。

左側のカテゴリからフルディスクアクセスの項目を探してクリックします。すると右側に登録済みのアプリケーション一覧が表示されます。その欄の下にある+ボタンをクリックします。

すると登録するアプリケーションを選択するダイアログが表示されます。この状態でcronを登録しないといけませんが、そのままでは選択することができません。そこで、コマンドキーとShiftキーを押したままGキーを押します。すると直接パスを入力するダイアログが表示されるので、/usr/sbin/cronと入力します。

cronが選択された状態になるので「開く」ボタンをクリックします。cronが登録されていれば完了です。

ちなみにせっかくのコマンドを使う講座なので少しだけコマンドを使ってみましょう。上記でcronがある場所を開く際にコマンドキーとShiftキーとGキーを押しましたが、あらかじめcronがあるディレクトリを表示しておき、ドラッグ&ドロップして登録する方法もあります。 まず、ターミナルでopenコマンドを使って以下のように入力します。

open /usr/sbin/

するとcronがあるディレクトリが表示されます。

あとは、cronのアイコンを追加リストの欄の中にドラッグ&ドロップすれば登録されます。

これで、macOS catalina以降でもcronが動作するようになります。

定期的な処理を止める

 無事に画像が変換されていればよいのですが、うまくいかない場合は正しく登録されているか確認してください。crontab -lとすると登録されている内容が表示されます。

削除でなく編集する場合はcrontab -eと入力します。ちなみにエディタがvi(vim)の場合はエディタが起動したらカーソルキーで、編集したい行、文字に移動します。iキーを押せば文字の挿入が可能になります。aキーを押せば文字の追加となります。なお、コマンドキー+Vキーで好みのエディタで入力したものをペーストする事もできます。
 すでに入力済みの行を削除する場合は削除したい行まで移動します。escキーを押した後にddと入力します。するとカーソルがある行が削除されます。
 編集が終了したらescキーを押して:wqと入力すればOKです。cronは些細な設定ミスでも動かないので、うまくいかない場合はよくよく目を凝らして確認してください。

どうしてもうまくいかないという場合はcronの設定を削除した方がよいかもしれません。以下のようにコマンドを入力すると設定されているcronがすべて削除されます。

crontab -r

今回はcronに直接sipsコマンドを指定していますが、多くの場合実行するシェルスクリプトのパスを指定します。練習がてらシェルスクリプトでsipsによる画像変換するようにしてみるのもよいでしょう。特に今回の例は、処理した元画像を残したままになっています。処理した画像を他のディレクトリに移動するようにするなど工夫してみると勉強になると思います。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。