『プログラミングF#』著者が明かすF#を使いこなすとっておきの秘訣!

Sales
2010/09/28 13:07
f_sharp_event.jpg
『プログラミングF#』の著者であり、またF#開発チームのメンバーであったクリス・スミスさんをお迎えして、秋葉原の書泉ブックタワーで9月22日にトークショーが開かれました。
 技術監修者の頃末和義氏と、鈴木幸敏氏がインタビュアーとして、F#開発秘話、F#の特徴、魅力、関数型言語の威力、関数型言語をマスターする方法、F#を使いこなす秘訣など、さまざまなことをクリスさんにお伺いしました。とにかくナイスガイのクリスさん、多岐にわたる質問に笑顔でていねいにお答えくださいました。
 もともとイギリス・ケンブリッジのマイクロソフトリサーチのDon Syme博士が個人の研究プロジェクトとしてスタートしたF#ですが、クリスさんはF#開発チームの4番目のメンバーとして開発に参加。開発チームは11人という少人数で構成され、またメンバーはイギリス、アメリカ、カナダ、中国と世界中に散らばっているとのこと。ビデオ会議やメールでやり取りし開発を進めたそうです。その中でクリスさんはテストソフトウェアエンジニアとして、言語仕様を詳細に調べて、言語が正しく設計されているか確かめ、言語のクオリティの向上を担当されていたそうです。
 トークでは、開発秘話、関数型言語の魅力、F#をマスターする方法、便利な機能など役立つ情報がたくさん紹介されただけでなく、ゲーム製作の仕事をしているお友達に手伝ってもらってクリスさんがデザインしたオリジナルの表紙も2パターン披露されました。どちらも新くて強力で少し不思議で可能性を秘めた印象を与えるものですが、残念ながら却下されてしまい、現在の鳥の表紙に落ち着いたとのこと。トークショー参加者にはクリスさんデザインの表紙のほうが人気でした。
 ここでトークショーのやり取りの中から一部ご紹介します。
Q: F#開発中に何か苦労や困難はありませんでしたか?何か面白いエピソードがあればお話いただけますか?
A: F#の一番大きなトラブルはデプロイに関するストーリーを考えることでした。つまり、ユーザがどうやってF#アプリケーションをインストールするのかということです。
F#は関数型プログラミング演算子用の独自のライブラリを持っているので、F#アプリケーションはFSharp.Core.dllという追加のライブラリをインストールしなければなりません。とにかく、F#チームは世界に通用するコンパイラを作って、Visual Studioに統合し、オープンソースのPowerPackをリリースすることができました。それでも一番我々がはまったのは、F#用の再頒布パッケージでした。
つらい話や苦労した話はたくさんできます。なぜなら私こそが統合の責任者だったのですから。
Q: 関数型言語の利点は何でしょうか。
A: 無数にあります。関数型言語の一番はっきりとした利点は、並列プログラミングにあるでしょう。不変型のデータに注目すれば、並列プログラム、並行プログラムを簡単に行えるようになります。
しかし私の意見では、関数型言語とF#を学ぶ一番大きな利点は、どのようにプログラミングにアプローチするかということを見直すことができる点です。C++やJava、C#、Visual Basicでは問題を同じ方法で解決します。しかし、関数型言語はそれらとは異なる視点をプログラマに要求します。また、F#はハイブリッドなプログラミング言語であるので、関数型と命令型の両方のことができるのです。プログラマは一番うまくいく解決方法をどれでも自由に選べるのです。
Q: 関数型言語は習得が難しいと言われていますが、よいアドバイスはありますか?
A: F#やほかの関数型言語を学ぶのに実に100%ベストなアドバイスがあります。それは、思い切って間違いをすることです。
新しい言語を学ぼうとするときによく直面する問題として、人はすぐに物事を「正しく」「完璧に」しようとするのです。けれども人には経験し、学び、成長する余裕が必要です。
私の本を読むと、関数型プログラミングについてのすべてが学べるでしょう。しかし関数型言語を自分のものにして、関数型スタイルのプログラムの書き方を理解するには、経験が必要です。そして、それを達成する唯一の方法は、一歩踏み出して、コードを書き始めることです。
Q: どんな場面でF#は威力を発揮し、効果的なのでしょうか。どんな場面で、F#プログラマは最も威力を発揮できると思いますか?
A: 一般的に言って、F#はアプリケーションの中でC#が使いづらいようなどんな部分にも使える理想的な言語です。もしC#でたくさんコードを書かないと問題が解けないとわかったときでも、F#はおそらくもっとエレガントなソリューションを示してくれるでしょう。
現在使っている言語に苦労していると思うのであれば、その言語があなたの問題を解決する方法をサポートしていないのです。F#は、オブジェクト指向、関数型、そして命令型のプログラミングパラダイムを用意しているので、F#であればソリューションを見つけやすいでしょう。
よく言われていることですが、F#が本当に輝く領域がいくつかあります。
それはコンパイラやドメイン固有言語のような小さなプログラミング言語を書く場合です。また、シミュレーションやモデリングのような計算中心のタスク、あるいはバンキングやファイナンスのようなアルゴリズム的な領域のタスクを行う場合です。
Q: F#プログラマへとっておきのアドバイスがあれば教えてください。
A: 本当に役に立つ機能が3つあります。
1つ目はF#のインタラクティブウィンドウです。これはREPLで、対話的にコードを入力し、その結果を確かめられます。このツールはあなたの生産性に素晴らしい恩恵をもたらします。というのも、ビルドしてアプリケーションを実行してデバッガを立ち上げなくても、コードをすぐにテストできるからです。
2つ目はF#スクリプトファイルです。F#コードを書いて、.FSXの拡張子を付けると、Windowsシェル内からコードを実行できます。これは、タスク自動化用のスクリプトを書くのにすごく適しています。
たとえば私が最初この本を書いていたとき、カレントフォルダ中のword文章ファイルそれぞれを印刷するようなF#スクリプトを用意していました。なので、それぞれのドキュメントを一々開くことなく、本全体を印刷することができました。そのスクリプトの例は、この本の10章に載っています。
3つ目は、F#のPowerPackをダウンロードするとFSLexとFSYaccが使えます。これは独自のプログラミング言語を作る際にレキサ(字句解析器)とパーサ(構文解析器)を素早く生成する手助けをしてくれるツールです。XMLは使いたくないけれども、構造化データを扱いたいときに、この2つのツールはとても役に立ちます。ただし、この2つは使いこなすのが難しいことに注意してください。
Q: どうすればF#ニンジャになれるでしょうか?
A: 訓練、訓練、訓練です。レベル9のF#忍者になるためには、関数型プログラミングの禅を習得しなければなりません。つまり、どんなソリューションでも関数型スタイルに再構成する方法を理解することです。それをマスターした後は、命令型、オブジェクト指向、関数型をミックスして正確かつエレガントなコードを書くようにすることで「忍者」のステータスを手に入れられます。

Bookfair

O'Reilly Japanのセレクションフェア、全国の書店さんで開催
[ブックフェアのページへ]

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]