F# インタラクティブのオプション

この記事では、F# インタラクティブ (fsi.exe) でサポートされているコマンド ライン オプションについて説明します。 F# インタラクティブでは、F# コンパイラと同じコマンド ライン オプションを数多く使用できますが、その他にもいくつかのオプションを使用できます。

スクリプトに F# インタラクティブを使用する

F# インタラクティブ (dotnet fsi) は、対話形式で起動することも、コマンド ラインから起動してスクリプトを実行することもできます。 コマンド ラインの構文は次のとおりです

dotnet fsi [options] [ script-file [arguments] ]

F# スクリプト ファイルのファイル拡張子は .fsx です。

F# Interactive のオプションの表

次の表は、F# Interactive でサポートされるオプションの一覧です。 これらのオプションは、コマンド ラインまたは Visual Studio IDE で設定できます。 Visual Studio IDE でこれらのオプションを設定するには、 [ツール] メニューを開き、 [オプション] を選択し、 [F# ツール] ノードを展開して、 [F# インタラクティブ] を選択します。

F# Interactive オプションの引数でリストを指定する場合は、リストの要素をセミコロン (;) で区切ります。

オプション 説明
-- 残りの引数を F# のプログラムまたはスクリプトへのコマンド ライン引数として扱うよう、F# インタラクティブに指示するために使用します。これらの引数には、リスト fsi.CommandLineArgs を使用してコードでアクセスできます。
--checked[+|-] fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--codepage:<int> fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--consolecolors[+|-] 警告メッセージとエラー メッセージを色つきで表示します。
**--compilertool:<extensionsfolder> デザイン時ツールを含むアセンブリまたはディレクトリを参照します (短い形式: -t)。
--crossoptimize[+|-] モジュール間の最適化を有効または無効にします。
--debug[+|-]

--debug:[full|pdbonly|portable|embedded]

-g[+|-]

-g:[full|pdbonly|portable|embedded]
fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--define:<string> fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--deterministic[+|-] 決定論的アセンブリを作成します (モジュール バージョン GUID やタイムスタンプなど)。
--exec ファイルを読み込んだ後、またはコマンド ラインで指定したスクリプトを実行した後に F# Interactive を終了するように指示します。
--fullpaths fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--gui[+|-] Windows フォーム イベントのループを有効または無効にします。 既定値は有効です。
--help

-?
各オプションのコマンド ライン構文と簡単な説明を表示するために使用します。
--lib:<folder-list>

-I:<folder-list>
fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--load:<filename> 指定したソース コードを起動時にコンパイルし、コンパイルされた F# の構成要素をセッションに読み込みます。
--mlcompatibility fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--noframework fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください
--nologo fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--nowarn:<warning-list> fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--optimize[+|-] fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--preferreduilang:<lang> 優先する出力用言語のカルチャ名を指定します (例: es-ES、ja-JP)。
--quiet stdout ストリームへの F# インタラクティブの出力を抑制します。
--quotations-debug 追加のデバッグ情報が F# 引用符リテラルとリフレクション定義から派生した式に対して生成されるように指定します。 デバッグ情報は F# 式ツリー ノードのカスタム属性に追加されます。 「コード引用符」と「Expr.CustomAttributes」を参照してください。
--readline[+|-] 対話モードでのタブ補完を有効または無効にします。
--reference:<filename>

-r:<filename>
fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--tailcalls[+|-] tail IL 命令の使用を有効または無効にします。有効にすると、スタック フレームが tail 再帰関数で再利用されます。 既定では、このオプションは有効になっています。
--targetprofile:<string> このアセンブリのターゲット フレームワーク プロファイルを指定します。 有効な値は、mscorlibnetcore、または netstandard です。 既定値は、mscorlib です。
--use:<filename> 指定したファイルを起動時に最初の入力として使用するよう、インタープリターに指示します。
--utf8output fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--warn:<warning-level> fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--warnaserror[+|-] fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。
--warnaserror[+|-]:<int-list> fsc.exe コンパイラ オプションと同じです。 詳細については、「コンパイラ オプション」を参照してください。

F# インタラクティブの構造化された出力

F# インタラクティブ (dotnet fsi) での値の報告には、構造化されたプレーンテキストの書式設定の拡張バージョンが使用されます。

  1. %A プレーンテキスト書式設定のすべての機能がサポートされており、さらにカスタマイズも可能です。

  2. 出力コンソールで色がサポートされている場合、出力は色付けされます。

  3. 文字列を明示的に評価しない限り、表示される文字列の長さには制限が適用されます。

  4. fsi オブジェクトを介して、ユーザー定義可能な一連の設定を使用できます。

報告される値のプレーンテキスト出力をカスタマイズするために使用できる設定は次のとおりです。

open System.Globalization

fsi.FormatProvider <- CultureInfo("de-DE")  // control the default culture for primitives

fsi.PrintWidth <- 120        // Control the width used for structured printing

fsi.PrintDepth <- 10         // Control the maximum depth of nested printing

fsi.PrintLength <- 10        // Control the length of lists and arrays

fsi.PrintSize <- 100         // Control the maximum overall object count

fsi.ShowProperties <- false  // Control whether properties of .NET objects are shown by default

fsi.ShowIEnumerable <- false // Control whether sequence values are expanded by default

fsi.ShowDeclarationValues <- false // Control whether values are shown for declaration outputs

AddPrinterAddPrintTransformer を使用してカスタマイズする

F# インタラクティブの出力の印刷は、fsi.AddPrinterfsi.AddPrintTransformer を使用してカスタマイズできます。 1 つ目の関数を使用して、オブジェクトの印刷を置き換えるテキストを提供します。 2 つ目の関数からは、代わりに表示するサロゲート オブジェクトが返されます。 たとえば、次の F# コードについて考えます。

open System

fsi.AddPrinter<DateTime>(fun dt -> dt.ToString("s"))

type DateAndLabel =
    { Date: DateTime
      Label: string  }

let newYearsDay1999 =
    { Date = DateTime(1999, 1, 1)
      Label = "New Year" }

F# インタラクティブで例を実行すると、書式設定オプションのセットに基づいて出力されます。 この場合、日付と時刻の書式設定に影響します。

type DateAndLabel =
  { Date: DateTime
    Label: string }
val newYearsDay1999 : DateAndLabel = { Date = 1999-01-01T00:00:00
                                       Label = "New Year" }

fsi.AddPrintTransformer を使用すると、印刷のサロゲート オブジェクトを指定できます。

type MyList(values: int list) =
    member _.Values = values

fsi.AddPrintTransformer(fun (x:MyList) -> box x.Values)

let x = MyList([1..10])

これにより、以下が出力されます。

val x : MyList = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]

fsi.AddPrintTransformer に渡したトランスフォーマー関数から null が返される場合、印刷トランスフォーマーは無視されます。 これは、obj 型で始まる入力値をフィルター処理するために使用できます。 次に例を示します。

fsi.AddPrintTransformer(fun (x:obj) ->
    match x with
    | :? string as s when s = "beep" -> box ["quack"; "quack"; "quack"]
    | _ -> null)

let y = "beep"

これにより、以下が出力されます。

val y : string = ["quack"; "quack"; "quack"]
Title 説明
コンパイラ オプション F# コンパイラ fsc.exe で使用できるコマンド ライン オプションについて説明します。