次の方法で共有


ツールボックス

F# のツールとリソース

Terrence Dorsey

F# は Microsoft .NET Framework 向けの新しいタイプセーフな関数型プログラミング言語です。Objective Caml (OCaml) を基盤として、Microsoft Research で開発されました。その OCaml は ML を基盤としています。F# 開発者の Don Syme は、F# を「タイプセーフで、スケーラブルかつ数学指向の .NET 向け言語で、スクリプティングとプログラミングを合成したもの」と表現しています。

F# は比較的歴史の浅い言語ですが、プログラミング コミュニティで急速に熱狂的人気を得ています。人気の理由は、おそらく、使い慣れた .NET Framework と Visual Studio を利用してビルドできるためでしょう。また、関数型、命令型、およびオブジェクト指向の各プログラミング手法を 1 つの言語にまとめていることも一因に挙げられるでしょう。さらに、厳密に型指定される言語であると同時に、コンパイル時の型指定できる柔軟性もサポートしているためとも考えられます。

F# のどの特徴が人気を得ているかは別にして、今月のコラムでは、この F# を最大限に活用するうえで役立つツールとリソースについてのガイドを提供します。

はじめに

Visual Studio 2010 と .NET Framework 4 を使用している場合は、F# 2.0 を使い始めるために必要なすべてのツールは既にインストールしています。以前のバージョンの Visual Studio や他の開発環境で F# を使用する場合は、F# 2.0 ツールのスタンドアロン インストーラー (bit.ly/fGVQvl、英語) をダウンロードすることもできます。

F# の学習をもう一歩進めるには、マイクロソフトの F# デベロッパー センター (msdn.microsoft.com/fsharp、英語) にアクセスします。ここでは、ドキュメント、サンプルへのリンク、F# の専門家によるブログ記事などを提供しています。

主なリソースとしては、MSDN ライブラリの「F# 言語リファレンス」(msdn.microsoft.com/en-us/library/dd233181、英語) があります。ここでは、言語の全詳細情報と、サンプル コードを提供しています。

開発環境

既に説明したとおり、Visual Studio 2010 には F# 向けに充実したサポートが組み込まれています。しかし、他のコンピューターや、場合によっては他の OS で F# を試してみる場合は、Try F# Web サイト (tryfs.net、英語) をご覧ください。このサイトでは、ブラウザー ベースのインタープリターで F# の対話型コーディングが可能です。

Visual Studio をお持ちでない方は、マイクロソフトからスタンドアロン アプリケーションや仮想マシンの形式で試用版ダウンロード (msdn.microsoft.com/vstudio/bb984878) を入手できます。Visual Studio 以外にも、他の多数の無償または商用の IDE で F# の開発が直接サポートされています。たとえば、SharpDevelop (sharpdevelop.net/OpenSource/SD、英語)、xacc.ide (xacc.wordpress.com、英語)、MonoDevelop (monodevelop.com、英語) などがあります。

MonoDevelop が独特な点は、Windows、Mac OS X または Linux 上に開発環境を設定でき、.NET Framework ベースのアプリケーションを、これらのプラットフォームに加えて Android、iOS、および Windows Phone 7 に対応するようにできることです。Functional Variations では、F# 機能を有効にするための詳細情報を紹介しています。「MonoDevelop で F# をインストールして使用する」(functional-variations.net/monodevelop、英語) を参照してください。Robert Pickering 氏も、ブログ「F# Resources」(F# リソース、strangelights.com/fsharp/MonoLinux.aspx、英語) で Mac OS X 上と Linux 上の Mono で F# を使用する方法についてのガイドを紹介しています。

筋金入りの Emacs ユーザーの方もがっかりしないでください。Laurent Le Brun が、Emacs での F# IntelliSense に取り組んでいます (bit.ly/f3pd8b、英語)。詳細については、彼のブログを参照してください。

ツール、テンプレート、およびライブラリ

F# をもっと容易かつ強力にするために使用できるツールには、さまざまなものがあります。まず、F# 開発チームによる F# PowerPack (fsharppowerpack.codeplex.com、英語) をダウンロードすることをお勧めします。PowerPack には、F# のコンパイラとコード ライブラリのソース コード、および多数の追加ツールやライブラリが含まれています。たとえば、Matrix ライブラリ、構文解析や解析用のツール、LINQ ベースのデータ アクセス、F# ライブラリのドキュメント作成ツールなどがあります。

FAKE (github.com/forki/FAKE、英語) は、make や rake のようなツールにヒントを得て設計された、F# 向けのビルド自動化システムです。FAKE を使用すると、関数型プログラミング技法と .NET アセンブリへの直接アクセスの両方を利用しながら、Visual Studio や SharpDevelop など、F# 対応 IDE の編集機能やデバッグ機能とも直接統合できます。

