トップ > Script-Fuスクリプトの制作 >
まずはコンソールからスクリプトを実行してみる

  

初めてのScript-Fuスクリプト

この記事では、実際にScript-Fuのスクリプトを作ってみます。 つまり、プログラミング言語Schemeを使ってScript-Fuに指示を出す、ということです。 制作するスクリプトは単純なもので、

  1. GIMPを終了させる

というだけの機能です。

スクリプトはファイルから読ませることが基本だがコンソールからも指示を出せる

何度も説明しているように、スクリプトはGIMPに指示を出すための指示書のようなものです。 では、どうやってGIMPに指示書を渡すのでしょうか。

指示書を渡す(スクリプトを読み込ませる)方法には2つあり、1つ目はファイルに保存して読み込ませるという方法です。 メモ帳などを使ってプログラミング言語Schemeで指示を記述し、それを保存したものをGIMPに読み込ませます。

2つ目の方法は、指示を直接手で打ち込む方法です。 『Script-Fu コンソール』と呼ばれるGIMP上のウィンドウを開き、そこに打ち込むという方法です。

なお、Script-Fu コンソールから指示を打ち込む方法は、ちょっとした動作確認程度の時にしか使いません。 ファイルから読み込ませる方法が基本となります

まずはScript-Fu コンソールから指示を出してみる

この記事では、Script-Fu コンソールから指示を出す方法でGIMPを終了させてみます。 Script-Fu コンソールを開き、GIMP終了の指示を出します。

1. 新規画像を開き変更を加える
1. 新規画像を開き変更を加える

上図のように任意の大きさの新規画像を開き、何でもいいので変更を加えます。 今回はブラシツールで "Z" の形状を描いてみました。

  
描画するなどして、必ず何か変更を加えてください。

では、Script-Fu コンソールを開きましょう。

2. フィルター(R) -> Script-Fu(S) -> Script-Fu コンソール(C)を実行
2. フィルター(R) -> Script-Fu(S) -> Script-Fu コンソール(C)を実行

上図のようにプルダウンメニューの"フィルター(R) -> Script-Fu(S) -> Script-Fu コンソール(C)"を実行します。

3. Script-Fu コンソール
3. Script-Fu コンソール

上図のように新たなウィンドウが開きます。 このウィンドウが『Script-Fu コンソール』です。 このウィンドウ上でスクリプトを打ち込むことで、GIMPに指示を出すことができます。

では、実際にスクリプトを打ち込んでみましょう。 GIMPを終了するためのスクリプトです。

4. '(gimp-quit TRUE)'と打ち込む
4. '(gimp-quit TRUE)'と打ち込む

上図のようにScript-Fu コンソールの[参照(B)...]ボタンの左側の入力欄に、


(gimp-quit TRUE)

 

と打ち込んでください。 最後にEnterキーを押すのを忘れないでください

  
大文字と小文字は区別されます。 '(GIMP-QUIT TRUE)' や 'Gimp-Quit TRUE)' ではGIMPは終了しません。

Enterキーを押した直後に、GIMPが終了したはずです。 もし、終了していない場合は何かが間違えていますので、入力内容が、

(gimp-quit TRUE)

になっているかを再確認してください


では、終了したGIMPを再度起動してください。 続いては、少しスクリプトの内容を変えてみます。

5. 新規画像を開き変更を加える
5. 新規画像を開き変更を加える

上図のように任意の大きさの新規画像を開き、何でもいいので変更を加えます。 今回はブラシツールで波の形状を描いてみました。

では、GIMPを終了させるスクリプトを打ち込みましょう。 先ほどのスクリプトとは少し内容を変えます

6. '(gimp-quit FALSE)'と打ち込む
6. '(gimp-quit FALSE)'と打ち込む

上図のようにScript-Fu コンソールを開き、


(gimp-quit FALSE)

 

と打ち込みます。 スクリプトの内容は TRUE だった部分を FALSE へと変えています

  
しつこいようですが、最後に忘れずにEnterキーを押してください。

Enterキーを押しても今回は終了しないはずです

7. 終了するかを尋ねるメッセージが表示される
7. 終了するかを尋ねるメッセージが表示される

