[ICT] Microsoft F# Interactive (FSI)環境とコードを書かずデバッグなしで MVC アプリを試す方法
.NET 環境で利用できます。
.NET (dotnet) 環境の導入はこちら:
.NET | 無料。 クロスプラットフォーム。 オープン ソース。 (microsoft.com)
コマンドライン(CLI) 環境での利用方法:
>dotnet fsi [Ent] で起動します。

F# インタラクティブ ディレクティブ:
#r "file.dll";; // 指定された DLL を参照します (動的読み込み) #i "package source uri";; // パッケージの検索時にパッケージ ソースの URI を含める #I "path";; // 参照されている DLL に対し、指定された検索パスを追加します #load "file.fs" ...;; // コンパイルおよび参照されているように、指定されたファイルを読み込みます #time ["on"|"off"];; // タイミングのオンとオフを切り替えます #help;; // ヘルプの表示 #r "nuget:FSharp.Data, 3.1.2";; // NuGet パッケージの読み込み 'FSharp.Data' バージョン '3.1.2' #r "nuget:FSharp.Data";; // NuGet パッケージの読み込み 'FSharp.Data' 最新バージョン #quit;; // 終了
>dotnet fsi –help 参照
c:\>dotnet fsi --help
Microsoft (R) F# インタラクティブ バージョン F# 6.0 のための 12.0.0.0
Copyright (C) Microsoft Corporation. All rights reserved.
使用状況: dotnet fsi <オプション> [script.fsx [<引数>]]
- 入力ファイル -
--use:<file> 指定されたファイルをスタートアップ時の初期入力として使用します
--load:<file> #load: 指定されたファイルをスタートアップ時に読み込みます
--reference:<file> アセンブリを参照します (短い形式: -r)
--compilertool:<file> デザイン時ツールを含むアセンブリまたはディレクトリを参照します (短い形式: -t)
--usesdkrefs[+|-] 使用可能な場合は、.NET Framework リファレンスの参照アセンブリを使用します (既定で有効)。
-- ... 残りの引数は、fsi.CommandLineArgs を使用してアクセスするコマンド ライン引数として扱います
- コード生成 -
--debug[+|-] デバッグ情報を生成します (短い形式: -g)
--debug:{full|pdbonly|portable|embedded} デバッグの種類 full、portable、pdbonly を指定します (デバッグの種類が指定されない場合には 'pdbonly'
が既定で、実行中のプログラムにデバッガーを付加することができます。'portable' はクロスプラットフォーム形式、'embedded'
は出力ファイルに埋め込まれたクロスプラットフォーム形式です)。
--optimize[+|-] 最適化を有効にします (短い形式: -O)
--tailcalls[+|-] tail の呼び出しを有効または無効にします
--deterministic[+|-] 決定論的アセンブリを作成します (モジュール バージョン GUID やタイムスタンプなど)
--pathmap:<path=sourcePath;...> 物理パスをコンパイラ出力のソース パス名にマップします
--crossoptimize[+|-] モジュール間の最適化を有効または無効にします
- エラーと警告 -
--warnaserror[+|-] すべての警告をエラーとして報告する
--warnaserror[+|-]:<warn;...> 指定した警告をエラーとして報告する
--warn:<n> 警告レベル (0 ~ 5) を設定します
--nowarn:<warn;...> 指定の警告メッセージを無効にする
--warnon:<warn;...> 既定でオフにすることができる特定の警告を有効にします
--consolecolors[+|-] 警告メッセージとエラー メッセージを色つきで表示します
- 言語 -
--langversion:{?|version|latest|preview} 言語バージョンで許可された値を表示し、'最新' や 'プレビュー' などの言語バージョンを指定する
--checked[+|-] オーバーフロー チェックの生成
--define:<string> 条件付きコンパイル シンボルを定義します (短い形式: -d)
--mlcompatibility ML 互換性に関する警告を無視します
- その他 -
--nologo コンパイラーの著作権メッセージを表示しません
--version コンパイラ バージョンのバナーを表示して終了する
--help この使用方法に関するメッセージを表示します (短い形式: -?)
- 詳細 -
--codepage:<n> ソース ファイルの読み取りに使用するコードページを指定します
--utf8output UTF-8 エンコードでメッセージを出力します
--preferreduilang:<string> 優先する出力用言語のカルチャ名を指定します (例: es-ES, ja-JP)
--fullpaths 完全修飾パスを含むメッセージを出力します
--lib:<dir;...> ソース ファイルおよびアセンブリの解決に使用する include パスのディレクトリを指定します (短 い形式: -I)
--simpleresolution MSBuild の解決ではなく、ディレクトリベースの規則を使用してアセンブリの参照を解決します
--targetprofile:<string> このアセンブリのターゲット フレームワーク プロファイルを指定します。有効な値は、mscorlib、netcore、netstandard のいずれかです。既定 -
mscorlib
--noframework 既定では、既定の CLI アセンブリを参照しません
--exec コマンド ライン上で指定されたファイルの読み込みまたは .fsx スクリプトの実行後、fsi を終了します
--gui[+|-] Windows フォーム イベント ループでの対話の実行 (既定でオン)
--quiet fsi の stdout への書き込みの抑止
--readline[+|-] コンソールでの TAB 補完のサポート (既定でオン)
--quotations-debug[+|-] デバッグ情報を引用符で囲んで生成します
--shadowcopyreferences[+|-] 参照が F# インタラクティブ プロセスによってロックされないようにします。
Microsoft Visual Studio 2022 Community Edition での FSI 利用方法:
ここでは本ブログに掲載するため新規プロジェクト作成検索フォームに “F#”, すべてのプラットフォーム, Web を対象としました。

