[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# ドキュメントをご覧ください。
以上、ご覧いただき有難うございました。