読者です 読者をやめる 読者になる 読者になる

Markdown メモツール mamemose を作りました

mamemose: Markdown memo server

Markdown で快適にメモを取るためのツールを作ったので公開しました。 mamemose といいます。 Ruby でできています。 UNIX ライクな環境で動きます。

コレは何

軽量マークアップ言語である Markdown でメモを取るためのツールです。 この手のツールはすでにいくつか存在しますが、 mamemose は次の特徴を持っています。

  • Ruby
  • ローカルで HTTP サーバとして動く
  • テキストエディタ等で書かれた Markdown 形式のファイルを、コマンド操作無しで HTML に変換して表示する
  • ローカルに余計な HTML ファイルなどを生成せず、ディレクトリを汚さない
  • 複数マシンで内容を共有できる (要 Dropbox 等)
    • 出先でモバイル端末からも Dropbox 等にアクセスして手軽に見ることができる
  • 使い慣れたエディタでメモを取ることができる
  • 検索できる
  • ディレクトリを掘ることで構造化する。タグなどで管理する機能はない

公開までの流れ

半年ほど前のある日、僕はある勉強会に参加していました。 それまでにも何かするたびにメモをどうにかして残そうとは思っていたものの、 馴染むツールが見つからず結果としてあまり見返したいと思えないようなメモになってしまうことが常でした。

その日試しに Markdown というもので一度メモを取ってみて、その手軽さを知りました。 Markdown はそれまで聞いたことはあったものの、「所詮 HTML に変換するだけだろー」と いう感じであまり良い物には思えなかったのです。 しかし実際に触れてみてその考えは180度変わりました。 むしろ自分の書くメモをすべて Markdown で書きたいと思うまでになったのです。

世の Markdown メモツールを探しましたが、いまいちコレというものが見つかりませんでした。 プログラムを書くのと同じ感覚でメモを取りたい。 ふと気づいたときにさっとエディタからメモを取りたい。 そして見るときは HTML + CSS で綺麗にマークアップされたものを見たい。 でも変換のためにコマンドを打つのは嫌だし、同じ内容の Markdown ファイルと HTML ファイルが別々に存在するのも嫌だな。 複数マシン間での同期は必須 (これは Dropbox 様の力を借りてもいい)。 もちろんマルチプラットフォーム、少なくとも Mac と Linux は必須。 プログラムのシンタックスハイライトもしてほしいかな。できれば数式も打ちたい。

このような自分の要求に答えるメモツールは探した限りでは見つかりませんでした。 そこで自分で作ることにしたのです。

ある程度使える状態まで作ったものを初めは gist で公開していました。 その後機能が増えてきたので GitHub の普通のリポジトリに変更しました。 そして今日、 RubyGems に公開し、簡単にインストールできるようになりました。

名前は mamemose といいます。発音は「マメモス」でしょうか。 Markdown memo server で mamemose です。 ネーミングセンスないって言うなよ。

インストール

RubyGems に公開されています。インストールはコマンド一発

$ gem install mamemose

でできます。

使い方

詳しくは GitHub のページ を読んでください。 流れとしては、

  1. 設定ファイル ~/.mamemose.rb に設定を書く。
  2. $ mamemose コマンドで mamemose サーバが起動
    • ~/.gem/*/bin あたりにパスを通す必要あるかも
    • ログイン時に自動的に起動するように設定するとよいでしょう
  3. http://localhost:PORT/ にアクセスすると、設定ファイルの DOCUMENT_ROOT で指定したディレクトリ以下のファイルが綺麗にマークアップされて見ることができます。
  4. もちろん、メモを編集したらブラウザの更新ボタンを押すだけで反映されます。 煩わしいコマンド入力などは必要ありません。

という感じです。

シンタックスハイライトは、広く使われている GitHub Flavored Markdown の構文を使うことができます。 ただしハイライトエンジンは JavaScript 製の SyntaxHighlighter を使います。シンタックスハイライトの機能については、一時期 Pygments を使うなど悩んだのですが、 あまりサーバの役割を増やしたくないということでこの形に落ち着きました。

また、 MathJax の力を借りて数式も書くことができます。 構文はほぼ LaTeX そのままなので、新しい数式マークアップの構文を覚える必要もありません。

その他

なぜ Ruby で作ったのか

普段使う言語は Haskell, C++, Ruby です。 そのうちなぜ Ruby を選んだかということですが

  • RubyWEBrick という標準ライブラリでとても手軽に HTTP サーバを立てることができること。 また Ruby 言語自体の表現力の豊かさから、そのサーバを拡張して アクセスされたファイルに変換をかまして返すような機能を実装するのに最適だったこと。
  • Ruby は広く使われているし、いくつかのプラットフォームでは標準で入っている。 Haskell に比べれば導入障壁ははるかに低いということ。

ということが挙げられます。

ちなみに僕はエセ Rubyist で、書き捨てのスクリプトを Ruby で書くことはよくありましたが、 真面目なプロジェクトで Ruby を使ったことはありません。 bundler とかも存在は知っていたもののほぼ初めて使った感じ。 もちろん RubyGems への登録も初めて。

注意

あくまで「ローカルで使う個人用のメモツール」の前提なので、公開用の Web サイトとかで使わないように。 たぶん重すぎて使いものにならないです。

テスト

書いてない。 5ヶ月ほど使ってきて致命的に困ったことはないので大丈夫だと思うのだけど。 もちろん書くべきとは思っている。