辞書: Interactive Markdown(仮)

投稿日: 更新日:

Interactive Markdown(仮)とは

自分が開発中の、Markdownにインタラクティブ機能をつけたものです。

例: 今日は{{ today }}です。

x: →x^2は{{ numxnum }}です。

モチベーション

これを作ろうと思った理由は、以下の通りです。

  • Excelで手順書を作りたくない。Markdownあたりで作りたい。
  • でもExcelの式は便利。
  • じゃあ、MarkdownでExcelの式みたいなのができればいいのでは?

意外と似たシステムがない

Markdownで変数が使えたらいいなーと前々から思ってたのですが、 そういうシステムって意外とないんですね。 見つけたのはこれくらいです。

あとMathematicaもそんな感じのシステムだったなーというくらいで。。。

機能

今ある機能はこれくらいです。

  • テキスト、数値、セレクトボックスによる入力(Hugoのshortcode)
  • 計算式(Vue.jsの機能)

これから入れたい機能は以下になります。

  • switch文に相当する設定
    • 例えばセレクトボックスの値に応じて連動する値を簡単に設定したいです。
  • Hugo以外でも動くように
    • esaのようなMarkdownを使ったサービスで動くように1
    • 単体のMarkdownファイルで動かせるように。

使っている技術

今のところはこれくらいです。

  • Hugo
  • Vue.js
  • オプションのJavaScript
    • Moment.js
    • sprintf.js

記法

YAML Front Matterに以下のように記載します。

variables:
    today:
        function: moment().format("YYYY年MM月DD日")
    num:
        value: 1
        type: number
computed:
    numxnum:
        value: return this.num * this.num;

あと本文はVue.jsの文法にそって{{}}で囲んで書けばOKです。

Markdown本文中の変数サポート

まだ仕様は未確定ですが、YAML Front Matterをサポートしていない場合に備えて、 本文中に変数を書くことができます。 記法は同じで、以下の点のみ異なります。

  • コードフェンス中に書くこと。
  • 言語はyaml:paramsであること2

  1. もちろんスクリプトが使えることが前提です。 [return]
  2. YAMLで、ファイル名がparamsという意味です。最初はvariablesという名前でしたが、変数定義と混乱するのでやめました。 [return]