上図のように "GIMPを終了します" というタイトルのウィンドウが表示されます。 この画像には変更が加えられているので、終了してもいいかどうかを尋ねるメッセージが表示されました。

では、[保存しない(D)]ボタンを押してGIMPを終了してください(またはキーボードのALT+Dを押します)。


ではここで、GIMPは終了したままにしておき、今起きたことを整理しておきましょう。 最初のスクリプトの、

(gimp-quit TRUE)

を打ち込んだ時は、変更が未保存であるにも関わらず、何も聞かれることなくGIMPを終了することができました。

一方、今回の、

(gimp-quit FALSE)

を打ち込んだ時は、終了するかどうかを聞かれました。 スクリプトの違いは TRUE だった部分を FALSE へ変更しただけです

では、TRUE や FALSE にはどういう意味があるのでしょうか。 それを知るには、プログラミング言語Schemeについて学ぶ必要があります。

ではさっそく、少しだけプログラミング言語Schemeの世界に踏み込んでみましょう。 まずは前出のスクリプト、

(gimp-quit TRUE)

の構文を解説します。 まず目につくのは、最初と最後に '(' と ')' がある点です。 つまり、カッコで囲まれています

プログラミング言語Schemeでは、命令は '(' で始まり ')' で終わります。 つまり、'(' から ')' までが1つの命令です。 従って、

(gimp-quit TRUE)

は、1つの命令だけで構成されているスクリプトということになります。

では次に、'(' の直後にある gimp-quit に注目してみましょう。 この gimp-quit は、『GIMPを終了しなさい』という指示そのものです。 プログラミング言語Schemeでは、'(' の直後に 『XXXXをしなさい』 という指示を記述します。

この『XXXXをしなさい』という部分をプログラミング言語Schemeでは『手続き』と呼びます

  
手続き gimp-quit は、"GIMPを終了しなさい" という意味の手続きです。

手続き gimp-quit の後ろにある TRUE は『パラメータ』と呼ばれるものです。 パラメータは、手続きに与える付加的な情報です。 与えるパラメータによって、手続き gimp-quit の動作が変化するのです。

そのため、手続き gimp-quit に与えるパラメータが TRUE の時は強制的にGIMPが終了され、FALSE なら終了してもいいかどうかを聞かれたのです。 与えるパラメータによって、手続き gimp-quit が振る舞いを変えていたわけです

  
パラメータは、日本語では 引数(ひきすう) ひきすう 引数(ひきすう) と呼ばれます。 以降は、"パラメータ" のことを "引数" と表記します。
  
手続きと引数の間には、1つ以上の空白が必要です。 空白の数は、1個 でも 10個 でも 300個 でも構いません。 なお、日本語の空白は使えませんので、日本語入力はオフにして空白を入力してください。
  
空白の代わりにタブを入力することもできます。

全ての手続きが引数を持つわけではないし引数の数もそれぞれ

前出のスクリプト、

(gimp-quit TRUE)

は、gimp-quit という手続きと、TRUE という引数からなる命令であることはすでに説明した通りです。

ここで注意して欲しいのは、全ての手続きが引数を持つわけではないということです。 引数を持たない手続きもあり、そのような場合には、

(procedurename)

のように、手続きだけの命令になります。

また、手続きに渡せる引数の数は1つだけとは限りません。 例えば、1 と 2 と 3 を足し算をさせる場合には、

(+ 1 2 3)

のように、3つの引数を記述することになります。 手続きによって、受け取る引数の数は異なります

手続きは関数や演算子や制御文などに分類できる

ではここで、手続きに関する大切な説明をしておきます。 プログラミング言語Schemeを学ぶ上で、知っておいた方がいい内容です。 知らないと後で混乱してしまう心配があります。

すでに何度も説明しているように、

(gimp-quit TRUE)

というスクリプトは、gimp-quit という手続きと、TRUE という引数からなる命令です。

つまり、『gimp-quitは手続きである』ということになりますが、実は手続きには種類があります。 手続きは、

  1. 関数
  2. 演算子
  3. 制御文

などの種類に分けることができます。 なお、分けることはできますが、どれも手続きということに違いはありません

