X
Subscribe for notification

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

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

斉藤之雄 (Yukio Saito): 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

This website uses cookies.