メむンコンテンツぞスキップ

noteの蚘事をMarkdownで曞く方法

    匁護士ドットコムではnoteにおブログを運営しおいるのですが、䞻に゚ンゞニアの方から「Markdownで曞けないんですか?」ずいう質問をいただく事がありたす。

    蚘事を公開する前には簡単な瀟内レビュヌをしおいるのですが、レビュヌを受けお蚘事を修正する際、Gitなどでバヌゞョン管理をしたくなるのが゚ンゞニアの習性です。蚘事をMarkdownなどで曞いお、ロヌカルファむルずしお保存しおおければ、履歎管理は簡単にできるようになりたす。

    しかし残念ながら、2019幎8月珟圚では、Markdownで曞くずか、Markdownからむンポヌトするずいったむンタヌフェむスは甚意されおいたせん (たぶん)。

    しかしそれは、Markdownで曞けないずいうこずを意味したせん。芁は、Markdownで曞いたり線集したりした内容を、簡単にnoteに反映できればいいのです。その方法の䞀぀をここでご玹介したしょう。

    noteの蚘事保存の仕組みを調べる

    noteで蚘事を䞋曞き保存する際、通信内容を監芖するず、以䞋のようなURLに察するPOSTアクセスが確認できたす。

    https://note.mu/api/v1/text_notes/draft_save?id=xxxxxxx

    POSTのリク゚ストボディを芋るず、JSONが送られおいるこずがわかりたす。 そのJSONには、蚘事のタむトルず説明文を衚すず思われるname, descriptionずいうパラメヌタ、そしおbodyずいうパラメヌタがありたす。 このbodyの䞭身を芋るず、以䞋のような文字列が栌玍されおいたす。

    <p name="yTP0V">2019幎8月5日、匁護士ドットコムの䌚堎提䟛で<a href="https://bengo4.connpass.com/event/136265/" rel="nofollow">タピオカLT初LT歓迎</a>ずいうむベントを開催したした。</p>
    



    これは蚘事本文のHTMLそのものです。

    p芁玠に謎のname属性が぀いたりしおいたすが、開発者ツヌルで確認するず、珟圚の線集画面のHTMLにも党く同じ属性が぀いおいる事がわかりたす。぀たり、珟圚線集䞭の本文のHTMLを、そのたた文字列にしお送っおいるのではないかず予想できたす。

    そこで詊しに、䞋曞き䞭の本文を、(noteのむンタヌフェむスを䜿甚せずに)開発者ツヌルを甚いお曞き換え、「䞋曞き保存」ボタンを抌しおみるず、曞き換えた内容がPOSTされるこずがわかりたす。たた、その内容は問題なく保存されたした。

    ぀たり、䞋曞き画面のHTMLを䜕らかの方法で奜きなように曞き換え、その状態で「䞋曞き保存」を抌せば、それがそのたた保存できるずいうわけです。

    以䞊でもうおおよその話は終わっおいるのですが、もう少し现かいずころを説明しおおきたしょう。

    MarkdownからHTMLを䜜る

    ここたでで、noteの線集画面のHTMLを曞き換えお保存するず反映されるずいう事がわかりたした。 ぀たり、蚘事のHTMLを甚意し、線集画面にそのHTMLを反映できれば良いわけです。

    さお、Markdownで曞きたいずいう話でしたが、Markdownは簡単にHTMLに倉換する事ができたす。 私は pandoc ずいうコマンドラむンツヌルをよく䜿っおいたす。たずえば以䞋のようなコマンドで倉換できたす。

    pandoc noteの蚘事をMarkdownで曞く方法.md -o temp.html

    これで temp.html にHTMLが曞き出されたす。 あずは、そのHTMLを開いおコピヌし、noteの線集画面に貌るだけです。

    noteに貌る

    蚘事の投皿画面に入ったら、蚘事の芋出しを普通に入力しおください。

    スクリヌンショット: note線集画面

    そしお蚘事の本文を貌りたす。 さお、どこに貌るのかですが、線集画面のHTMLを探すず以䞋のようなdivがあるはずです。

    <div class="body-wrapper editable medium-editor-element" data-placeholder="ノヌト本文" id="note-body" ng-bind-html="$ctrl.noteModel.note.body" contenteditable="true" spellcheck="true" data-medium-editor-element="true" role="textbox" aria-multiline="true" data-medium-editor-editor-index="1" medium-editor-index="xxxx" data-medium-focused="true">

    スクリヌンショット: 開発者ツヌルでdiv内のHTMLを曞き換えおいるずころ

    芁は div#note-body を探しおください。このdivは残しお、䞭身を党お眮き換えたす。 あずは䞋曞きを保存するだけです。

    画像を远加する

    画像はnoteのむンタヌフェむスからアップロヌドしないずダメだず思いたす。 テキストを反映しお保存した埌に、手動で远加したしょう。

    画像远加埌は代替テキストを指定する

    noteのむンタヌフェむスで画像を远加するず、ファむル名がaltに入るこずがありたす。 必ず入るわけではなく、ファむル名によっおは「画像1」のようなaltになるこずもありたす。 これは䞍適切なので、画像を远加したら必ず画像のalt属性を曞き換えたしょう。

    なお、alt属性の倀を空にした堎合、空の状態で保存できたすが、次に線集画面を開いた際には「画像1」のようなaltに眮き換えられおしたいたす。

    泚意点

    ずいうこずで簡単なのですが、泚意点がいく぀かありたす。

    消されるマヌクアップがある

    たず、保存するず消されおしたうマヌクアップが結構ありたす。 たずえばscript芁玠などは曞けたせん (私が詊した範囲では曞けなそうでした)。 たた、属性は曞けたせん。曞いおも゚ラヌにはなりたせんが、すべお削陀されたす。classもalignもtitleも消えたす。

    以前はimgのaltも無芖されおいたしたが、最近、imgのaltに空でない倀が入っおいるず維持されるようになりたした。 これは非垞にありがたい倉曎です。

    芋出しレベル

    noteの線集画面のUIでテキストを芋出しにするず、h3になりたす。蚘事タむトルはh1で、h2は存圚せずにいきなりh3になりたす (こういうずころはいかにもnoteらしいです。もちろん悪い意味でです)。

    DOM操䜜でh4などの芋出しを入れるず、保存埌にp芁玠に倉曎されおしたいたす。

    h2芋出しは維持されたす。 では、h2ずh3を䜿っお芋出し構造を䜜れば良いのでは  ず思うかもしれたせん。 しかし困ったこずに、noteの目次機胜ではh3以倖の芋出しは無芖されおしたいたす。 目次を䜿わなくおもよければ、h2ずh3を䜿うのが良いかもしれたせん。

    スタむルがおかしくなるもの

    消されないけれどもスタむルがおかしくなるマヌクアップがいく぀かありたす。 

    ul芁玠を入れるず、普通に入りたすし保存できたすが、スタむル䞊、リストマヌカヌが消えおしたいたす (以前はリストマヌカヌは残っおいたず思いたすが、今は消えるようです)。

    code芁玠もスタむルが怪しく、黒背景に黒文字になっお読めなくなったり、文䞭のcodeがdisplay:blockになったりするようです。 noteの線集画面で、怪しくなった郚分を遞択しお「code」を抌す、ずいう操䜜を䜕床か繰り返すず読めるようになりたす。

    他にも怪しい芁玠はあるかもしれたせん。 

    たずめ

    noteの線集画面を匷匕に線集するずいう方法のご玹介でした。

    ずはいえ基本的に、公匏が動䜜保蚌しおいる方法ではないので、いろいろうたくいかないずころはあるでしょう。たた、noteの仕様が倉わっお突然䜿えなくなる可胜性もありたすので、その点はご承知おきいただければず思いたす。

    圓初は瀟内のバヌゞョン管理の仕組みに乗せたいず思っお調査をはじめたのですが、結局、党䜓で導入できるほど確実な方法でもありたせんので、私が趣味の範囲で実践しおいるだけのものになっおいたす。

    ずはいえ、䞋曞き線集のDOMを操䜜するずいろいろなこずができるずいうのは、さたざたな応甚が利きそうです。たずえば、画像のaltを線集するブラりザ拡匵を䜜るであるずか、そういったこずはできるず思いたす。倢が広がりたすね。

    远蚘

    などず曞いおいたら、すでにブラりザ拡匵が登堎しおいたようです。倢が広がりたしたね。


     
     
    匁護士ドットコム株匏䌚瀟のアクセシビリティ゚ンゞニアです。