「繰り返し行う作業を自動化したい。」
「複数の作業を効率よく行いたい。」

そんなときに便利なのが、シェルスクリプトという機能。複数の処理を一度に実行できるため、画像の変換やファイル整理など、日常の単純作業をぐっと楽にできます。

Macをお使いの方なら、Automatorと組み合わせることで、さらにスマートな運用が可能です。この記事では、シェルスクリプトの基本構文から実用例、Automatorでの活用方法までをご紹介します。

WordPressテーマ「GLUE」
WordPressテーマ「GLUE」
無料で高機能なWordPressテーマが手に入る。

シェルスクリプトとは

シェルスクリプトとは、MacやLinuxなどのOSに標準で備わっている「シェル(=コマンドを実行する仕組み)」に、一連の命令をまとめて記述したファイルのことです。

ターミナルで行う複数のコマンドを、スクリプトとして自動で実行できるのが特徴です。

ターミナルとは文字入力で操作するアプリで、コマンドはその命令文、スクリプトは複数の命令をまとめて自動実行できるファイルのことです。

たとえば「特定のフォルダにある画像をまとめて変換する」「指定の条件下でファイルA→フォルダBに移動させる」というような作業を、自動化できます。

Windowsでいう「バッチファイル」に近い存在ですが、Macではシェルスクリプト(.sh)を使うのが一般的です。

ファイルのつくり方

シェルスクリプトは、テキストファイルとして作成できます。Macの場合は「テキストエディット」や「Visual Studio Code」など、任意のエディタでつくってOKです。

