(-> % read write unlearn)

All opinions expressed are solely my own and do not express the views or opinions of my employer.

Sublimetext3でF#を書く準備

MacのSublimetext3にF#の開発環境をセットアップしました。

ランタイムについては別のエントリにまとめたのでそちらをご参照ください。 ここではエディタのセットアップについてになります。

http://hatappo.hatenadiary.jp/entry/2016/06/30/060000hatappo.hatenadiary.jp

Setup F# Editor

XamarinStudioをインストールしていれば、XamarinStudioにエディタが入っています。 他の選択肢としては、VisualStudioCode、SublimeText、AtomEmacs、VIなどなど色々あると思います。 Guide - Cross Platform Dev Guide | The F# Software Foundationに各エディタの環境のセットアップについて書かれています。

以下、VisualStudioCode、SublimeTextのセットアップについて簡単に書きます。

1. Visual Studio Code

VisualStudioCode はプログラミング用のEditorです。MicrosoftがElectronベースにOSSで開発しており、無償で利用できます。VisualStudioCode自体は公式サイトからダウンロードしてください。

Ionide-fsharpAtomエディタ用のF#サポートのプラグインのようです。同じElectronベースだからなのか、VisualStudioCode用のパッケージも提供されているようです。 https://github.com/ionide/ionide-vscode-fsharp

Ionide-fsharpのインストールは、VisualStudioCodeを開いて、 Ctrl + Pを押して開いたフォームにext install Ionide-fsharpと入力すればOKです。
https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-fsharp

2. Sublime Text 3

自分は結局こっちの環境を使っています。やったのは以下のこと。

1. sublime-fsharp-packageのインストール

sublime-fsharp-packageには、シンタックス・ハイライト、コードの補完、ライブ・エラーチェックなどなどの機能があります。
詳細は githubのREADMEをを確認ください。

  1. Sublimetext3を起動。
  2. Command + Shift + P で開いたフォームに install と入力して Enter する。
  3. 少しのロード時間ののち、インストールしたいパッケージを選択するフォームになるので、
  4. fsharpと入力する。おそらく sublime-fsharp-package しかヒットしない。
  5. Enterすればインストールされる。
2. FSharp.sublime-buildファイルの作成
  1. メニューバーから ツール(T) > Build System > New Build System...
  2. 開いたファイルに以下のように設定を書いてFSharp.sublime-buildという名前で保存。
{
  "cmd": "fsharpc $file --out:$file.exe && mono $file.exe", // 例えば、 foo.fs ファイルなら foo.fs.exe という名前でコンソール用実行ファイルとしてコンパイルされます。
  "selector": "source.fsharp",
  "file_regex": " *(/.+)\\(([0-9]+),([0-9]+)\\)",
  "shell": true,
}

F#のファイルを開いてCommand + B(または メニューバーから ツール(T) > Build)して、コンソールに実行結果(標準出力の内容など)が表示されればうまくいっています。

ちなみに、ビルドを実行した際にコンパイルエラーなどがあると、コンソールのエラー表示のファイル名や行番号の記載がダブルクリック可能です。ダブルクリックすると、エディタでその箇所が開かれます。 このエラー出力からファイルを開くことを可能にしている設定はfile_regix正規表現です。マッチさせたグループの1番目がファイルのパス、2番目が行番号、3番目が何文字目か、としてパースされます。 きちんと吟味していないので、間違っているorもっと良い記述がある場合は教えて頂けると嬉しいです。

"cmd": "fsharpc $file && mono ${file%.fs}.exe"という設定だとうまく動きませんでした。なぜだろう。。

参考