@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-

@ignore
    Translation of GIT committish: 499a511d4166feaada31114e097f86b5e0c56421

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  See TRANSLATION for details.
@end ignore

@c \version "2.12.0"

@c Translators: Yoshiki Sawada
@c Translation status: post-GDP

@node lilypond を実行する
@chapter lilypond を実行する
@translationof Running lilypond

この章では LilyPond を実行するための細かな規定について詳述します。

@menu
* 通常の使用方法::
* コマンド ラインの使用方法::
* エラー メッセージ::
@end menu


@node 通常の使用方法
@section 通常の使用方法
@translationof Normal usage

たいていのユーザは GUI から LilyPond を実行します。@c
FIXME FIXME FIXME を@c
@c @rlearning{最初のステップ} を@c
まだ読んでいないのなら、それを読んでください。


@node コマンド ラインの使用方法
@section コマンド ラインの使用方法
@translationof Command-line usage

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

ここで @q{コマンド ライン} とは、OS の中にあるコマンド ラインを意味します。@c
Windows ユーザは @q{DOS シェル} という言葉の方が馴染みがあるかもしれません。@c
MaxOS@tie{}X ユーザは @q{ターミナル} や @q{コンソール} という言葉の方が@c
馴染みがあるかもしれません。@c
MaxOS@tie{}X ユーザは 
FIXME
@c @ref{MacOS X のためのセットアップ} 
も読んでおくべきです。

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

@menu
* lilypond を呼び出す::
* lilypond のコマンド ライン オプション::
* 環境変数::
@end menu

@node lilypond を呼び出す
@subsection @command{lilypond} を呼び出す
@translationof Invoking lilypond

@cindex Invoking @command{lilypond} (@command{lilypond} を呼び出す)
@cindex command line options for @command{lilypond} (@command{lilypond} のためのコマンド ライン オプション)
@cindex options, command line (コマンド ライン オプション)
@cindex switches (切り換え)

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

@example
lilypond [@var{option}]@dots{} @var{file}@dots{}
@end example

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

@file{filename.ly} が処理されると、@c
lilypond は出力として @file{filename.ps} と @file{filename.pdf} を作り出します。@c
いくつかのファイルを指定することもできます。@c
その場合、それらのファイルは個々に処理されます。@c
@footnote{GUILE のステータスは @code{.ly} 処理後にリセットされません。@c
そのため、Scheme 内部からいかなるシステム デフォルトも変更しないよう注意してください。}

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

@example
#(define output-suffix "violin")
\book @{ @dots{} @}
#(define output-suffix "cello")
\book @{ @dots{} @}
@end example

@noindent
@var{base}@file{-violin.pdf} と @var{base}@file{-cello-1.pdf} を出力します。


@node lilypond のコマンド ライン オプション
@subsection @command{lilypond} のコマンド ライン オプション
@translationof Command line options for lilypond

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

@table @code

@item -e,--evaluate=@var{expr}
@file{.ly} ファイルを解析する前に Scheme @var{expr} を評価します。@c
複数の @code{-e} オプションが与えられた場合、それらは順番に評価されます。

表記は @code{guile-user} モジュールの中で評価されます。@c
そのため、@var{expr} の中で definition を使いたいのならば、@c
@code{.ly} ファイルに以下をインクルードして:

@example
#(use-modules (guile-user))
@end example

@noindent
コマンド ラインで以下を使用します:

@example
lilypond -e '(define-public a 42)'
@end example



@item -f,--format=@var{format}
フォーマットを指定します。@c
@code{format} には @code{svg}, @code{ps}, @code{pdf}, @code{png} を選択します。

例: @code{lilypond -fpng @var{filename}.ly}



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

@cindex point and click, command line (コマンド ラインからポイント＆クリックを制御する)

@example
-dno-point-and-click
@end example

@noindent
は
@example
-dpoint-and-click='#f'
@end example
と同じです。

ここで興味深いオプションをいくつか挙げます。

@table @samp
@item help
@code{lilypond -dhelp} を実行すると@c
使用可能な @code{-d} オプションがすべて表示されます。

@item paper-size
このオプションはデフォルトの用紙サイズをセットします。
@example
-dpaper-size=\"letter\"
@end example

