Flutterの技術本を執筆した話

メリークリスマス！ 
ニューズピックスという会社にに入社して約3ヶ月経った @ko2ic です。
そして、[NewsPicks Advent Calender 2019](https://qiita.com/advent-calendar/2019/newspicks)のラス２の投稿です。

少しだけニュースピックスについて書きますね。興味ない人は下のブロック全部飛ばしてください。

自分は、NewsPicks For Businessという法人向けのサービスを担当しています。法人向けなので一般的には知られていませんが、これ、なかなか凄いサービスです。
NewsPicksを知らない方のために説明しますが、すごく簡単にいうとニュースに対してのコメントを投稿できます。これによりものごとを多角的に見ることができたり、何かしらの気づきを得られやすいサービスになっています。
法人の場合は、プラスしてその会社用のタブができ、社内用の記事だったり、ニュースを投稿できるようになります。もちろん同じようにコメントできます。
これだけだとただの社内報に見えますが、**違います**。特に大企業の場合、部署や物理的な場所で分断していた優秀な人たちや様々なタイプの人材の存在に気付けるのです。これ、結構エンゲージメントが向上するんですね。実際に短い期間ながらもそういう体験を目撃してきて、すげーなと思ったので書いてみました。

ここからが本題です。

# 概要

Flutterに関しては、かなり早く注目しており、業務でも約2年ほど利用しており、公式のPluginでもPRをまあまあ出しています。それなりに貢献はしているつもりです。そして、さらにFlutterに貢献すべく書籍を執筆しました ！
発売は、12/25クリスマスです。明日です。「[基礎から学ぶFlutter](https://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6-Flutter-%E7%9F%B3%E4%BA%95-%E5%B9%B8%E6%AC%A1/dp/4863542941/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=flutter&qid=1576853239&sr=8-3)」という本になります。そうです。宣伝記事ですww。
この記事では、技術書の商業誌を執筆した裏話、とまでいきませんが、そんなことを書いてみます。今後、執筆をする人・したい人の参考になればと思います。

最初に書いておきますが、本を執筆した人が凄いわけではないですよ。この場合は、Flutterを作った人達が凄いのです。
技術本って大体そうだと思います。執筆者は別にすごくはない。ここ勘違いしないでくださいね。ただ、執筆するのも大変なので優しくはしてほしいです。

# きっかけ

連絡が会ったのは6/7でした。きっかけは、Qiitaの記事です。Flutterに関する記事をそれなりに書いていたのでそれらを読んだ出版社からメールがきました。メールで質問を何度かやりとりしました。
その後6/26に喫茶店で話を聞いて、執筆することになりました。(実際に会ったのはここだけで、あとは全てメールでのやりとりです。)
内容は、契約条件や発売時期などや、そもそも何も知らないので、執筆の流れや他の執筆者の場合の話など色々質問しました。
量は、最低でも20万字ということでした。（この記事が約5700文字なので、これを35記事書くぐらいの分量です。）

ちょうどその頃、転職活動をしていたので、やるかは悩みました。プライベートでは幼児も育てているし、技術書の執筆は辛いと噂やネットでも聞いていたので、「やり切れるかな？」と思ったからです。ただ、期間は6~12ヶ月というかなりの幅があったので、それだったらできそうだと決めました。

ちなみに今の会社もQiitaの記事(Flutterの記事ではないやつ)で声をかけられたことがきっかけで認識しました。
アウトプットすると技術の定着や自分のブランド作りに良いのはわかっていましたが、こんなにわかりやすいことが起きるとは思っていませんでした。

もしも、現状打破をしたい人は、アウトプットをし続けると何かが変わるかもしれません。

# 執筆

## その前に

執筆を決めて書き始める前にまずしたことは、目次作りです。
最低でも20万字という途方もない文字数を提示されていたので、これをしないとどのくらい書けるかの検討もつきません。
スクラムのストーリーと同じで、大きいものは見積もれないので、細かく分割していきます。

そのときに利用したのが、Chrome拡張の[MindMap Tab](https://chrome.google.com/webstore/detail/mindmap-tab/mkgjficalhplaenklhejcbmlkonbakjj)です。作者のQiitaに[説明](https://qiita.com/yoichiro6642/items/b465cbec2f3dcaaccdb0)があります。非常に使いやすく、また、作者の技術力が非常に高いことはわかっていた（若いときに少しだけ同じ現場にいた）ので安心して使えました。
目次は1日で完成して、出版社に提出して、了承を得ました。（ただし、この頃の目次案と発売時の目次はだいぶ違います。）

そして、次に考えたのがツールです。出版社からの指定はありません。何を使ってもいいとのこと。
以下を検討しました。

* Google Document
* Word
* Re:VIEW 
* Markdown

結局自分の場合は、Githubを使ってMarkdownを使いました。理由は、

* 普段からMarkdownを使っている。
* 新しい知識を仕入れずにできる。
* Markdownから出版社がよしなに校正やDTPをしてくれる
* 参照先は、書き方を工夫すれば最後に一括置換するだけで対応できる

極力、普段自分が記事を書く感覚で書くのが良いと思いました。
レイアウトなどは、自分が書いているときに気にすることはないだろうと判断しました。終わってみて実際にその通りでした。商業誌を書く場合に限って言えば、Re:VIEWなどは全く不要だと感じました。
強力な編集者がメンバーにいることが商業誌執筆の利点だと思うので、そこは甘えさせていただきました。

ちなみに設計図などの画像は、Cacooで書いたものを切り抜いて使いました。画像も適当に作っておけば、出版社が綺麗に作りなおしてくれるとのことでしたので、そこに時間はかけませんでした。

Markdownは章ごとに別ファイルにして管理しました。

## 1ヶ月目,2ヶ月目

開始は7月です。仕事をしながらの執筆は本当に大変で、もう２度と書くものかと思ってました。
この頃は、仕事から帰って、子育てをして、子供が寝て（21時半ぐらい）から、夜の2時ぐらいまで執筆していました。土日はなるべく子供と遊べるようにしていて、深夜に執筆してました。

2ヶ月で、文字数にすると51,573文字書きました。

## 3ヶ月目

退職を決めていたので、1ヶ月の有給を取りました。なので平日はほとんどの時間を執筆に費やしました。
この頃になると土日も子供と遊ばずにしばしば執筆をしていました。沖縄旅行の予定もキャンセルして、書いてました。
そして、9月下旬に執筆終了し、編集者が確認し、いくつかの修正を行い脱稿という扱いになりました。

3ヶ月目の成果は、文字数にすると175,459文字でした。

この時点でAmazonに登録されました。ISBNコードで検索すれば表示される状態です。
この時点では、11月下旬の発売を目指す想定でした。

# 校正

## 原稿修正

ここが出版社の都合で予定より少し遅れたようです。
10/30に一部が校正された状態で戻ってきました。この段階では、まだMarkdownの状態でした。言い回しなどを修正してくれます。章ごとに五月雨式に次々と戻ってきます。
この戻ってきたMarkdownを確認していきます。1ヶ月ぶりにみる自分の原稿は、意味がわからないものに感じて、かなりの量を修正していきました。また、説明の足りない部分も加筆していきました。
脱稿の時点では、あとは校正だけと考えていましたが、冷静になるとわかりづらい部分が多かったですね。

この作業も仕事から帰ってきて夜中の1時ぐらいまでやったり、土曜日を潰したりしてました。ただ毎日やっているわけではなく、原稿が戻ってきたタイミングでやりました。この作業が1ヶ月ぐらいです。
転職したばかりの状態だったので、とても大変でした。

今後、執筆する人は、この段階も甘くみない方がいいでしょう。


## 初校・再校

11/19に発売日がほぼ決まりました。自分としては特に発売を急いでいたわけではなく、これも出版社の都合です。
これからは時間の勝負です。
11/22からDTPが終わったものが、章ごとに五月雨式で戻ってきます。Dropboxを利用して、PDFファイルとしてやりとりします。PDFに赤字を入れていきます。時間との勝負と言いながら今度は自分の都合で忙しくて、ほとんど確認できませんでした。おそらく4日ほどで確認・修正しました。平日深夜と土日を使いました。
11/29に修正結果が戻ってきて、再校です。五月雨式で修正依頼をしました。同時に序文と著者プロフィールを書きます。
これの二つは、他の本の著者のものを参考に書いていきました。
そして、12/4に再校の確認作業が終わりました。
索引はすべて編集者が作っていただけました。

著者としては、あとは待つだけです。ちなみに12/5に印刷所に入稿されました。

# 印税について

よく聞くのは、印税10%ですね。
自分の場合は、2つのパターンを提示されました。

* 初版印税保証部数あり
* 初版印税保証部数なし

簡単にいうと最初のが、初版の一部部数は売れても売れなくても支払われる保証がある代わりに、印税率が低くなります。(10%未満)
もう一つは、実売でしか印税が入らないけど、印税率が高くなります。(10%よりも上)

自分の場合は、「初版印税保証部数なし」にしました。技術本執筆は儲からないのは聞いていたので、正直どっちでも良かったのですが、万が一、売れた場合のリターンを取りました。売れない金銭的リスクは別に大したことないと考えました。どちらにせよ利益はほとんど期待していません。
これは、初期の段階で契約書に書くので、早めに決めないといけません。

# 「基礎から学ぶFlutter」について

## 対象読者

この話をいただいたときは、中級以上をターゲットにした尖った本にしようと考えていました。
書きたいことは、たくさんあったので、それで進めていました。が、正直にいうと書いているうちに目標の20万字にいかないことがわかってきました。
いや、たぶん、中級以上の内容だけでも、頑張れば20万字書けたでしょう。しかし、もう、早く書き終えたかった。
執筆していると他のことが何もできなくなるし、すでに知っている知識なので書いていても面白くありません。
書籍なので、あとで修正できないので、中途半端な知識ではダメで、完璧に調査しないと書けません。上級の内容はそれだけ時間がかかります。

なので、初級が中級にステップアップできる本に軌道修正していきました。

で、その際に初級の内容を書いていくと、足りない部分が多くなってきます。「あれもこれも書かないとわからないのだろう」と、なっていきます。そうすると当初の予定よりも文字数が多くなって、書籍が分厚くなります。そのぶん値段が上がってしまいます。（ちなみにもっと書きたかったことがたくさんあります。)

そのため、出版社が当初予定のフォントサイズよりも小さくして、ページ数を削っていただきけました。そして、当初予定よりも少し値段が上がってしまいました。

また、スマフォアプリを開発している人が望ましいと思います。Flutterの場合、iOS/Androidの知識があるとFlutterの良さに気付けると思います。もちろん、両方開発したことがなくてもできるようにしているつもりではあります。

## 余談

実は、1章から4章は半分以上は、書くつもりはなかったです。特に1章のスタートアップは全く不要と考えていました。
でも、いま考えると、これらがあることで、うまいことまとまった書籍になったと思います。
特に3章と4章で、それぞれのウィジェットをカタログ的に載せましたが、Flutterのウィジェットの8割ほどをカバーしていて、ここまで書いている書籍はもちろんないし、ネット上でもないので、書いて正解だったかもしれません。
1章と2章があるだけで、初級者もターゲットになるし、すでにFlutterを使っている人でも知らない知識がありそうに思えているので、これも書いて正解かもしれません。

## 気をつけたこと

説明が下手でもプログラムがあれば、わかるだろうと思っています。なので、プログラムは多数載せています。
自分の経験上、文字の説明よりもプログラムを読んだ方が理解できることがよくあるからです。

ただし、中級の知識は、さすがにプログラムだけだとわかりづらいと思ったので、頑張って文字や図で説明してみました。ひょっとしたら、説明が下手で理解に苦しむところもあると思います。そればっかりは、すいませんとしか言いようがありません。

序文にも書いていますが、この書籍をきっかけに公式を読み込んでもらうことを目的にしているので、最低でもなんとなくわかった状態になって、あとは公式を理解できるレベルになると執筆した甲斐があります。

## 失敗したこと

Flutterは進化が早いので、ギリギリまでバージョンアップをして、修正してきました。
最後の最後で、DartとFlutterのバージョンを最新にしました。

そのときのDartのバージョンは2.7です。ここで、拡張メソッドが正式に入りました。
書籍では、コラム内で「拡張関数は近い将来Dartに追加される予定です」と記述した状態のままでした。一応、動くプログラムは書いているのですが、文言の修正もれは失態です。

実は、2.6のときにpreview版としては入っていましたが、正式リリースではなかったので、この状態にしていました。
しかし、最後の最後の更新で、ここがもれていました。
同じように「Null Safety」に関しても2.7でpreviewとしてDartに組み込まれています。おそらく次のバージョンで正式に入ると思われます。

今後、新しい技術を執筆する人は、バージョンアップをした場合に修正する箇所をキチンと管理しておくことをオススメします。

また、誤字脱字がまだありました。これはすべて無くしたかったんです。意外と出版社も気づかないので、自分で何度も読み返したり、他の人にもお願いすればよかったです。

## 他に書きたかったこと

* Hot UI
* DartPadがFlutterサポートしてるよ的な
* CIツール（簡単）
* PlatformView
* ライブラリ（一部しか書いてない）

# 発売前の心境

とにかく評判が悪くならないで欲しい。というぐらいです。

執筆にだいぶ時間を費やしたので、否定ばかりされると辛い気がします。
また、買っていただいたのに満足されないということなので、申し訳ない気持ちにもなりそうです。

# 追記

買っていただいた方、いまさらながらですが、誤字脱字など多くご迷惑をおかけします。

写経をしている方が多いみたいなので、最新バージョンで動作するようにしてあります。
https://github.com/ko2ic/book_flutter_src

誤字脱字が多く、困っている方が多そうなので、正誤表も作成しました。まもなく出版社のページに掲載されると思います。