プログラミング言語Schemeの学習サイトなどを見ていると、

  1. 関数
  2. 演算子
  3. 制御文

という用語が頻繁に登場しますが、これらはどれも手続きのことを意味しています。 これらの用語を見たら、それは手続きのことだと思ってください。

  

手続き gimp-quit の仕様を詳しく見てみよう

ではここで、手続き gimp-quit についてもう少し詳しく見てみましょう。 この手続きがどのような働きをするのか、どのような引数を受け取るのか、その引数によってどう振る舞いが変化するのかを調べてみましょう。

それらはScript-Fu コンソールから調べることができます。 GIMPを起動し、Script-Fu コンソールを開きましょう。

1. Script-Fu コンソール
1. Script-Fu コンソール

上図のようにScript-Fu コンソールを開き、[参照(B)...]ボタンを押します。

2. Script-Fu プロシージャブラウザー
2. Script-Fu プロシージャブラウザー

上図のように『Script-Fu プロシージャブラウザー』ウィンドウが開きます。 "プロシージャ" とは "手続き" のことであり、このウィンドウではScript-Fuで使えるGIMP関連の手続きを調べることができます

  
Script-Fu プロシージャブラウザーに掲載されているのはGIMP関連の手続きのみです。 GIMPに関係の無い手続き(例:足し算)はここには掲載されていません。

では、gimp-quit について調べましょう。 ウィンドウの左上にある "検索(S):" から検索するのが近道です。

3. 検索(S)に 'gimp-quit' と入力する
3. 検索(S)に 'gimp-quit' と入力する

上図のようにウィンドウ左上の検索(S)に 'gimp-quit' と入力してください。

4. gimp-quitが一致し詳細が表示される
4. gimp-quitが一致し詳細が表示される

上図のように(1)の一覧には検索キーワードに一致した gimp-quit が表示され、かつ、選択された状態になっています。 (1)の一覧の最上位にあるものは自動的に選択されます

なお、(2)に表示されているのが、(1)で選択中の手続きに関する詳細です。 この詳細からわかる内容は以下の通りです。

手続きの名前 gimp-quit
手続きの機能 "Causes GIMP to exit gracefully."(※1)
引数の数 1つだけ
※パラメーターという見出しの中は1行のみ
1つ目の引数の名前
1つ目の引数の種別
1つ目の引数の意味
force
INT32
"Force GIMP to ...(省略)... (TRUE or FALSE)"(※2)
注意点など "If there are unsaved ...(省略)... confirmation."(※3)
  • ※1 日本語訳) "GIMP を正常に終了します。"
  • ※2 日本語訳) "問い合わせずに終了する(TRUE または FALSE)"
  • ※3 日本語訳) "保存されていない画像がある場合はユーザに確認を求めます。引数 Force が TRUE の場合はユーザーに問い合わせずに終了します。"
  

まとめ

スクリプトは、ファイルに保存してGIMPに読み込ませるのが一般的な手順です。 しかし、Script-Fu コンソールから直接打ち込むという方法もあります。

操作/コマンド 説明
(プルダウンメニュー)
"フィルター(R)"
-> "Script-Fu(S)
-> Script-Fu コンソール(C)"
Script-Fu コンソールを開く

どちらの方法でスクリプトを実行させるにしても、スクリプトの構文に違いはありません。 スクリプトの構文、つまりプログラミング言語Schemeの構文は、

(手続き 引数)

という構造になっています。 なお、手続きと引数の間には1つ以上の空白(またはタブ)を入れる必要があります。 空白やタブの数は、1個 でも 10個 でも 300個 でも構いません。

受け渡す引数の個数は、手続きによって異なります。 引数を受け取らない手続きもあれば、5個の引数を受け取る手続きもあります。 引数とと引数の間にも1つ以上の空白(またはタブ)が必要です。

手続きの詳細はScript-Fu プロシージャブラウザーで調べることができます。 Script-Fu プロシージャブラウザーは、Script-Fu コンソールから呼び出すことができ、

  1. 手続きの名前
  2. 手続きの機能
  3. 引数の情報
  4. 注意点など

について確認することができます。

なお、手続きは、

  1. 関数
  2. 演算子
  3. 制御文

などの種類に分けることができます。

メニュー