CodePlex には、便利なテスト ツールがいくつか提供されています。TickSpec (tickspec.codeplex.com、英語) はビヘイビア駆動型の開発フレームワークで、Gherkin (Given、When、および Then) でビヘイビアを記述し、C# や F# のメソッドに対してビヘイビアを実行できます。

FsUnit (fsunit.codeplex.com、英語) は、単体テスト ライブラリです。FsUnit.fs ファイルをプロジェクトにドロップするだけで、テスト フィクスチャやテストの作成を開始できます。

FsCheck (fscheck.codeplex.com、英語) は、Haskell QuickCheck プロジェクトに基づくランダムなテスト フレームワークで、F#、C#、または Visual Basic でテスト仕様を作成できます。

Windows Phone 7 開発に関心のある方は、Visual Studio ギャラリーにアクセスして、Visual Studio 用の F# Library for Windows Phone (XNA) テンプレート (bit.ly/h5sg9h、英語) と F# and C# Win Phone App (Silverlight) テンプレート (bit.ly/fraF4S、英語) を入手してください。

Visual Studio に話を戻し、F# がぐっと使いやすくなる 2 つの優れたプロジェクトをご紹介しましょう。F# Project Extender (fsprojectextender.codeplex.com、英語) を使用すると、コンパイル順序に影響を与えずに、ソリューション エクスプローラー内の F# プロジェクト ファイルを整理できます。F# Refactor (fsharprefactor.codeplex.com、英語) では、F# コードをリファクタリングするためのツールセットを開発しています (このプロジェクトはまだ実用段階に進む準備が整っておらず、皆さんの投稿が歓迎されることは間違いなしです。ここで紹介したすべてのツールを開発したコミュニティに投稿をお寄せください)。

F# での Web 開発

WebSharper (websharper.com、英語) は、F# で Web アプリケーションを作成するためのフレームワークです。WebSharper 2.1 Beta 5 では、Google マップ、Google Visualization、jQuery、Bing Maps、Modernizr、InfoVis、Protovis など、普及している多数の Web ライブラリを対象とした F# 互換性拡張機能が提供されています。

Tomas Petricek 氏は、F# コミュニティへの多くの貢献の中でも特に、F# Web Tools (tomasp.net/projects/fswebtools.aspx、英語) の開発に寄与しました。このツールは、クライアント/サーバー/データベース Web アプリケーションを F# と LINQ を使用して作成できるようにします。F# に関するニュース、ヒント、およびテクニックについては、Petriceck 氏のブログ (tomasp.net/blog、英語) を参照してください。Petricek 氏は、F# を開発した Microsoft Research チームの元メンバーです。このため、F# に関して独特の洞察力を持っています。

先ほど "貢献" について触れたことを思い出してください。Petricek 氏は、F# のコード スニペットを多数のユーザーと共有および借用できるサイト、F# Snippets (fssnip.net、英語) も開設しています。このサイトでは、完全な構文と型情報を紹介しています。

お楽しみツール

F# の世界は、真面目なツールばかりではありません。楽しみのためにツールを開発することもあります。私の考えでは、IronJS (github.com/fholm/IronJS、英語) がこの分野に該当します。IronJS は、DLR 上で実行する、F# で記述された JavaScript の高速実装です。コードを確認して、試してみてください。

数学愛好家や計算が得意な方にもう少し便利なツールとして、VSLab (vslab.codeplex.com、英語) があります。このツールでは、Visual Studio の Matlab に似た F# ベースの対話型環境を提供しています。

image: VSLab Math Visualizations in Visual Studio

Visual Studio での VSLab による計算の視覚化

F# の学習に役立つよう、Chris Marinos 氏は F# Koans (bit.ly/hovkxs、英語) というプロジェクトに着手し、現在も進行中です。F# Koans は Ruby 言語を学習するための Ruby Koans の手法にヒントを得ており、テストを通じて F# の基礎とその奥に潜む真実を学習できます。Koan の各ソリューションでは、ランタイム エラーが表示されます。ユーザーは、このエラーの解決を目指します。エラーを修正することで、F# 言語と関数型プログラミングの知識を得ることができます。F# のヒントについては、Marinos 氏のブログ (chrismarinos.com、英語) をご覧ください。

読書は基本

多くの方が昔ながらの書籍を利用して (また、ますます多くの方が電子書籍を利用して) 新しいスキルを学習し、言語の詳細情報や実装技法の参考にしています。ここからは、F# をスキル ライブラリに追加する際にお勧めの書籍を数冊紹介します。

