Windowsの標準スクリプト言語と言えばPowerShellですが、個人的にPowerShellの文法が好きではないので、普段はF#をスクリプト言語として使うということをやっています*1。
F#は関数型言語ですが、純粋関数型言語のHaskellほど窮屈な原理主義を強制するものではないものの、C#よりも厳格で副作用の少ないコードを書きやすいので、頭の体操がてらに「better C#」としてゆるく使っています。
そんな大層な使い方をしているわけではなく、.NETクラスライブラリを使ってファイルシステムを正規表現検索するなど、現状ではちょっとした雑用の自動化にしか使っていません。
F#の対話環境「F# Interactive」は、C# Interactiveと同様にVisual Studioにも統合されているので、ちょっとしたコードを試すのに便利です。
VS2015では、インストール後に拡張子.fsxにVisual Studioが関連付けられ、さらにコンテキストメニューに「Run with F# interactive...」というコマンドが追加されていましたが、VS2022ではそういったことはありません。開発・実行環境のメインストリームが.NET Frameworkから.NET (.NET Core) に移ったことで、実行基盤であるCLRのバージョンが流動的になったことと関係しているのだと思います。
.NETではdotnetコマンドを使うことで、ビルドなどの.NETプロジェクトに関連する様々なタスクを実行することができるようになっていますが、dotnet fsiコマンドを使うことで、F# Interactiveを起動することができ、従来通り.fsxファイルを指定してスクリプトを実行させることもできます。
レジストリをいじってコンテキストメニューに従来の互換コマンドを追加することもできるはずですが、今後はコマンドラインから明示的に起動するほうがよいかもしれません。
.NET CLIテレメトリ
Visual StudioからF# Interactiveを最初に起動すると、以下のようなメッセージが出力されます。
Visual Studio の .NET Core の F# インタラクティブへようこそ。コードを実行するには、
1. F# スクリプトから [Interactive に送信] (Alt+Enter または右クリック) を使用します。F# インタラクティブ プロセスでは、
そのスクリプトに関連付けられている任意の global.json 設定が使用されます。
2. 開始するには、Enter キーを押します。F# インタラクティブ プロセスでは、既定の設定が使用されます。
> ここでEnterキーを押してみると、以下のようなメッセージが続けて出力されます。
.NET 9.0 へようこそ! --------------------- SDK バージョン: 9.0.306 テレメトリ --------- .NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。 .NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry ---------------- ASP.NET Core HTTPS 開発証明書をインストールしました。 証明書を信頼するには、'dotnet dev-certs https --trust' を実行します HTTPS の詳細情報: https://aka.ms/dotnet-https ---------------- 最初のアプリを作成するには、https://aka.ms/dotnet-hello-world を参照してください 最新情報については、https://aka.ms/dotnet-whats-new を参照してください ドキュメントを探すには、https://aka.ms/dotnet-docs を参照してください GitHub で問題の報告とソースの検索を行うには、https://github.com/dotnet/core を参照してください 'dotnet --help' を使用して使用可能なコマンドを確認するか、https://aka.ms/dotnet-cli にアクセスしてください -------------------------------------------------------------------------------------- Microsoft (R) F# インタラクティブ バージョン F# 9.0 のための 13.9.303.0 Copyright (C) Microsoft Corporation. All rights reserved. ヘルプを表示するには次を入力してください: #help;; > val it: unit = () >
出ました、MSによる個人情報の勝手な収集・送信癖。
How to opt out
The .NET SDK telemetry feature is enabled by default for Microsoft distributions of the SDK. To opt out of the telemetry feature, set the
DOTNET_CLI_TELEMETRY_OPTOUTenvironment variable to1ortrue.A single telemetry entry is also sent by the .NET SDK installer when a successful installation happens. To opt out, set the
DOTNET_CLI_TELEMETRY_OPTOUTenvironment variable before you install the .NET SDK.
Data points
The telemetry feature doesn't collect personal data, such as usernames or email addresses. It doesn't scan your code and doesn't extract project-level data, such as name, repository, or author. ……
ドキュメントによると、一応ユーザー名やメールアドレスのような個人データは収集せず、ユーザーが書いたコードなどもスキャンしないと書かれていますが、どうなるか分かったものではありません。ネットワークを無駄に使われるのも気に入らないので、環境変数DOTNET_CLI_TELEMETRY_OPTOUTを設定して無効化します。
setxコマンドを使って設定する方法を紹介している人が多いですが、おなじみのシステムプロパティ(詳細設定)ダイアログのGUIからシステム環境変数またはユーザー環境変数を作成してもよいはずです。
最悪なことに、この.NET CLIテレメトリはデフォルトで有効化されてしまっており、環境変数を設定せずに.NET SDKインストーラーを実行すると、初回の利用データは必ず送信されてしまいます。
環境変数を設定しておけば、以後の利用データは送信されない動作になるはずですが、もしインストール時の初回の利用データも含めて一切送信したくない場合は、.NET SDKをインストールする前(.NET CLIツールを使い始める前)に環境変数を設定しておく必要があります。
以前Visual Studio 2019で.NET 5を使っていた頃は、テレメトリ機能のオプトアウトのために環境変数を設定した記憶はないのですが、当時気付いていなかっただけのようです。
Android StudioやFirefoxなど、他の開発環境やブラウザでも利用データやクラッシュレポートなどを収集する機能はありますが、データを開発元に送信するかどうかは最初に必ずダイアログで確認をとるようになっています(オプトイン)。こういう機能をデフォルト有効のオプトアウト方式にするのはアカンでしょ。EUのGDPRに違反してるんじゃねーの? 通報しようか?
昔からMSは汚い企業だったけど、さすがにここまで下劣ではなかったと思うよ。バルマーが失脚してインド人のサティア・ナデラがCEOになってから業績は好調のようだけど、なりふり構わないというか本当に無節操になったと感じます。どうもアイツは胡散臭くて好かんね。