@noindent
文字列はエスケーブされたクォート ( @code{\"} ) で@c
囲まれていなければならないということに注意してください。
@c Match " in previous line to help context-sensitive editors

@item safe
@code{.ly} 入力を信用してはいけません。

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

@quotation
@verbatim
#(system "rm -rf /")
{
  c4^#(ly:export (ly:gulp-file "/etc/passwd"))
}
@end verbatim
@end quotation

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

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

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

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

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

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

@cindex output format, setting (出力フォーマットを設定する)
@item backend
バックエンドに対して使用する出力フォーマットを指定します。@c
@code{format} の選択肢には以下があります:
@table @code
@item ps
@cindex PostScript output (PostScript 出力)
 PostScript

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

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

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

@item svg
@cindex SVG (Scalable Vector Graphics)
 SVG (Scalable Vector Graphics)。@c
これは各ページを@c
フォントを埋め込まれた個別の @file{SVG} ファイルとして吐き出します。@c
埋め込みフォントをサポートする SVG ビューアか@c
埋め込みフォントを OTF フォントに置き換える機能を持つ SVG ビューアが必要になります。@c
UNIX では、@c
@uref{http://www.inkscape.org,Inkscape} (バージョン 0.42 以降) を@c
使うことになるかもしれません。@c
使用前に、OTF フォントを LilyPond ディレクトリ 
(一般には @file{/usr/share/lilypond/VERSION/fonts/otf/}) から 
@file{~/.fonts/} にコピーしてください。
@item scm
@cindex Scheme dump (Scheme ダンプ)
 生データ -- 内部 Scheme ベース描画コマンド -- を吐き出します。

@item null
 譜刻された楽譜を出力しません。@c
@code{-dno-print-pages} と同じ効果を持ちます。
@end table

例: @code{lilypond -dbackend=svg @var{filename}.ly}

@item preview
タイトルとファイル システム情報を保持している出力ファイルを生成します。
@item print-pages

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

@end table



@item -h,--help
使用方法の要約を表示します。

@item -H,--header=@var{FIELD}
ヘッダ フィールドをファイル @file{BASENAME.@var{FIELD}} に吐き出します。

@item --include, -I=@var{directory}
@var{directory} を入力ファイルのサーチ パスに追加します。
@cindex file searching (ファイル検索)
@cindex search path (サーチ パス)

@item -i,--init=@var{file}
init ファイルとして @var{file} をセットします (デフォルト: @file{init.ly})。

@item -o,--output=@var{FILE}
デフォルトの出力ファイルとして @var{FILE} をセットします。@c
適切な接尾辞が追加されます (つまり、pdf ならば拡張子 @code{.pdf} が追加されます)。

@item --ps
PostScript を生成します。

@item --png
各ページの図を PNG フォーマットで生成します。@c
これは内部で @code{--ps} を使用します。@c
画像の DPI 解像度は以下のようにセットします:
@example
-dresolution=110
@end example

@item --pdf
PDF を生成します。@c
これは内部で @code{--ps} を使用します。



@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
@command{lilypond} を chroot jail 環境で実行します。@c
(訳者: chroot jail 環境とはセキュリティのために@c
カレント プロセスに対してルート ディレクトリの位置を変更すること。)

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

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

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

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

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

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

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

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


@item -v,--version
バージョン情報を表示します。

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

@item -w,--warranty
GNU LilyPond の保証責任を表示します。@c
(GNU LilyPond には@strong{保証責任はありません}！)
@end table

@node 環境変数
@subsection 環境変数
@translationof Environment variables

@cindex LANG
@cindex LILYPOND_DATADIR

@command{lilypond} は以下の環境変数を認識します:
@table @code
@item LILYPOND_DATADIR
これはデフォルトで参照する@c
ロケール メッセージとデータ ファイルがあるディレクトリを指定します。@c
このディレクトリは @file{ly/}, @file{ps/}, @file{tex/} などの@c
サブディレクトリを保持しているべきです。

@item LANG
これはワーニング メッセージの言語を選択します。

@item LILYPOND_GC_YIELD
この変数を使ってメモリ使用量とパフォーマンスを調節することができます。@c
これはメモリ管理の振る舞いを調整するパーセント値です。@c
高い値にするとプログラムはより多くのメモリを使用し、@c
低い値にするとより多くの CPU 時間を使用します。@c
デフォルト値は @code{70} です。

@end table


@node エラー メッセージ
@section エラー メッセージ
@translationof Error messages

@cindex error messages (エラー メッセージ)
ファイルのコンパイルの最中にはさまざまなエラー メッセージが@c
表示される可能性があります。

@table @emph

@item Warning
@cindex warning (ワーニング)
何か疑わしいことがあります。@c
あなたが何か普通でないことをリクエストしている場合は、@c
そのメッセージを理解して、それを無視することができます。@c
しかしながら、@c
Warning は通常、入力ファイルに何か問題があることを示しています。

@item Error
何か明らかに問題があります。@c
カレントの処理ステップ (構文解析、構文解釈、フォーマット) は終了され、@c
次のステップは飛ばされます。

@item Fatal error
@cindex error (エラー)
@cindex fatal error (致命的なエラー)
何か明らかに問題があり、LilyPond はコンパイルを続けられません。@c
これが起きることは稀です。@c
これが起こるのはたいてい、フォントのインストールに問題があるためです。

@item Scheme error
@cindex trace, Scheme (Scheme トレース)
@cindex call trace (トレースを呼び出す)
@cindex Scheme error (Scheme エラー)
Scheme コードの実行中に発生するこのエラーは 
Scheme インタプリタによって引き起こされます。@c
冗長オプション (@code{-V} または @code{--verbose}) 付きで実行している場合、@c
問題となっている関数呼び出しの呼び出し追跡が表示されます。

@item Programming error
@cindex Programming error (プログラミング エラー)
内部的な矛盾があります。@c
このエラー メッセージはプログラマとデバッガを助けることを意図したものです。@c
通常、それらは無視できます。@c
時々、それらは非常に大きなメッセージとなり、他の出力を見えにくくします。

@item Aborted (core dumped)
これは、プログラムをクラッシュさせる深刻なプログラミング エラーを@c
示しています。@c
そのようなエラーは決定的なものだと考えられます。@c
あなたがそのようなエラーでつまずいた場合、バグ レポートを送ってください。
@end table

@cindex errors, message format (エラー メッセージの形式)
警告とエラーを入力ファイルのある部分にリンクさせることが可能な場合、@c
エラー メッセージは以下のような形式になります:

@example
@var{filename}:@var{lineno}:@var{columnno}: @var{message}
@var{offending input line}
@end example

エラーが見つかった場所を示すために問題のある行に改行が挿入されます。@c
例えば:

@example
test.ly:2:19: error: not a duration: 5
  @{ c'4 e'
           5 g' @}
@end example

これらの位置は LilyPond が警告やエラーが発生した位置を@c
最善を尽くして推測したものですが、@c
(ごく当たり前のことですが) 警告とエラーは@c
何か予期しないことが起こったときに発生するものです。@c
入力ファイルの示された行にエラーを見つけることができない場合は、@c
示された位置の 1 行か 2 行上をチェックしてみてください。