image: book, Expert F# 2.0

『Expert F# 2.0』

Don Syme、Adam Granicz、および Antonio Cisternino 共著の『Expert F# 2.0』(Apress、2010 年) (amazon.co.jp/Expert-2-0-Experts-Voice-Syme/dp/1430224312) は、F# の考案者と F# 開発コミュニティの 2 人の主要メンバーによる、この言語の権威あるガイドです。ASP.NET、LINQ、Windows Presentation Foundation、Silverlight などの .NET テクノロジと F# を組み合わせて使用する方法について学習できます。『Expert F# 2.0』は、印刷物形式と電子書籍形式 (キンドル版など) で利用できます。

開発者向けリファレンスには、Chris Smith 著『プログラミング F#』(オライリージャパン、2009 年) (oreilly.co.jp/books/9784873114668/) もあります。Smith 氏は、以前マイクロソフトの F# 開発チームに所属していました。F# を使用して、関数型、命令型、およびオブジェクト指向の各プログラミング技法の問題を解決する方法について解説することで、F# の機能全体を把握できるようにしています。この書籍では F# ライブラリの概要も紹介しています。『プログラミング F#』は、印刷物形式と各種電子書籍形式 (キンドル版など) で利用できます。

Flying Frog Consultancy (ffconsultancy.com、英語) は、関数型プログラミングとテクニカル コンピューティングを専門としています。この企業では、『Visual F# 2010for Technical Computing』、『F# forNumerics』、『F# for Visualization』などの書籍や、月刊誌『F# Journal』など、F# に関する多数の興味深い刊行物を出版しています。また、OCaml やデータ分析の技法に関するその他の書籍も出版しています。どれも非常に専門性が高い読み物です。この企業のブログ「F# News」(F# ニュース、fsharpnews.blogspot.com、英語) で、F# と関数型プログラミングの経験がある開発者向けのニュース、分析、サンプル、および求人情報も忘れずにチェックしてください。

コミュニティ リソース

外から見ると F# はニッチ テクノロジのように思えますが、F# に関する大規模で熱心なコミュニティが成長しつつあります。コミュニティに参加するには、まず次のような Web 上の人気サイトをのぞいてみてください。

Community for F# (communityforfsharp.net、英語) では、Live Meeting を使用して、約 1 か月に 1 回のペースで世界中のメンバーが発表を行うミーティングを開催しています。以前のミーティングはこのサイトにアーカイブされています。

F# Central (fsharpcentral.com、英語) では、 F# コミュニティのニュースを毎週まとめて紹介しています。最新の記事、リリース、トレーニング、およびビジネス チャンスを確認する場合は、ブラウザーや RSS リーダーでこのサイトにアクセスしてください。

hubFS: THE place for F# (cs.hubfs.net、英語) では、F# プログラマ向けのニュース フィード、ブログ、およびディスカッション フォーラムをホストしています。

また、次に紹介する F# コミュニティの重要メンバーのブログで、ヒントとテクニックを参照することをお勧めします。

Gordon Hogenson (blogs.msdn.com/gordonhogenson、英語) は、F# に関する MSDN ドキュメントの大半を執筆したテクニカル ライターです。

Luke Hoban (blogs.msdn.com/lukeh、英語) は、F# チームの元プロジェクト マネージャーです。現在は JavaScript チームに所属していますが、F# への愛情は変わらず、役立つ情報をブログで公開しています。

Richard Minerich 氏 (richardminerich.com、英語) は、F# やその他の興味深いトピックに関するブログ記事を執筆し、ニュースを紹介するというすばらしい仕事を行っています。リアルタイムの F# エクスペリエンスについては、Twitter (twitter.com/rickasaurus、英語) で彼をフォローしてください。

Dan Mohl 氏 (bloggemdano.blogspot.com、英語) は、F# とマイクロソフトについて充実したブログを執筆している F# の事情通であり、Microsoft MVP でもあります。Mohl 氏は F# に関連する NuGet パッケージの最新動向に通じているため、最新ニュースを知るには彼のブログにアクセスしてください。

Don Syme (blogs.msdn.com/dsyme、英語) は F# の考案者で、ブログで F# のしくみと今後のリリースに関する動向についての優れた情報を紹介しています。このブログでは、F# の最新ニュースを知ることもできます。

Terrence Dorsey は、MSDN マガジンのテクニカル エディターです。terrencedorsey.com (英語) で公開されている彼のブログを読んだり、Twitter (twitter.com/tpdorsey、英語) で彼をフォローしたりすることができます。

この記事のレビューに協力してくれた技術スタッフの Chris MarinosRichard Minerich に心より感謝いたします。