新しい電子書籍を書いてみた【Mbed OSではじめるIoTデバイス開発　＃１ 入門編: 簡単プロトタイピングから本格開発まで】

2020年8月3日に4冊目となるKindleの電子書籍
<a href="https://www.amazon.co.jp/gp/product/B08F4LSZ3C/ref=as_li_ss_il?ie=UTF8&linkCode=li3&tag=jksoft-22&linkId=27167590c7589a9febd4f6c6d69c9deb&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08F4LSZ3C&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=jksoft-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=jksoft-22&language=ja_JP&l=li3&o=9&a=B08F4LSZ3C" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
[【Mbed OSではじめるIoTデバイス開発　＃１ 入門編: 簡単プロトタイピングから本格開発まで】](https://amzn.to/3i4pQ2E)

を出版しました。

この本以前はMS Wordで執筆して、Kindleの変換機能を使ってKindleのファイル形式であるmobiに変換し出版という流れでしたが、これを変えてみたので紹介します。

# 変えた理由
MS Wordは、ページ分割や改行、文字の装飾等をそのままいじりながら書いていけるので、イメージそのままで最終的なデザインイメージで書いていけますが、どうしてもデザイン的にオリジナル感を出しにくかったり、ソースコードを掲載しにくかったりとやりにくい部分がありました。

# 今回の書籍は
文章の執筆はQiitaの記事と同じmarkdown形式、デザインはCSS、[Pandoc](https://pandoc.org/)というドキュメントコンバータを使って、markdown + CSSからepub3、kindleの変換機能でmobiに変換という流れです。
「[Kindleで技術書の電子書籍を公開するまで](https://qiita.com/lucidfrontier45/items/f52cbf9532445ec8e760)」と「[Markdown + Pandoc でお手軽に電子書籍を書く](https://qiita.com/sta/items/c88093b1b9da9c77b577)」という記事を参考にさせてもらいました。

## markdown
Qiitaの記事を書いている方でしたら説明するまでも無いと思いますが、テキストだけで見出しや文字の装飾、画像や表の挿入等が表現できる形式です。テキストエディタは[Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)を使っています。markdownのプレビューも確認することができます。

## CSS
CSSを1から全部書くのは大変だったため、[GithubのCSS](https://gist.github.com/andyferra/2554919)をベースに使わせてもらいました。
見出しのデザインやコードブロックのデザインをカスタムしています。

### 見出しのデザイン
たとえば見出し1と見出し2のデザインは次の様に変えています。

#### 見出し1
```css
  font-size: 28px;
  color: #FFFFFF;
  padding: 0.2em 0.5em;
  background: #002B49;
  font-weight: bold;
```

##### 表示例

* 原文

```
# Mbedの概要
```

* Kindle書籍上の表示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/01504acb-d8b1-a0d4-4dc8-59b36eb5b418.png)


#### 見出し2
```css
  background: #dfefff;
  box-shadow: 0px 0px 0px 5px #dfefff;
  border: dashed 1px #96c2fe;
  padding: 0.2em 1em;
  color: #454545;
  padding-top: 20px;
```

##### 表示例
* 原文

```
## Mbedとは
```

* Kindle書籍上の表示（章番号が表示されるのはpandoc変換時の機能）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/b9b144c5-9917-3771-7639-e6abc07bf694.png)

#### コードブロック
```css
pre.numberSource {
  border-left: 1px solid #000000;
  margin-left: 3em;
  padding-left: 4px;
}

pre.numberSource code > span > a:first-child::before{
  text-decoration: none !important;
}

#cpp_code {
  background-color: #f8f8f8;
  border: 2px solid #000000;
  color: #000000;
  font-weight: bolder;
  font-size: 10px;
  line-height: 1;
  display:block;
  padding: 1px;
  overflow: hidden;
}

```

##### 表示例
* 原文

```
```{#cpp_code .cpp .numberSource startFrom="1"}
/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"
#include "platform/mbed_thread.h"


// Blinking rate in milliseconds
#define BLINKING_RATE_MS            500


int main()
{
    // Initialise the digital pin LED1 as an output
    DigitalOut led(LED1);

    while (true) {
        led = !led;
        thread_sleep_for(BLINKING_RATE_MS);
    }
}
```　
```

* Kindle書籍上の表示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/5c4124f3-47e7-acac-df7b-2b4ec813e132.png)

## この方法の利点
テキストで書かけるので空いた時間にスマホでもちょっとしたテキストエディタでも書き進められます。ちょっと独特のルールもありますが、CSSでいじれる幅がかなり広いため、デザインは自由にできます。

## この方法の欠点
CSSはほぼ初めていじったので、悩みました。最終的なデザインに反映されるのにどこをどういじればいいかなかなかドキュメントが無いため、試行錯誤しました。実際、うまくいかずごまかした部分もあります。ある程度自動な方が楽だと思います。