1行目には、使用するシェルを指定する「シバン行(#!)」を書きます。通常は以下のように記述します。

#!/bin/bash

この1行で、「このスクリプトはbashというシェルで実行する」という意味になります。続けて実行したいコマンドを下に書いていくことで、複数の処理をまとめて実行できるようになります。

たとえば、次のようなスクリプトを保存してみましょう。

#!/bin/bash
echo "Hello World"

ファイル名は「sample.sh」として保存します。保存後、ターミナルに以下をコピペすると実行できます。

ターミナルは、command+spaceで開く「spotlight」やランチャーアプリから検索して起動するとスムーズです。
sh sample.sh

拡張子「.sh」はシェルスクリプトの目印。ファイル名は自由に決められますが、英数字とハイフン・アンダースコアのみがおすすめです。

よく使われる構文

シェルスクリプトでは、ファイル操作や条件分岐などをコマンドで記述します。ここによく使われる基本構文を一部載せておきます。以下を知っていれば、コマンドを見てなんとなく意味がわかるかもしれません。

記述 意味・用途
# コメント(実行されないメモ)
$@ スクリプト実行時に渡されたすべての引数(ファイル一覧など)
for f in "$@" ; do ... ; done 複数のファイルを順に処理するループ
basename パスからファイル名だけを取り出す
${name%.*} 拡張子を取り除く(文字列操作)
mkdir -p フォルダを作成(既にある場合はスキップ)
if [ 条件 ]; then ... fi 条件を満たす場合に処理を実行する(条件分岐)

これらを組み合わせることで、「特定フォルダの画像をまとめて変換する」などの自動化を実現できます。

また、今はChatGPT等のAIに以下のようなプロンプトを入れるだけで、スクリプトを生成できます。非開発者でもかんたんです。構文をすべて覚える必要はありません。

画像を1000pxにリサイズしてJPEGに変換するシェルスクリプトをつくって

実例:画像をリサイズしてJPEG化してみよう

ここでは、複数の画像をまとめて「横幅1000px」にリサイズし、JPEG形式に変換するシェルスクリプトを紹介します。Macに標準搭載されているコマンド sips(画像変換ツール)を使うことで、実行可能です。

画像変換ツールといっても何かアプリを立ち上げるわけではなく、以下のコマンド内で利用する記述(sips部分)になります。
for f in "$@"
do
  filename="$(basename "$f")"
  name="${filename%.*}"
  dest="$(dirname "$f")/converted"

  mkdir -p "$dest"

  # 横幅1000pxにリサイズしてJPEGに変換(品質:最高)
  /usr/bin/sips --resampleWidth 1000 -s format jpeg -s formatOptions best "$f" --out "$dest/${name}.jpg"
done

このスクリプトを resize-to-jpg.sh という名前で保存します。

保存したら、最初だけターミナルを開いて、以下のコマンドで「実行できる状態」にしておきましょう。

chmod +x resize-to-jpg.sh

これで準備完了です。変換したい画像ファイルをこのスクリプトにドラッグ&ドロップすれば、同じフォルダ内に「converted」というサブフォルダが作成され、処理済みの画像がJPEGとして出力されます。

このスクリプトは横幅を基準にリサイズするため、縦横比は自動で維持されます。

Automatorでシェルスクリプトを使う

シェルスクリプトを実際に使う際、「テキストファイルをつくって、ターミナルを立ち上げる」というフローはスキップできます。

Macに標準で搭載されている「Automator」という自動化ツールを使う方がスムーズです。Automatorは、「フォルダにファイルが追加されたら処理する」「右クリックから実行する」など、スクリプトを手軽に呼び出すための仕組みです。

たとえば、先ほどの「画像を1000pxにリサイズしてJPEG化する」スクリプトを、Automatorの「クイックアクション」に登録しておけば、Finder上で右クリックして実行できるようになります。

Automatorの「フォルダアクション」を使えば、特定フォルダにファイルを入れるだけで自動処理することも可能です。

Automatorについては、下記記事を参考にご覧ください。

Automatorには元々「画像をリサイズ」というアクションが用意されていますが、こちらは長辺を基準にリサイズされる仕様になっています。

縦長や横長の画像が混在していると、意図しないサイズでリサイズされてしまうケースが出てくるということです。筆者もこれに気づかず使っていて、出力された画像のサイズがバラバラになってしまった経験があります。

こうした細かい条件をコントロールしたい場合は、コマンドを使ったシェルスクリプトで指定しておくほうが確実です。

手順は以下のとおりです。

  1. Automatorを起動する
  2. シェルスクリプトを追加する
  3. 入力の引き渡し方法を「引数として」に設定する
  4. 保存する

1. Automatorを起動する

Spotlightやランチャーアプリ(command+スペースキー)を使って「Automator」と検索して、起動してください。「新規書類」を作成します。

Automatorでクイックアクションを選択する画面

今回は、テンプレート選択画面が表示されたら、「クイックアクション」を選びましょう(右クリックメニューから呼び出せるようになります)。

2. シェルスクリプトを追加する

左上の検索ボックスで「シェル」と入力し、「シェルスクリプトを実行」をダブルクリックして追加します。

Automatorでシェルスクリプトを選択する画面

入力欄に、以下のスクリプトを貼り付けます。

for f in "$@"
do
  sips -Z 1000 "$f" --setProperty format jpeg --out "${f%.*}.jpg"
done

これで、画像を1000pxにリサイズし、JPEG形式に変換して保存する処理が実行されるようになります。

3. 対象ファイルと引き渡し方法を設定する

今回は、画像処理のスクリプトなので、入力欄上部にある2箇所を次のように設定します。

  • ワークフローが受け取る現在の項目:「画像ファイル
  • 入力の引き渡し方法:「引数として

シェルスクリプト登録時に注意して設定したい2箇所

この設定が間違っていると正しく処理されなかったり、右クリックしても、クイックアクションの選択肢に表示されません。

4. 保存する

最後に、左上の「ファイル > 保存」を選び、わかりやすい名前(例:画像をリサイズしてJPEG化)をつけて保存すればOKです。

以下のように、Finder上で画像を右クリックして「クイックアクション > 画像をリサイズしてJPEG化」を選ぶと、処理が実行されるようになります。

クイックアクションに「画像をリサイズしてJPEG化」が表示されている

クイックアクションに「画像をリサイズしてJPEG化」が表示されている

複雑な処理も正確に登録しておけば、右クリックとクイックアクションのみで行えるようになるわけです。

まとめ

シェルスクリプトは、繰り返し行う作業を効率化できる便利な機能です。

難しそうに見えるかもしれませんが、一度覚えてしまえば意外とできます。「この作業、毎回手でやってるな」と思う処理があれば、ぜひ一度シェルスクリプト化を試してみてください。Automatorと組み合わせて作業をスマート化できます。

複雑なコマンドでも、今はAIを使えばかんたんに生成できるので、ぜひ自分専用の自動化ツールをつくってみてください。

世界最高品質のデザインの
WordPressテーマ集
WordPressテーマ「ISSUE」
WordPressテーマ「ISSUE」
人材不足を解決する求人採用サイトを。
WordPressテーマ「SEEED」
WordPressテーマ「SEEED」
Webサービスを販売するLP型テーマ。
WordPressテーマ「GENESIS」
WordPressテーマ「GENESIS」
スタイリッシュな企業サイトの決定版。
WordPressテーマ「SOLARIS」
WordPressテーマ「SOLARIS」
一流の企業のための一流の企業サイトを。