Atomのmarkdown-tocで日本語の目次を作るための暫定対応

markdown-tocとは、mdファイル内の見出し記法(#)を元に、目次を自動作成するAtomのパッケージです。

参考: [markdown-tocのインストール方法と使用方法](https://creating-homepage.com/archives/8356)

---
# markdown-tocの問題点

デフォルトのパッケージでは以下の問題があるため、そのままでは使いづらい

1. 日本語の目次が作れない
1. コードブロック内でも目次になってしまう
1. markdown-tocを一度実行すると、他のファイルでmarkdown-tocが利用できなくなる

---
# 解消手順

デフォルトのパッケージでは上記の問題があるため、以下の暫定対応をしてある程度使えるようにしました

## 一度アンインストール

Atomのパッケージ機能でmarkdown-tocをインストールしている場合は一度アンインストールします

1. Atom のメニューから (Atom/環境設定/パッケージ/) を選択する
1. markdown-tocの (アンインストール) を選択して、ソースを削除する


## apmコマンドでインストール

markdown-tocの最新マスタをapmコマンドで再インストールします

1. Atom のメニューから (Atom/シェルコマンドをインストール) を選択する
1. ターミナルを起動して `apm install https://github.com/nok/markdown-toc`を実行する
1. GitHubアカウントのUsernameとPasswordを聞かれるので入力する
1. Cloneが成功したらAtomにプラグインがインストールされる

**備考**

* GitHubアカウントがない場合は、GitHubのサイトから直接ソースコードをダウンロードしてローカルのソースと入れ替えても大丈夫です
* パッケージ機能でのインストールでは少し古いため、（問題点2と3が解消されている）最新マスタを利用します


## ソースコードを直接修正（暫定）

markdown-tocのソースコードを直接修正して日本語対応します（暫定）

1. (/Users/[UserName]/.atom/packages/markdown-toc/lib/)Toc.coffee をエディタで開く
1. Toc.coffee の[205行目](https://github.com/nok/markdown-toc/blob/master/lib/Toc.coffee#L205)をコメントアウトして上書き保存する
1. Atomを再起動して、修正を反映させる

```coffee:Toc.coffee
-     hash = hash.replace /[^a-z0-9\u4e00-\u9fa5äüö\-]/g, ""
+     # hash = hash.replace /[^a-z0-9\u4e00-\u9fa5äüö\-]/g, ""
```

**重要**

* あくまで個人的な暫定対応なので、もっと良い方法があると思います
* 目次に記号は使えません
* 使える文字
  * 英数字、ひらがな、カタカナ、漢字、スペース、ハイフン


## markdown-tocの使い方

後は通常通り使うだけなので、使い方は以下の記事を参考にしてください
参考: [markdown-tocのインストール方法と使用方法](https://creating-homepage.com/archives/8356)

---
# おまけ：問題解析
## 日本語の目次が作れない
■問題点
目次(#)に含まれる日本語は全て削除されてしまうので、日本語を含む目次は作成できない

■期待動作
目次に日本が含まれていても目次がリンクされること

■原因
実装上、英数文字と漢字以外はすべて削除されてしまう

■試したこと
以下のサイトを参考に対応してみたが、後もう一歩だった

* [Atomのmarkdown-tocでタイトルが日本語の場合に動かない場合の対処 - 山ｐの楽しいお勉強生活](https://yamap55.hatenablog.com/entry/2018/04/21/004258)
* [atomのmarkdown-tocの設定変更方法と日本語リンクしない理由をcofeee-scriptで探る - ツナワタリマイライフ](https://blog.chaspy.me/entry/2016/03/15/120000)

■結論
（私の使い方なら）[205行目](https://github.com/nok/markdown-toc/blob/master/lib/Toc.coffee#L205) をコメントアウトすれば良いだけ
なので、ローカルのソースを直接修正して暫定対応
他にもプルリクは上がっているが、私の使い方なら取り急ぎは上記のコメントアウト対応だけで良さそう


## コードブロック内でも目次になってしまう
■問題点
コードブロック内で(#)を使うと目次になってしまう

■期待動作
コードブロック内での(#)は目次にしない

■原因
こちらも実装上の問題となるが、最新マスターでは問題が解消されている
[Comparing 550de53c959d1849cb9b4c8d028e74aa02afb7f4...master · nok/markdown-toc](https://github.com/nok/markdown-toc/compare/550de53c959d1849cb9b4c8d028e74aa02afb7f4...master)

■試したこと
最新マスターでは解消されていることを知らずに、自力でソース修正をして解決していたが、無駄な努力だった。
ちゃんと公式の情報は確認した方が良いですね。

■結論
最新マスターを取り込めば解消される
[fix #45: Code block comments treated as headings · nok/markdown-toc@234bff8](https://github.com/nok/markdown-toc/commit/234bff8e0d3899eeaa3d37fb2d74c74fe0ca7d12)


## 他のファイルでmarkdown-tocが利用できなくなる
■問題点
markdown-tocを一度実行すると、他のファイルでmarkdown-tocが利用できなくなる

■期待動作
他のファイルでもmarkdown-tocが利用できること

■原因
こちらも実装上の問題となるが、最新マスターでは問題が解消されている

■試したこと
冬休みの間にこのバグ対応をしようとソースを確認していたら、ふと他の人がプルリクを作成していないか気になったので確認したら、すでに最新マスターにはマージ済みだと初めて知った

■結論
こちらも最新マスターを取り込めば解消される
[Fixes, work with multiple files at a time · nok/markdown-toc@278c5e4](https://github.com/nok/markdown-toc/commit/278c5e4d52153bacb7ea00a8738f73edcdce2a3b)


---
# おわりに
これまでは SubLimeText の OmniMarkupPreviewer を使って目次作成とプレビューを行なっていたが、新しい現場ではテキストエディタが Atom しか使えなくなってしまったので Atom で目次を作る方法を調べています。

[MarkdownでHTMLを簡単に　- Sublime Tex　編 - 愚鈍人](http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=sublime_markdown)