去年の終盤から、今年の2月の頭にかけて、新しい本を作っていました。
『リバーシを作りながら学ぶJavaScript』という本です。その見本が届きました。
https://www.shuwasystem.co.jp/book/9784798071695.htmlhttps://www.amazon.co.jp/dp/4798071692本のコンセプト
まずは、本のコンセプトについて書きます。
本というのは、新しく1冊書くときには「コンセプト」があります。どういうことを考えて、どういう目的で書くかという「意図」です。
この本の主眼は「作りながら」の部分です。
よく、一部のプログラマーが「ゲームとか、アプリとか、作りたい物があってプログラミングを学ぶのが一番」と言います。私も、そうした方法で自学したタイプの人間です。
でも、ほとんどの人は「別に作りたいものはないんだけど」と思うでしょう。
また、一部の人は「作りたい物はあるんだけど、どう学べばよいのか分からないんだけど」と思うでしょう。
自分で目的があり、それに向けて自分で調べて、自学して完成させるタイプの人は、かなり珍しいです。
こうした人は、プログラミングを学習する前から、自学のサイクルを持っています。プログラミングを学習するタイミングで身に付けたわけではありません。
調べてスキルを身に付けるのが、平常運転になっています。
今回書いた本は、そうしたタイプの人が、「リバーシ」というゲームをプログラムで書く際に、たどるであろうルートを疑似的に体験することを目的としています。
それも、可能な限り負荷を減らして、なるべく図解しながらです。
「何かを作りたい」
「そのために、作りたいものを分解する」
「分解したものを、プログラムに置き換えていく」
「置き換えるために必要なプログラミングの知識は何なのかを学ぶ」
そうしたルートでプログラミングを学ぶのが、この本の「コンセプト(意図)」になります。
今回、学ぶのはJavaScriptなので、ゲームを作る過程で、かなりWebブラウザーのJavaScriptの仕様を掘り下げることになりました。
こうした「自学者」のルートで、プログラミングを、それもJavaScriptを学んでもよいのではないか。それも、そのルートをなるべく丁寧に解説しながら。
そうした提案が、この本の「コンセプト」になります。
執筆の経緯について
執筆の経緯についても書きます。
商業本の技術書が作られる経緯は、いろいろとあります。私は過去に複数の出版社で10冊以上の技術書を書いていますが、さまざまな経緯がありました。
まだ日本に来ていない技術で遊んでいたら、「その技術について本を書いてください」と依頼されることもあります。
Webサイトに、プログラミング言語の解説マンガを書いていたら、「それ、商業出版してください」と依頼されたこともあります。
同人誌で技術書を出していたら、「それ、紙の本にしてください」と依頼されることもあります。
また、「○○(プログラミング言語)について、ガッツリと好きなだけ書いてください。600ページぐらいになっても大丈夫です」と依頼されることもあります。
今回の本については、編集の方から「柳井さんは、JavaScriptをリバーシで作る同人誌を出していますよね。そこからの提案なんですが、リバーシの開発を通してJavaScriptを学ぶ本を書きませんか?」と話を振られました。
最初にこの提案をいただいたとき、私は返信で「リバーシを開発する同人誌よりも、レトロ風RPGを開発する同人誌の方が、数が出ていますよ」と書きました。
すると「リバーシでお願いします」と言われました。結果的に、「ボードゲーム」という現実世界のものを、「どうプログラムに落とし込んでいくのか」という内容になったので、よかったと思います。
さて、提案されたあとの話です。話を振られたあと、目次を作成して送りました。
商業出版の技術書は、「目次」を作成して、編集の方とやり取りをして、合意が取れると書き始めることが多いです。
目次を編集の方に送る際に、「普通のプログラミングの本と、文法の解説順番がかなり異なりますね」という感想を書き添えました。
すると編集の方から「コンセプトから流れを考えてみたら、普通の解説書と違っていたというのは、よい本になる可能性がある」という返信をいただきました。
この返信を見て、今回の本がどういう本なのか、自分でも無自覚だったコンセプトを認識することができました。
そういう意味で、一人ではたどりつかなかった本だと言えます。
作図について
「新しい物を作る」ときには往々にして、「新しいチャレンジ」を1つか2つ盛り込むものです。
今回の本では「具体的なゲームを作りながらプログラミング学ぶ」というコンセプトとは別に、作業レベルでの新しいチャレンジがありました。
それは「作図」についてです。
私は技術書に、なるべく「図」を盛り込むようにしています。プログラミングの本は、コード中心になりがちなのですが、なるべく図解するように心掛けています。
しかし、これがなかなか難しいです。
図を、DTPのデータに起こしてくださるデザイナーの方は、プログラミングについて詳しくありません。そのため、図をDTPのデータにする際に、プログラマーの目から見て、間違った図がどうしても作成されてしまいます。
商業本を作るときには、この図の不具合を、徹底的に修正することになります。
おそらく、現場のデザイナーの方に「こいつ、パラノイアか」と思われて、滅茶苦茶嫌われているだろうなと自覚しながら、修正依頼を送り続けます。
今回は、そうした作図の問題に、少しだけ変化がありました。
私の方で作った図を、デザイナーの方のDTP作業に、直接取り込む方式で本を作りました。
Inkscapeのパスで描いた図を、パスのまま取り込む方式です。
もともとスケジュールを圧縮するための苦肉の策として、編集の方に提案していただたいたのですが、そこからいろいろと実験をして、技術的なチャレンジになりました。
プロのデザイナーの方が作った図ではないので、見栄え的には劣るとは思いますが、プログラマーが脳内で考えている図に近いものが掲載されていると思います。
プログラミングは、算数や数学と同じで、絵解きで理解しやすくなるジャンルだと思います。
今回の本は、こうした経緯で、デザイナーの方の作図コストを無視して(私の作業コストだけで)図を多く盛り込めたので、理解の補助になればと思っております。
こうした、これまでの技術書とは、少し変わった作り方をしているということの確認という意味でも、本書を手に取っていただければ幸いです。
サンプルコード
編集の方から「改造して再配布できるようになるといいですね」とご提案いただき、サンプルのリバーシゲームは、「CC BY-SA 4.0」で再配布可能にしました。
商用利用可能、改変可能、クレジット表示必要、ライセンス継承が必要、というライセンスです。
クレジットについては、サンプルのREADMEに記載しています。
画像を差し替えて自分のキャラにしたり、音声を入れたりして遊べます。
書名について
さて、最後に、少しだけ悩ましい話をします。
新刊の書名ですが『リバーシを作りながら学ぶJavaScript』のあとに、サブタイトルとして『AIの基本 対戦プログラムの開発に挑戦!』と付いています。
ここは非常に心苦しいのですが、サブタイトルは出版社の営業サイドの要望で入ったらしく、私は最終校のあとに知りました。
本の中身に、今流行りの生成AIなどについての説明は入っておりません。間違って興味を持つ人がいそうなのが怖いです。そこだけご注意ください。
また、簡単なアルゴリズムは入っていてコンピューターと対戦できますが、「対戦プログラムの開発」は主眼ではありません。
主眼は「ゲームという具体的なアプリケーションを作りながら、プログラミング(JavaScript)を学ぶ」ことです。
「こうしたアプローチでプログラムを学ぶ機会があれば、誰かの役に立つかもしれない」という思いで作業をしました。
というわけで、今回書いた本が、誰かの役に立てばよいなと思っております。是非、手に取ってください。
https://www.shuwasystem.co.jp/book/9784798071695.htmlhttps://www.amazon.co.jp/dp/4798071692