「Clojureによる、初めての関数型プログラミング」

本を出してみました

2013年9月28日に、電子書籍「Clojureによる、初めての関数型プログラミング」をAmazonで出版しました。スマホ/タブレットのKindleアプリや、Kindle端末で読むことができます。

無料本として出すつもりでしたが、出版直前になって価格を0円に設定できないことを知り、やむを得ず100円としました。別のサイト(無料本が可能なサイト)で出すとか、本サイトで無料配布することも考えましたが、当面はAmazonでの販売に絞るつもりです。

出版までの道のり

コーディングから執筆、Kindle用のレイアウト調整、表紙デザインなど、トータルで約1ヶ月かかりました。章見出しを決めたあとは、わりと行き当たりばったりで書きましたが、偶然にも、教材に使ったゲームのソースを一通り全て解説したところで書き終わりました。ちなみに、この間、他の仕事はしてません。食って、寝て、書いて、テレビ見て、対戦ZOOKEEPERで遊ぶ、の繰り返しです。

出版の手続きは、KDP(Kindle Direct Publishing)で行います。AmazonのトップページにはKDPへのリンクが無いようですが、ページの下段にある「Amazonでビジネス」の「すべてのサービスを見る」から飛ぶことができます。ユーザ登録がなかなか面倒くさいですが、ググれば参考になるサイトが沢山見つかります。

有料で販売するとなると気になるのは印税ですね。Amazonの場合、デフォルトは35%。いくつかの制約事項をのめば70%へ上げることができます。でも、100円の本が1冊売れて35円(または70円)の収入、とはまいりません。まずAmazonはアメリカの法人なので、印税の約30%が連邦税として源泉徴収されます。また印税を著者の銀行口座に振り込むときの手数料がバカになりません(2500円くらいという噂)。収益を最大化するための対策(源泉徴収の免除申請や、振り込み手数料の安い銀行を選ぶなど)もありますが、100円の本1冊では何年待っても利益は出そうにないですね。

電子書籍ファイルはAmazonの公式ツール(Kindlegen、KindlePreviewer)を使って製作したので、妙なトラブルは無いと思っていたのですが、どうもiOS版のKindleアプリでは、CSSの解釈に癖があるため意図通りにレイアウトされないケースが目立つようです。私の環境ではプレビューツールのiOSモードがまともに動かず、iOSでのレイアウトを確認できないまま、見切り発車での出版となってしまいました。

書籍を登録すると、審査を経て、48時間後くらいにAmazonサイトで公開されるとのことでしたが、今回は深夜に登録して、寝て、朝起きたらもう公開されてました。6時間弱ってとこだと思います。

表紙

jacket

この猫の名前は、クーちゃんです。

ku

「はじめに」より抜粋

本書は、関数型プログラミング(Functional Programming, FP)に関する読み物だ。Clojureという言語を使ってオセロに似たボードゲームを開発しながら、関数型プログラミングを紹介してみようと思う。読者として、関数型プログラミングを経験したことがないプログラマを想定する。筆者自身がそんなプログラマの一人だ。いや、つい先日までそうだった。実は、このボードゲーム開発が筆者にとって初めての関数型プログラミング体験だ。本書では、FP初心者の試行錯誤の産物をご笑覧頂きたい。

使用する言語はClojureだ。ググるならスペルに注意。Closureではない。Clojureの文法はLispの流れを汲んでおり、そのプログラムはJava VM上で動作する。Clojureは、関数型に限らず、いろんなスタイルのプログラミングに使うことができる。また、ClojureプログラムからJavaのクラスライブラリを利用することも可能だ。そんな多才な言語だが、本書を読むのにClojureの予備知識は必要ない。最低限の文法は本書の中で解説する。しかしClojureについて網羅的に学びたいなら、他所をあたった方が良いだろう。

本書を読む際は、以下のサンプルテキストが右端で折り返されずに表示できるよう、文字サイズや余白幅、端末の向きを調整することをオススメする。

      This is a sample code line indented by 3-tab.

本書で使用したボードゲームの動作確認は、Windows、Java 1.7.0_25、Clojure 1.5.1、Leiningen 2.3.2で行った。ソースコードは、GitHubから入手可能だ。

https://github.com/gpsoft/othe

執筆にあたって、編集に協力し、多くの助言をくれた牛猫ソフトさんに感謝する。

もくじ

  • はじめに
  • 関数型プログラミングの特徴
  • ゲームの仕様と設計
  • Clojure文法
  • 変数は変更不可
  • 高階関数
  • 無名関数
  • クロージャ
  • 純粋な関数
  • 遅延評価
  • 部分適用
  • 再帰
  • 付録A. 開発環境
  • あとがき

「あとがき」より抜粋

関数型プログラミングに興味を持ち、いくつかの言語を勉強しつつも、心のどこかで、実際に何かを関数型で書くことはなさそうだなぁと感じていた筆者ですが、その気持ちはClojureに出会って大きく変わりました。これはいいかも、と。主な理由は以下の3点です。

  • ClojureはLisp方言である(Lispを使いこなせるとカッコいい気がする)
  • ClojureはJVM上で動く(環境構築が簡単)
  • JavaのGUIライブラリが使える(デスクトップアプリも書きやすい)

それで試しに書いてみたのが、オセリでした。書いてみて、ますます関数型プログラミングとClojureが好きになりました。現在も、第2のClojureプログラムを開発しながらFP脳細胞を鍛錬中です。ただ、目下のところ設計の進め方(モジュールの分け方など)に引っかかりを感じています。オブジェクト指向からC言語の時代に戻ってしまったような感覚なんですよね~。

2008年にフリーランスのプログラマに転身して以来、自分のホームページ上で、様々な技術記事を公開してきました。本書の内容は品質的にはそれらと変わりませんが、長いので電子書籍の形にしてみました。筆者と同じような、関数プログラミング初学者の一助となれば幸いです。

正誤表

そのうち書くかもしれません。

売れ行き

出版初日に、早くも売り上げがありました。本当にありがとうございます。感激です。

[2013-10-27]出版からちょうど1ヶ月ですが、おかげさまで売り上げ部数は3桁台に突入しました。ありがとうございます。

読者の声

[2013-10-29]初レビューが投稿されました。やっほーぃ。ご褒美をもらったようで嬉しいです。ありがとうございます。