[ICT] Microsoft F# Interactive (FSI)環境とコードを書かずデバッグなしで MVC アプリを試す方法

localport_7020
0
(0)

.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# ドキュメントをご覧ください。

以上、ご覧いただき有難うございました。

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Global Information and Communication Technology OTAKU / Sports volunteer / Social Services / Master of Technology in Innovation for Design and Engineering, AIIT / BA, Social Welfare, NFU / twitter@yukio_saitoh