【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

F#を教えるための環境構築

この記事はF# Advent Calendar 2013の2日目の参加記事です。

昨日はトップバッターの@さんでした。短いコードにデータベースのアクセステクニックが詰まってとても参考になります。

私の記事は、勉強会でF#を教えるための環境構築で試行錯誤した話です。

2009年

Visual Studio 2008 Professional以上ではF# CTPをインストールするとF#が扱えます。無料のExpress Editionでは拡張機能に未対応のため利用できませんが、Visual Studio Shell(言語サポートを抜いたIDEのみ)で利用できます。

私が一番熱心にF#のコードを書いたのはこの頃だったと思います。勉強のために手あたり次第書いていたという感じです。

2010年

Visual Studio 2010 ProfessionalにF#が標準搭載されました。2008と同様にVisual Studio Shellでも使用できますが、リリース後になかなか対応しなくてやきもきしました記憶があります。私のマシンでは2010が重かったため、しばらく2008を使っていました。

この年くらいから勉強会に参加するようになりましたが、まだ自分が教えるという状況ではありません。

2011年

初めてF#の勉強会を開催しました。

Windowsの方が多かったためVisual Studioを使うことにあまり抵抗はなく、他のOSについてはMonoで動きますと言ってお茶を濁しました。

F#が目的ではない勉強会でもサンプルを記述する言語としてF#を使っていこうと試みましたが、肝心の勉強会自体がネタ切れとなってしまい頓挫しました。

2012年

Visual Studio 2012のExpress版は提供形態が変化して、それまで言語別だったものが用途別に変わりました。F#の拡張機能はExpress for Webでサポートされました。別途Shellを入れなくて済むのは助かります。2012のリリースと同時に機能拡張もリリースされたのが嬉しかったです。

勉強会に関しては、F#そのものの学習ではなく、F#を使って何かをするということを試しました。

F#は初めてという方ばかりで、中身はほとんどF#の説明に費やしました。Macで参加された方が多かったです。当時Mac用のMonoにはF#がバンドルされるようになっていたため、Monoをインストールするだけでfsiやfscが使えるようになりました。これは非常にありがたかったです。

当時はまだMonoDevelopのF#アドインが正式版ではなくリポジトリにも登録されていませんでした。アドイン自体は存在したようですが自分でビルドするしかなく、対応するバージョンも不明なため、手が出ませんでした。そのためviなどで書いてもらいましたが、文法チェックなどもないため、写経だけでもかなり苦戦しました。

2013年

今日現在、Visual Studio 2013のExpress版に対応した拡張機能は提供されていません。

勉強会に関しては、新年早々、特に目的のないF#談話室を開催しました。

大雪の日でしたが3人の方にご参加いただきました。@さんが当日参加されたのには本当にびっくりしました。

この日、@さんはMonoDevelopのF#アドインを最新版にキャッチアップする作業をされていました。このとき私はただ指をくわえて眺めているだけで、これがどれほどの意味を持つのかが分かっていませんでした。

Xamarin Studio

MonoDevelop 4がXamarin Studioと名前を変えた頃にはF#アドインもリポジトリに登録され、簡単にインストールできるようになりました。

Visual Studio 2013が出た今となってはF#のためだけに2012を入れるのには躊躇します(Expressの話)。そのためWindowsでもXamarin Studioが使えないかと考えるようになりました。

最初試したときはWindowsでもMacでもデバッグができませんでした。Macの方はC#でも同じ現象が起きて困り果てていたのですが、実行オプションで外部コンソールを無効にすれば無事に動くようになりました。これでMacに関してはXamarin Studioで特に問題ないという状況になりました。

Windowsは別の原因(COMのエラー)でいまだに対処方法が分かりません。私の試した限りでは32bit OSでは正常で、64bit OSのみで発生する問題のようです。

Xamarin Studio 4.0.13以降では、WindowsでF#プロジェクトがビルドできなくなりました。これはいまだに対処方法が不明です。

Linuxではメジャーなディストリビューションで提供されるMonoDevelopが古くてF#のアドインが使えないため、自分でビルドするしかないという状況です。@さんがUbuntuでのビルド手順をまとめてくださいました。

F#スクリプト

私はずっとF#プロジェクトのことしか考えていなかったのですが、次の記事が転機となりました。

プロジェクトを作らなくてもF#スクリプトを開くだけでインテリセンスが効くというので早速試してみました。Visual Studioは最初にプロジェクトを作るものだという固定観念があったので、このやり方は衝撃的でした。それまでもExpress for Webでプロジェクトを作らずにJavaScriptを書くことはありましたが、それがF#でもできるなんて夢にも思いませんでした。F#談話室で@さんからF#スクリプトを使っているというお話を伺ってはいましたが、Visual Studioのサポートがあるとは知らなかったので完全に誤解していました。お恥ずかしい限りです。

Xamarin Studioでも試したところ同じことができました。しかも実行まで出来ます!インストールするだけで何も設定せずに、ファイルを開くだけでインテリセンスや実行までできてしまうというのは、IDEというよりエディタ的な使い方です。これは勉強会にはうってつけです。

勉強会では小さなサンプルコードを大量に提示するため、いちいちプロジェクトを作っていたら面倒で仕方がありません。単発のファイルを並べてただ開くだけというやり方が適しています。

というわけで現在、勉強会ではサンプルコードをF#スクリプトで提示して、Xamarin Studioで試すという方法を導入しました。F#が初めての方でもそれほど抵抗なく使い始められるため、手応えを感じつつあります。

後日談

私がF#スクリプトを試したのはWindows上のXamarin Studio 4.0.13でしたが、実はこれは奇跡的に安定してF#スクリプトが扱えるバージョンでした。これより前のバージョンではプロジェクトと同様に実行ができません。これより後のバージョンではシングルクオートの文字リテラル(例: 'a')の表示が崩れます。もし試したバージョンがそれらなら、早々に諦めていたと思います。

なお、前述のように4.0.13はWindowsでプロジェクトのビルドができないという致命的な問題がありますが、F#スクリプト専用と割り切っています。Windowsなので、プロジェクトが必要ならVisual Studioという選択肢もありますから、まあ何とかなるんじゃないでしょうか。(投げやり)

こんな対症療法に終始しないでデバッグしてみたいとは思いつつ、なかなか手が出ません。機会があれば挑戦してみたいですね。

私の記事は以上です。明日は@さんです。