Visual Studio Code での F# の概要Get Started with F# in Visual Studio Code

Ionide プラグインをF#使用してVisual Studio Codeに記述すると、IntelliSense とコードリファクタリングを使用して、優れたクロスプラットフォームで軽量の統合開発環境 (IDE) エクスペリエンスを実現できます。You can write F# in Visual Studio Code with the Ionide plugin to get a great cross-platform, lightweight Integrated Development Environment (IDE) experience with IntelliSense and code refactorings. プラグインの詳細については、 Ionide.ioを参照してください。Visit Ionide.io to learn more about the plugin.

まず、 F#と Ionide プラグインが正しくインストールされていることを確認します。To begin, ensure that you have F# and the Ionide plugin correctly installed.

Ionide を使用して最初のプロジェクトを作成するCreate your first project with Ionide

新しいF#プロジェクトを作成するには、コマンドラインを開き、.NET Core CLI を使用して新しいプロジェクトを作成します。To create a new F# project, open a command line and create a new project with the .NET Core CLI:

dotnet new console -lang F# -o FirstIonideProject

完了したら、ディレクトリをプロジェクトに変更し、Visual Studio Code を開きます。Once it completes, change directory to the project and open Visual Studio Code:

cd FirstIonideProject
code .

Visual Studio Code にプロジェクトが読み込まれると、ウィンドウのF#左側に [ソリューションエクスプローラー] ウィンドウが表示されます。After the project loads on Visual Studio Code, you should see the F# Solution Explorer pane on the left-hand side of your window open. これは、Ionide によって作成したプロジェクトが正常に読み込まれたことを意味します。This means Ionide has successfully loaded the project you just created. この時点より前に、エディターでコードを記述できますが、これが発生すると、すべての読み込みが完了します。You can write code in the editor before this point in time, but once this happens, everything has finished loading.

対話型F#の構成Configure F# interactive

最初に、.NET Core スクリプトが既定のスクリプト環境であることを確認します。First, ensure that .NET Core scripting is your default scripting environment:

  1. Visual Studio Code 設定 ([コード ** > の設定]** > 設定) を開きます。Open the Visual Studio Code settings (Code > Preferences > Settings).
  2. F#スクリプト」という用語を検索します。Search for the term F# Script.
  3. 「Fsharp.core: USE SDK scripts」というチェックボックスをオンにします。Click the checkbox that says FSharp: use SDK scripts.

これは現在、.NET Core スクリプトでは動作しない .NET Framework ベースのスクリプトのいくつかのレガシ動作のために必要です。また、Ionide は現在、旧バージョンとの互換性を維持するために努力しています。This is currently necessary due to some legacy behaviors in .NET Framework-based scripting that don't work with .NET Core scripting, and Ionide is currently striving for that backwards compatibility. 今後、.NET Core スクリプトが既定値になります。In the future, .NET Core scripting will become the default.

最初のスクリプトを作成するWrite your first script

.NET Core スクリプトを使用するように Visual Studio Code を構成したら、Visual Studio Code の [エクスプローラー] ビューに移動し、新しいファイルを作成します。Once you've configured Visual Studio Code to use .NET Core scripting, navigate to the Explorer view in Visual Studio Code and create a new file. 名前をMyFirstScript script.fsxにします。Name it MyFirstScript.fsx.

ここで、次のコードを追加します。Now add the following code to it:

let toPigLatin (word: string) =
    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' |'o' |'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
    if isVowel word.[0] then
        word + "yay"
    else
        word.[1..] + string(word.[0]) + "ay"

この関数は、単語をPig Latinの形式に変換します。This function converts a word to a form of Pig Latin. 次の手順では、F# Interactive (FSI) を使用して評価します。The next step is to evaluate it using F# Interactive (FSI).

関数全体をハイライト表示します (長さは 11 行である必要があります)。Highlight the entire function (it should be 11 lines long). 強調表示されたら、 Altキーを押しながらEnterキーを押します。Once it's highlighted, hold the Alt key and hit Enter. 画面の下部にターミナルウィンドウがポップアップ表示され、次のように表示されます。You'll notice a terminal window pop up on the bottom of the screen, and it should look similar to this:

Ionide の概要での F# Interactive の出力例

これは次の 3 つのことを行いました。This did three things:

  1. FSI.EXE プロセスを開始しました。It started the FSI process.
  2. FSI.EXE プロセスでハイライト表示したコードが送信されました。It sent the code you highlighted over the FSI process.
  3. FSI.EXE プロセスは、送信したコードを評価しました。The FSI process evaluated the code you sent over.

送信したのは関数だったので、fsi.exe! を使用してその関数を呼び出すことができるようになりました。Because what you sent over was a function, you can now call that function with FSI! 対話型ウィンドウで、次のように入力します。In the interactive window, type the following:

