牛尾 剛(うしお つよし)
 大手SIベンダにてSEやPMやアーキテクトとして勤務したのち,株式会社豆蔵を経て,現在は合同会社シンプルアーキテクト代表社員であり,株式会社匠Business Placeのチーフコンサルタント。主に超上流のプロセスである要求開発やオブジェクト指向,アジャイル開発のコンサルタントとして活躍中。開発の現場にこだわり,開発の現場を少しでもよくしたいと日夜奮闘している。要求開発アライアンス執行委員。著書に『オブジェクト脳のつくり方』や『eXtreme Programming実践レポート』(ともに翔泳社発行。後者は共著)などがある。

 Javaなど,オブジェクト指向や手続き型のプログラミングの経験はあるけれど,関数型のプログラミングは初めてという皆様のための,そして筆者自身のための「関数脳のつくり方」シリーズのSecond Season(First Seasonはこちら)。今回は「モナド」を取り上げます。

 私が勝手に関数型プログラミングの「師匠」と呼んでいるujihisa(氏久達博)氏という人がいるのですが,その方曰く

「モナドが理解できた時,悟りがひらける」

 私も1カ月以上かけていろいろやってやっとこさ「モナドの悟り」がひらけた様子です。意味がわかった時には,確かにオブジェクト指向のポリモルフィズムがわかった時のような感動がありました。

 さぁ皆さんも「モナドの悟り」に向けて楽しんでいきましょう。

モナドとは

 モナドとは,関数型言語で,参照透明性を保持しながら手続き型的な記述をするための枠組みです。主に「演算をつなぎ合わせる」配管工事のようなイメージです。特に,「遅延評価」を主体とした関数型言語であるHaskellで盛んに使われています。

 こう言っては身も蓋もないのですが,本当に「モナド」を極めるには遅延評価が主体のHaskellをやるのが一番だと思います。

 なぜなら

Scalaでは「モナド」をそこまで極める必要はない

からです。これは,私がいろんな記事や書籍を読んでみたり,実際にHaskellを触ってサンプルを作ってみたりしてたどり着いた結論です。ですから,最近出版されたScalaの書籍に「モナド」の記述はほとんどないのです。

 ただし,この「モナド」の考えを理解していればより「Cool」なプログラムができますし,他の人のソースもより読みやすくなることでしょう。

 そのあたりの理由を最初にお話ししましょう。