1.2 コマンド ラインの使用方法

この節にはコマンド ラインで LilyPond を使用するための追加情報が含まれます。これにはプログラムに追加オプションを渡す必要があるかもしれません。さらに、いくつかの特別なプログラム (midi2ly など) はコマンド ラインからしか利用できません。

ここで ‘コマンド ライン’ とは、OS の中にあるコマンド ラインを意味します。Windows ユーザは ‘DOS シェル’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは ‘ターミナル’ や ‘コンソール’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは追加のセットアップが必要かもしれません。 MacOS X を参照してください。

OS のコマンド ラインの使用方法についての説明はこのマニュアルが扱う範囲ではありません。コマンド ラインに馴染みがない場合は、その内容を扱っている他のドキュメントをあたってください。


lilypond を呼び出す

lilypond 実行可能形式ファイルはコマンド ラインから以下のように呼び出されます。

lilypond [option]… file

拡張子を持たないファイル名で呼び出された場合、‘.ly’ が最初に試されます。stdin から入力を読み込む場合には、file に対してダッシュ (-) を使用します。

filename.ly’ が処理されると、lilypond は出力として ‘filename.ps’ と ‘filename.pdf’ を作り出します。いくつかのファイルを指定することもできます。その場合、それらのファイルは個々に処理されます。1

filename.ly’ が複数の \score を含んでいる場合、2 つ目以降の score は ‘filename-1.pdf’ から始まる番号付きのファイルに出力されます。さらに、output-suffix がベース名と番号の間に挿入されます。以下の内容を含んでいる入力ファイルは

#(define output-suffix "violin")
\book { … }
#(define output-suffix "cello")
\book { … }

base-violin.pdf’ と base-cello-1.pdf’ を出力します。


標準シェル コマンド

シェル (例えばコマンド ウィンドウ) がリダイレクトをサポートしているのであれば、以下のコマンドでコンソール出力をファイルにリダイレクトすると役に立つかもしれません。

あなたの使用しているシェルがこれらのオプションをサポートしているかどうか、あるいは構文が異なるかどうかは、そのシェルのドキュメントを調べてください。これらはシェル コマンドであり、lilypond とは無関係です。


lilypond のコマンド ライン オプション

以下のオプションがサポートされます:

-d,--define-default=var=val

これは内部プログラム オプション var に Scheme 値 val をセットします。val が提供されていない場合、#t が使用されます。オプションを OFF にするには、var の接頭辞として no- を付けます。つまり、

-dno-point-and-click

-dpoint-and-click=#f

と同じです。

以下のオプションがサポートされます:

help

lilypond -dhelp を実行すると使用可能な ‘-d’ オプションがすべて表示されます。

paper-size

このオプションはデフォルトの用紙サイズをセットします。

-dpaper-size=\"letter\"