===
例として ASP.NET Core Web アプリ (MVC) プロジェクトテンプレートを利用します。(説明用)

===
追加情報:フレームワーク .NET 6.0 (長期的なサポート)を指定し HTTPS 用の構成を有効にしました。

===
スケルトンが作成されるのでデバッグなしで開始を選択します。

===
ローカルホストでポートリッスン状態がコンソール表示されるので、適切な Web ブラウザ (Microsoft Edge など)で参照しましょう。

===
ちなみに、http://localhost:7020 http://localhost:5020 ともに同じ表示例となります。

===
何もコードを追加していないので F# (FSI) 要素が何処であるのか説明していませんが、もしこの実質無意味な Web アプリケーションを発行(公開)したければターゲット指定してください。

===
ちなみに、スケルトンで生成された内容は Visual Studio ソリューション エクスプローラで確認できます。
MVC のうち、Views “V” は C# html (*.cshtml) で、
“M” Models, “C” Controllers それぞれ F# (*.fs) 構成となっています。

===
コード例 Controllers\Program.fs
コードブロックは読みやすいですね。
namespace WebApplication1
#nowarn "20"
open System
open System.Collections.Generic
open System.IO
open System.Linq
open System.Threading.Tasks
open Microsoft.AspNetCore
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.HttpsPolicy
open Microsoft.Extensions.Configuration
open Microsoft.Extensions.DependencyInjection
open Microsoft.Extensions.Hosting
open Microsoft.Extensions.Logging
module Program =
let exitCode = 0
[<EntryPoint>]
let main args =
let builder = WebApplication.CreateBuilder(args)
builder
.Services
.AddControllersWithViews()
.AddRazorRuntimeCompilation()
builder.Services.AddRazorPages()
let app = builder.Build()
if not (builder.Environment.IsDevelopment()) then
app.UseExceptionHandler("/Home/Error")
app.UseHsts() |> ignore // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHttpsRedirection()
app.UseStaticFiles()
app.UseRouting()
app.UseAuthorization()
app.MapControllerRoute(name = "default", pattern = "{controller=Home}/{action=Index}/{id?}")
app.MapRazorPages()
app.Run()
exitCode
F# ドキュメント
F# 関連のドキュメント – 概要、チュートリアル、リファレンス。 | Microsoft Docs
プログラミング言語 F # の無料のコース、チュートリアル、ビデオ、およびその他の詳細情報
- F# によるプログラミングの学習
- F# 言語ガイド
- F# の基本
- F# ツール
- F# の実践
- F# の新機能
まとめ
- F# 環境の準備方法
- コードを全く書かずにデバッグなしで F# を使う MVC アプリを試すことが分かりました。
しょうもないくらいに内容を端折りましたが、F# は軽量動作できるマルチプラットフォーム。
どこが軽量なのかはコードサンプルをご覧いただくか、前述 F# ドキュメントをご覧ください。
以上、ご覧いただき有難うございました。