toPigLatin "banana";;

次の結果が表示されます。You should see the following result:

val it : string = "ananabay"

では、母音を最初の文字として試してみましょう。Now, let's try with a vowel as the first letter. 次のように入力します。Enter the following:

toPigLatin "apple";;

次の結果が表示されます。You should see the following result:

val it : string = "appleyay"

関数が期待どおりに動作しているようです。The function appears to be working as expected. これで、先ほど Visual Studio Code で初めて F# 関数を記述し、FSI でそれを評価しました。Congratulations, you just wrote your first F# function in Visual Studio Code and evaluated it with FSI!

注意

ご存知かもしれませんが、FSI.EXE の行は ;;で終了します。As you may have noticed, the lines in FSI are terminated with ;;. これは、FSI で複数の行を入力できるためです。This is because FSI allows you to enter multiple lines. 最後の ;; により、コードがいつ完了したかを FSI.EXE に知ることができます。The ;; at the end lets FSI know when the code is finished.

コードの説明Explaining the code

実際にコードが何をしているかわからない場合は、次のステップで説明します。If you're not sure about what the code is actually doing, here's a step-by-step.

ご覧のように、toPigLatin は、単語を入力として受け取り、その単語の Pig の表現に変換する関数です。As you can see, toPigLatin is a function that takes a word as its input and converts it to a Pig-Latin representation of that word. この規則は次のとおりです。The rules for this are as follows:

単語の最初の文字が母音で始まる場合は、単語の末尾に "yay" を追加します。If the first character in a word starts with a vowel, add "yay" to the end of the word. 母音で始まらない場合は、その最初の文字を単語の末尾に移動し、それに "ay" を追加します。If it doesn't start with a vowel, move that first character to the end of the word and add "ay" to it.

FSI.EXE では、次のことに気づいたかもしれません。You may have noticed the following in FSI:

val toPigLatin : word:string -> string

これは、toPigLatin が入力として string (word) を受け取り、別の stringを返す関数であることを示しています。This states that toPigLatin is a function that takes in a string as input (called word), and returns another string. これは、関数の型シグネチャと呼ばれます。これは、 F#コードを理解F#するための重要な基本要素です。This is known as the type signature of the function, a fundamental piece of F# that's key to understanding F# code. Visual Studio Code でカーソルを関数に合わせると、この点にも気づくでしょう。You'll also notice this if you hover over the function in Visual Studio Code.

関数の本体には、次の 2 つの異なる部分があります。In the body of the function, you'll notice two distinct parts:

  1. isVowelと呼ばれる内部関数。指定された文字 (c) が、指定されたパターンのいずれかと一致するかどうかをパターン一致によって確認することによって母音であるかどうかを判断します。An inner function, called isVowel, that determines if a given character (c) is a vowel by checking if it matches one of the provided patterns via Pattern Matching:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' |'o' |'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. 最初の文字が母音であるかどうかを確認し、最初の文字が母音であるかどうかに基づいて、入力文字から戻り値を構築するif..then..else式。An if..then..else expression that checks if the first character is a vowel, and constructs a return value out of the input characters based on if the first character was a vowel or not:

    if isVowel word.[0] then
        word + "yay"
    else
        word.[1..] + string(word.[0]) + "ay"
    

したがって、toPigLatin のフローは次のようになります。The flow of toPigLatin is thus:

入力された単語の最初の文字が母音であるかどうかを確認します。Check if the first character of the input word is a vowel. 母音の場合は、単語の末尾に "yay" を付加します。If it is, attach "yay" to the end of the word. それ以外の場合は、最初の文字を単語の末尾に移動し、それに "ay" を追加します。Otherwise, move that first character to the end of the word and add "ay" to it.

この点については最後に説明します。他の多くの言語とは異なり、関数から戻る明示的な命令はありません。There's one final thing to notice about this: there's no explicit instruction to return from the function, unlike many other languages out there. これは、 F# が式ベースであり、関数本体の最後の式が戻り値であるためです。This is because F# is Expression-based, and the last expression in the body of a function is the return value. if..then..else 自体が式であるため、入力値に応じて、then ブロックの本体または else ブロックの本体が返されます。Because if..then..else is itself an expression, the body of the then block or the body of the else block will be returned depending on the input value.

コンソールアプリを Pig Latin ジェネレーターにするTurn the console app into a Pig Latin generator

この記事の前のセクションには、F# コードの記述の一般的な最初の手順を示しました。 最初に関数を記述して、FSI を使用して対話的に実行します。The previous sections in this article demonstrated a common first step in writing F# code: writing an initial function and executing it interactively with FSI. これは REPL ドリブン開発と呼ばれます。 replは "Read Evaluate-Print Loop" を表します。This is known as REPL-driven development, where REPL stands for "Read-Evaluate-Print Loop". この機能を試してみることをお勧めします。It's a great way to experiment with functionality until you have something working.