文字列はエスケーブされたクォート ( \" ) で囲まれていなければならないということに注意してください。

safe

.ly 入力を信用してはいけません。

Web サーバを通じて LilyPond フォーマットが利用可能な場合、‘--safe’ オプションか ‘--jail’ オプションのどちらかを 渡さなければなりません。‘--safe’ オプションは以下のようなインライン Scheme コードが大混乱をもたらすことを防ぎます:

#(system "rm -rf /")
{
  c4^$(ly:gulp-file "/etc/passwd")
}

訳者: #(system "rm -rf /") はルート ディレクトリ以下を削除し、export (ly:gulp-file "/etc/passwd") はパスワード ファイルをエクスポートします。

-dsafe’ オプションはインライン Scheme 表記を特別なセーフ モジュールの中で評価します。このセーフ モジュールは GUILE ‘safe-r5rs’ モジュールから派生したものですが、LilyPond API 関数をいくつか追加しています。これらの関数は ‘scm/safe-lily.scm’ でリスト アップされています。

さらに、セーフ モードは \include 指示を却下し、TeX 文字列の中にあるバックスラッシュを無効にします。

セーフ モードでは、LilyPond 変数を Scheme にインポートすることはできません。

-dsafe’ はリソースの乱用を検出 しません。例えば循環データ構造体をバックエンドに食わせることで、プログラムをハングさせることは可能です。そのため、パブリックにアクセス可能な Web サーバ上で LilyPond を使用する場合、そのプロセスの CPU とメモリの両方の使用は制限されるべきです。

セーフ モードは多くの有用な LilyPond 断片がコンパイルされることを妨げます。‘--jail’ はより安全な代替オプションですが、セット アップにより多くの作業を必要とします。

backend

バックエンドに対して使用する出力フォーマットを指定します。format の選択肢には以下があります:

ps

PostScript

Postscript ファイルは TTF, Type1, それに OTF フォントを含んでいます。これらのフォントのサブセット化 (訳者: フォント セットを使用するフォントに限定すること) は行われません。東洋の文字セットを使用する場合、巨大なファイルになる可能性があります。

eps

縮約された PostScript (EPS)。これは各ページ (システム) をフォントを持たない個別の ‘EPS’ ファイルとして吐き出し、フォントを含めたすべてのページ (システム) を持つ ‘EPS’ ファイルを 1 つ吐き出します。

このモードは lilypond-book でデフォルトで使用されます。

svg

SVG (Scalable Vector Graphics)。これは各ページを埋め込みフォントをフォントを持たない個別の ‘SVG’ ファイルとして吐き出します。最適な描画を得るために、LilyPond インストールに含まれている Century Schoolbook フォントをインストールすることをお勧めします。UNIX では、単に LilyPond ディレクトリ (一般には ‘/usr/share/lilypond/VERSION/fonts/otf/’) から ‘~/.fonts/’ にコピーするだけです。SVG 出力は SVG エディタやユーザ エージョントと互換性があります。

scm

生データ – 内部 Scheme ベース描画コマンド – を吐き出します。

null

譜刻された楽譜を出力しません。‘-dno-print-pages’ と同じ効果を持ちます。

例: lilypond -dbackend=svg filename.ly

preview

このオプションはすべてのバックエンド – scm を除く pdf, png, +ps, eps, それに svg – でサポートされます。生成される出力は ファイル名.preview.拡張子 という形式のファイル名で、タイトルと楽譜の最初の段を保持します。\book ブロックまたは \bookpart ブロックが使われている場合、出力には各 \book または \bookpart のタイトルが譜刻され、\paper の変数 print-all-headers#t にセットされている場合は各 \score ブロックの最初の段も譜刻されます。

通常の出力を抑制するには、必要に応じて ‘-dprint-pages’ または ‘-dno-print-pages’ オプションを使用してください。

gui

コマンド ラインに何も出力せず、すべての出力をログ ファイルにリダイレクトします。 + Windows ユーザへの注意: デフォルトで、lilypond.exe はすべての進捗情報をコマンド ウィンドウに出力しますが、lilypond-windows.exe は出力しません。出力をログ ファイルにリダイレクトさせるには、‘-dgui’ オプションをを使います。

print-pages

すべてのページを生成します。デフォルトです。‘-dno-print-pages’ は ‘-dpreview’ と組み合わせて使うと有用です。

-e,--evaluate=expr

.ly’ ファイルを解析する前に Scheme expr を評価します。複数の -e オプションが与えられた場合、それらは順番に評価されます。

Scheme 表記は guile-user モジュールの中で評価されます。そのため、expr の中で定義を使いたいのならば、コマンド ラインで以下を使用して、

lilypond -e '(define-public a 42)'

.ly ファイルの先頭に以下を含めます:

#(use-modules (guile-user))

Note: Windows ユーザはシングル クォートではなく、ダブル クォートを使う必要があります。

-f,--format=format

フォーマットを指定します。format の選択肢は ps, pdf, それに png です。

例: lilypond -fpng filename.ly

-h,--help

使用方法の要約を表示します。

-H,--header=FIELD

ヘッダ フィールドをファイル ‘BASENAME.FIELD’ に吐き出します。

-i,--init=file

init ファイルとして file をセットします (デフォルト: ‘init.ly’)。

--include, -I=directory

directory を入力ファイルのサーチ パスに追加します。

複数の -I オプションを与えることができます。検索は最初に指定されたディレクトリから開始され、入力ファイルが見つからない場合は次に指定されたディレクトリを検索します。

-j,--jail=user,group,jail,dir

lilypond を chroot jail 環境で実行します。(訳者: chroot jail 環境とはセキュリティのためにカレント プロセスに対してルート ディレクトリの位置を変更すること。)

--jail’ オプションは、Web サーバを通じての LilyPond 譜刻を提供する時や LilyPond が外部から提供されたソースを実行する時に、--safe よりも自由度の高い代替手段を提供します。

--jail オプションはコンパイル プロセスの開始直前に lilypond の ルートを jail に変更します。それからユーザとグループを提供された環境にマッチするように変更し、カレント ディレクトリは dir に変更されます。このセットアップは jail (牢獄) から抜け出せないということを (少なくとも理論的には) 保証します。--jail を指定した lilypond の実行はroot (ユーザ名) として行われる必要があります。通常、これは sudo を用いた安全な方法で行われます。

jail のセットアップは少々デリケートな問題です。LilyPond がソースをコンパイルするのに必要とされるものすべてを jail の内部 で見つけられるということを保証しなければならないからです。一般的なセットアップには以下の項目が含まれます:

専用のファイルシステムをセットアップする

noexec, nodev, nosuid などのセーフ オプションでマウントするための専用ファイルシステムを作成すべきです。こうすることで、LilyPond から実行可能形式ファイルを実行したり、デバイスに直接書き込むことは不可能になります。専用のパーティションを作成することを望まないのなら、適当なサイズのファイルを作成し、それを使用してループ デバイス (ループバック デバイス) をマウントしてください。専用ファイルシステムはさらに、LilyPond が許可されたディスク容量以上には書き込めないということを保証します。

専用のユーザをセットアップする

jail 内部で LilyPond を実行する際、低い権限を持つ専用のユーザとグループ (仮に lily/lily とします) で行うべきです。このユーザが書き込み可能なディレクトリが 1 つだけ存在すべきであり、それを dir に渡します。

jail の準備をする

LilyPond は実行中にいくつかのファイルを読み込む必要があります。それらのファイルをすべて jail にコピーしておきます。それらのファイルが本当のルート ファイル システムで存在しているパスと同じパスにコピーします。LilyPond インストールの内容すべて (例えば、‘/usr/share/lilypond’) をコピーすべきです。

問題が発生した場合、その原因を突き止める最も簡単な方法は strace を使って LilyPond を実行することです。これによりどのファイルが見当たらないのかがわかります。

LilyPond を実行する

noexec でマウントされた jail の中では、外部プログラムを実行することは一切できません。そのため、外部プログラムを必要としないバックエンドで LilyPond を実行しなければなりません。すでに述べたように、jail モードでの LilyPond の実行はスーパーユーザ権限で行われならず (もちろん、その権限はすぐに外されます)、たぶん sudo を使います。LilyPond が使用可能な CPU 時間を数秒に制限する (例えば、ulimit -t を使って) というのは良いアイディアです。さらに、OS がサポートしているのなら、割り当て可能なメモリ容量を制限するというのも良いアイディアです。

-l,--loglevel=LEVEL

コンソール出力の饒舌さを LEVEL にセットします。取り得る値は以下の通りです:

NONE

何も出力しません。エラー メッセージさえも出力しません。

ERROR

エラー メッセージだけを出力します。警告や進捗メッセージは出力しません。

WARN

警告とエラー メッセージを出力し、進捗メッセージは出力しません。

BASIC_PROGRESS

基本的な進捗メッセージ (成功メッセージ)、警告、それにエラー メッセージを出力します。

PROGRESS

しべての進捗メッセージ、警告とエラー メッセージを出力します。

INFO (デフォルト)

進捗メッセージ、警告、エラーそれに追加の実行情報を出力します。

DEBUG

饒舌なデバッグ出力を含む、出力可能なメッセージをすべて出力します。

-o,--output=FILE or FOLDER

デフォルトの出力ファイルとして FILE をセットします。セットした名前のフォルダが存在する場合、そのフォルダに出力されます。適切な接尾辞が追加されます (つまり、pdf ならば拡張子 .pdf が追加されます)。

--ps

PostScript を生成します。

--png

各ページの図を PNG フォーマットで生成します。これは内部で --ps を使用します。画像の DPI 解像度は以下のようにセットします:

-dresolution=110
--pdf

PDF を生成します。これは内部で --ps を使用します。

-v,--version

バージョン情報を表示します。

-V,--verbose

冗長表示モードにします: 読み込むすべてのファイルのフル パスを表示して、時間情報を表示します。

-w,--warranty

GNU LilyPond の保証責任を表示します。(GNU LilyPond には保証責任はありません!)


環境変数

lilypond は以下の環境変数を認識します:

LILYPOND_DATADIR

これはデフォルトで参照するロケール メッセージとデータ ファイルがあるディレクトリを指定します。このディレクトリは ‘ly/’, ‘ps/’, ‘tex/’ などのサブディレクトリを保持しているべきです。

LANG

これは警告メッセージの言語を選択します。

LILYPOND_LOGLEVEL

デフォルトのログレベル。明示的にログレベルが指定されずに LilyPond が呼び出された場合 (すなわち ‘--loglevel’ コマンド ライン オプションが指定されなかった場合)、この値が使用されます。

LILYPOND_GC_YIELD

メモリ管理を調節する変数 (単位はパーセント) です。大きな値は LilyPond に多くのメモリ使用を許し、小さな値だと CPU 使用時間が長くなります。デフォルト値は 70 です。 この変数を使ってメモリ使用量とパフォーマンスを調節することができます。これはメモリ管理の振る舞いを調整するパーセント値です。高い値にするとプログラムはより多くのメモリを使用し、低い値にするとより多くの CPU 時間を使用します。デフォルト値は 70 です。


chroot jail 環境で LilyPond を実行する

LilyPond を chroot jail 環境で実行させるようサーバをセットアップすることは複雑な作業です。以下にステップをリスト アップします。各ステップの中にある例は Ubuntu Linux 用であり、sudo の使用が必要となるかもしれません。

32-bit Ubuntu 8.04 用のスクリプト例

#!/bin/sh
## defaults set here

username=lily
home=/home
loopdevice=/dev/loop0
jaildir=/mnt/lilyloop
# the prefix (without the leading slash!)
lilyprefix=usr/local
# the directory where lilypond is installed on the system
lilydir=/$lilyprefix/lilypond/

userhome=$home/$username
loopfile=$userhome/loopfile
adduser $username
dd if=/dev/zero of=$loopfile bs=1k count=200000
mkdir $jaildir
losetup $loopdevice $loopfile
mkfs -t ext3 $loopdevice 200000
mount -t ext3 $loopdevice $jaildir
mkdir $jaildir/lilyhome
chown $username $jaildir/lilyhome
cd $jaildir

mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp
chmod a+w tmp

cp -r -L $lilydir $lilyprefix
cp -L /bin/sh /bin/rm bin
cp -L /usr/bin/convert /usr/bin/gs usr/bin
cp -L /usr/share/fonts/truetype usr/share/fonts

# Now the library copying magic
for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh"  \
  "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=>  \
    \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed  \
      's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/'  \
        | sed '/.*=>.*/d'; done | sh -s

# The shared files for ghostscript...
      cp -L -r /usr/share/ghostscript usr/share
# The shared files for ImageMagick
      cp -L -r /usr/lib/ImageMagick* usr/lib

### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome,
### you should be able to run:
### Note that /$lilyprefix/bin/lilypond is a script, which sets the
### LD_LIBRARY_PATH - this is crucial
      /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly

脚注

[1] GUILE のステータスは .ly 処理後にリセットされません。そのため、Scheme 内部からいかなるシステム デフォルトも変更しないよう注意してください。


他の言語: English, deutsch, español, français, magyar, italiano
About automatic language selection.

LilyPond — 使用方法