画像付きマークダウンを手軽に共有する方法

# 要約
- マークダウンで`画像つき`の資料を作る方法を共有したい。

# こんな人に
- 資料を不特定多数に共有することがよくある。
- Excel,PowerPoint,Wordではなく、マークダウンで展開したい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/d88808b4-970a-6fe3-ee70-b12f6a361dac.png)

# 前提
- Windows環境です。
- 拡張機能等は、2023年4月現在の情報です。

# きっかけ
## 1.資料での伝達がメインになってきた。
手順やナレッジを人に伝えたい時、
コロナ前までは、会議での口頭説明でＯＫでしたが、
最近は、文章や資料にまとめて非同期で伝達が多くなりました。

その際、画面での設定手順など、画像をつけたほうが圧倒的に通じやすいので、
「画像つきの資料」を作成する必要性がでてきた。

## 2.資料形式の傾向
画像つきの資料といえば、Excel,PowerPoint,Word が主流でしたが、
最近は、MS製品はダサい、履歴管理ができない、編集できないなどの理由からマークダウンで残すのが推奨とされてきました。

## 3.画像添付の問題
しかし、いざマークダウンで資料を作って連携しようとすると、画像添付の問題にあたります。
「.md」形式のファイルに画像を添付すると、同じフォルダに下記のように画像を保存する必要があります。
    さらに、これを共有する場合は画像ファイルも一緒に共有する必要があります。

↓共有したい資料一式
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/298cbe6a-93e7-d39f-4d0f-a262d7896dfc.png)

↓メールやチャットでこれ一式送らないといけない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/9a9c8e71-e6ab-8fa5-f8a6-0150e28cbf5a.png)


もし画像を一緒にしないと、せっかくの手順が伝わらないものになります。

↓画像つき(手順が明確に伝わる)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/7e147bdd-a397-ad29-b995-f9ebb3b3c34e.png)


↓画像なし（手順が伝わるかどうか不安）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/73835577-5b01-eb6a-f252-f8d36a41c401.png)

しかし、メールやチャットで画像一式送るのは、なんかメンドくさいし、
zip圧縮して送るのも手間だし、それならExcel使う？となり、
せっかくマークダウンで資料作っても、画像添付するだけで共有するハードルがあがってしまう状態でした。
これがどうにかならないかと、いろいろ設定してみて、とりあえずの形ができました。

# 解決方法
- VSCode拡張機能で、添付画像をmdファイルに埋め込みしたhtmlファイルを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/4a0f42a1-98e5-098e-bee9-dd6cea9e1164.png)

# 解決にあたって
- マークダウンエディタは多数ありますが、一番ポピュラーで拡張機能も豊富なvsCodeを使います。
- VSCodeで「.md」ファイルを編集して、完成したら、htmlファイルを出力します。
- htmlファイルにはbase64埋め込みされた画像が含まれるので、画像ファイルを共有する必要がありません。


# やること(1/2)
## VSCodeに拡張機能をインストール
 - [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) → マークダウンまわりの設定用
 - [Paste Image](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image) → 画像貼り付け用
 - ※Markdown関係でよく「Markdown Preview Enhanced」が使われますが、本用途には不要なので、アンインストールしておきます。

# やること(2/2)
## VSCodeの設定
### 1.画像保存フォルダの設定
Paste ImageのBase Path設定に、「${currentFileDir}/img/」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/ac474c2c-cdcf-6a11-99a2-9d15fd3d9eca.png)
- 貼り付けた画像を保存する場所を指定します。
- デフォルトは、同じ場所ですが、ごちゃごちゃするので、/img フォルダにします。
    - 画像保存フォルダが一緒の場合
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/298cbe6a-93e7-d39f-4d0f-a262d7896dfc.png)
    - 画像保存フォルダをimgにする場合
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/60e7fcca-9f44-7d75-a87a-59037face13b.png)

### 2.base64変換チェックオン
Markdown > Extension > Print:img to Base64 をオンにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/cf0c2fc1-ac82-1283-327f-053d86def12f.png)
- これをすることで、html出力時に、画像ファイルがbase64変換して埋め込みます。

### 3.自動出力 チェックオン
Markdown > Extension > Print:On File Save をオンにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/9fa792b7-4865-9379-b058-33883b6d2c6e.png) 
これをする事で、.md ファイルを保存すると、自動でhtmlファイルが作成されます。

# 実際にやってみる
- Qiitaログイン手順を作りました。「手順.md」というファイル名にします。
```
# Qiitaログイン手順

## 1.Qiitaを開く
　https://qiita.com/

### 2.「ログイン」をクリック
![](./img/2023-05-07-10-29-40.png)

### 3.ID,メールアドレス、パスワードを入力
![](./img/2023-05-07-10-32-12.png)

### 4.Qiitaにログインをクリック
![](./img/2023-05-07-10-33-36.png)
```

VSCode上は↓こうなります。（右側はプレビュー）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/3b8f8e81-b2f9-3191-70bc-5ec547dfe14e.png)

保存すると、同じファイル名のhtmlファイルが自動で出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/1269ad85-46f8-3824-9b33-b65954dfe8c4.png)

- 出力したhtmlを開くとこうなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/47451bf2-f9d8-4abe-78c4-bdc14af11ada.png)

- htmlのソースを開くと下記のように画像がbase64変換されて埋め込まれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/2c9d1286-701f-dabe-39f7-e6621c8a79dc.png)
- こうすることで、画像を添付しなくても、htmlファイルだけで、共有が可能になります。
↓もし、base64の設定がない場合は下記のように画像へのパスが書かれる事になります。
この場合、画像ファイルがそこに存在していないと、画像が表示されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/2767e4df-96d9-790f-8883-dc82dde32df8.png)



base64埋め込みされた状態のhtmlを、画像がないフォルダに保存してみても
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/cb0ef02c-4ef4-7ee2-d74d-1294c87e2b8b.png)
画像が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/e3d6f254-d1b2-78b2-c061-60359b198f8c.png)
base64埋め込みすれば、画像ファイルを添付しなくても、画像表示可能となることが確認できました。



# やってみて
- とりあえず当初の目的は達成でき、共有できるようになりました。
- 同じ形で、pdf形式も可能です。どちらにするかは共有先の環境とか、好みの問題になります。
- 共有したものをだれでも編集できるようにするには、「.md」を共有することになりますが、その人が同じ設定をしてないと、同じhtmlは作れません。なので今回の方法はあくまで一方向の共有向きです。
- notionやGitHubやMS365やSharePointとか、元々共同作業環境があるのであれば、今回の方法は必要ないかもしれません。
- あくまで「手元でさらっと書いたものを、手軽に共有（そのあと一人歩きしてもよい）」というスタイルにこだわりたかった。
- 出力したhtmlがそっけなさ過ぎて、装飾したい時には追加のcssを設定することもできます
追加のCSS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445755/ee8c594f-40c8-7434-aaf6-51e03254195e.png)
- 同じ悩みを抱えている誰かの一助になれば幸いです。