REPL 駆動型開発の次の手順では、作業コードを F# 実装ファイルに移動します。The next step in REPL-driven development is to move working code into an F# implementation file. その後、F# コンパイラによって実行可能なアセンブリにコンパイルできます。It can then be compiled by the F# compiler into an assembly that can be executed.

まず、.NET Core CLI で作成したプログラムのファイルを開きます。To begin, open the Program.fs file that you created earlier with the .NET Core CLI. いくつかのコードが既にあることがわかるでしょう。You'll notice that some code is already in there.

次に、PigLatin という名前の新しいmoduleを作成し、先ほど作成した toPigLatin 関数を次のようにコピーします。Next, create a new module called PigLatin and copy the toPigLatin function you created earlier into it as such:

namespace ClassLibraryDemo

module PigLatin =
    let toPigLatin (word: string) =
        let isVowel (c: char) =
            match c with
            | 'a' | 'e' | 'i' |'o' |'u'
            | 'A' | 'E' | 'I' | 'O' | 'U' -> true
            |_ -> false
        
        if isVowel word.[0] then
            word + "yay"
        else
            word.[1..] + string(word.[0]) + "ay"

このモジュールは、main 関数の上、open System 宣言の下に配置する必要があります。This module should be above the main function and below the open System declaration. では、宣言のF#順序が重要であるため、関数をファイルで呼び出す前に定義する必要があります。Order of declarations matters in F#, so you'll need to define the function before you call it in a file.

次に、main 関数で、引数に対して Pig Latin generator 関数を呼び出します。Now, in the main function, call your Pig Latin generator function on the arguments:

[<EntryPoint>]
let main argv =
    for name in argv do
        let newName = PigLatin.toPigLatin name
        printfn "%s in Pig Latin is: %s" name newName

    0

これで、コマンドラインからコンソールアプリを実行できるようになりました。Now you can run your console app from the command line:

dotnet run apple banana

スクリプトファイルと同じ結果が出力されますが、今回は実行中のプログラムとして出力されます。And you'll see that it outputs the same result as your script file, but this time as a running program!

Ionide のトラブルシューティングTroubleshooting Ionide

発生する可能性のある特定の問題をトラブルシューティングする方法を次にします。Here are a few ways you can troubleshoot certain problems that you might run into:

  1. Ionide のコード編集機能を利用するにはF# 、ファイルをディスクに保存し、[Visual Studio Code] ワークスペースで開いているフォルダー内に保存する必要があります。To get the code editing features of Ionide, your F# files need to be saved to disk and inside of a folder that is open in the Visual Studio Code workspace.
  2. システムに変更を加えた場合、または Visual Studio Code を開いた状態で Ionide の前提条件をインストールした場合は、Visual Studio Code を再起動します。If you've made changes to your system or installed Ionide prerequisites with Visual Studio Code open, restart Visual Studio Code.
  3. プロジェクトディレクトリに無効な文字が含まれていると、Ionide が機能しない可能性があります。If you have invalid characters in your project directories, Ionide might not work. この場合は、プロジェクトディレクトリの名前を変更します。Rename your project directories if this is the case.
  4. Ionide コマンドがいずれも動作していない場合は、 Visual Studio Code キーバインドを調べて、誤って上書きされていないかどうかを確認します。If none of the Ionide commands are working, check your Visual Studio Code keybindings to see if you're overriding them by accident.
  5. Ionide がコンピューター上で破損していて、上記のいずれも問題を解決していない場合は、コンピューター上の ionide-fsharp ディレクトリを削除し、プラグインスイートを再インストールしてみてください。If Ionide is broken on your machine and none of the above has fixed your problem, try removing the ionide-fsharp directory on your machine and reinstall the plugin suite.
  6. プロジェクトの読み込みに失敗した場合F# (ソリューションエクスプローラーに表示されます)、そのプロジェクトを右クリックし、 [詳細の表示] をクリックして診断情報を取得します。If a project failed to load (the F# Solution Explorer will show this), right-click on that project and click See details to get more diagnostic info.

Ionide は、 F#コミュニティのメンバーによって構築および管理されるオープンソースプロジェクトです。Ionide is an open source project built and maintained by members of the F# community. 問題を報告して、 ionide-vscode-Fsharp.core GitHub リポジトリに投稿してください。Please report issues and feel free to contribute at the ionide-vscode-fsharp GitHub repository.

F# Ionide Gitter channelの Ionide 開発者やコミュニティから、さらに支援を求めることもできます。You can also ask for further help from the Ionide developers and F# community in the Ionide Gitter channel.

次のステップ:Next steps

とその言語のF#機能の詳細については、「 F#」を参照してください。To learn more about F# and the features of the language, check out Tour of F#.