Help us understand the problem. What is going on with this article?

Hugoと自作シェルスクリプトによるMarkdownメモ環境の構築

More than 3 years have passed since last update.

はじめに

これまで仕事(研究)関連のログは主に連携の必要性からOneNoteを使って取っていたものの、最近プログラミングの仕事が多くなってきたことからEmacsでログを取りたいなあと考える。
OneNoteはログを共有するという点で素晴らしく使い勝手がいいプログラムだし、初心者でもWord/Powerpointに慣れていればすぐ使えるという利点もある。ただし、個人的に不満な点は

  • 長めの文章を書くのにできればEmacs or Emacsキーバインディングで書きたい
  • プログラムコードのメモをするのにOneNoteはsyntax highlightしてくれない(プラグインを使うと可能だが有料)

ということで個人的なログを残すのにはテキストベースのものに以降をすることに決める。選択肢としてはEmacs org-modeかMarkdownか迷ったものの、Org-modeはいまいち文法がしっくりこないのと、機能が豊富すぎて混乱する(キーバインディングが覚えられない、、!)1という理由から、Markdownを使うことにする。

Markdownを使ったメモ環境の構築

さて、環境を構築するにあたって考慮したのは、

  • メモやログはEmacsで書きたい。すなわちテキストベースで完結するもの
  • でも画像も時々入れたい
  • Emacsでも画像表示はできるが、後々見返す時のためにも全体をもっとキレイに表示できるようにはしたい
  • でもいちいちHTMLに変換したりするのは面倒くさい(できれば避けたい)
  • オンラインでもオフラインでも使えるのがいい
  • Dropbox等で共有して、どのマシンでも気が向いた時に編集したい

というわがままな理由を全部満たしてくれるもの。過去にもchalowや、テキストベースのWiki
などでメモを取っていたので、できれば同じような感覚で使える(でももっとモダンな)ツールを探していたところ、最終的に行き着いたのがHugo
他にも MDwikiを使うことも考えたが、Syntax highlightingに対応している言語があまり多くなく、しかも自分が使っている言語に対応していないので結局パス。

Hugo

Hugoの基本的な設定に関してはQiitaですでに色々と書かれている記事があるので、説明はそちらlを参照してください。今回、自分で使いやすくするためにした変更は以下。

トップページをmarkdownで書きたい

デフォルトだとトップページ(ホームページ)はhugoを実行した際、自動で生成されるようになっている。しかし、これだと各記事のサマリーが表示されていたりして、あまり好きじゃないので自分で編集できるようにする。このページを参考に以下のように設定。

  • layouts/index.html
{{ range .Data.Pages }}
    {{if eq .Type "index" }}
        {{ template "partials/header.html" . }}
        {{.Content}}
    {{end}}
{{ end }}
  • layouts/_default/single.html
{{ template "partials/header.html" . }}
    {{ .Content }}
{{ template "partials/footer.html" . }}

そして content/index.md を以下のような感じに作成

+++
type = "index"
title = "My Hugo Site"
+++

# Journal

 * [2017-01-31](post/2017-01-31/) -- Qiita用記事
 * [2017-02-02](post/2017-02-02/)
 * [2017-02-04](post/2017-02-04/)

Pygmentsによるsyntax highlight

Pygmentsはcondaなりpipからインストールする。さらに Code Fence(```)でsyntax highlightしてくれるように config.toml を以下のような感じで設定。

languageCode = "en-us"
title = "Research Log"
baseurl = "http://example.org/"
PygmentsCodeFences = true
pygmentsstyle = "default"

自作スクリプト

いろんなショートカットなり、コマンドはいちいち覚えていられないので、メモを書きたいときにサクっと書き始められるようシェルスクリプトを書く。

大したスクリプトじゃないですが、何をやってるのか簡単に書いておくと、

  • まず起動すると何をやるか聞いてくる。
What to do? 

  a. Write a journal 
  b. Open an existing journal 
  c. Add a todo 
  d. Write a memo

Choose (a-d): 
  • メモを取るにはaを選択して、ファイル名を入れる(デフォルトはYYYY-MM-DD.md)。
    • 必要であればタイトルも入れる。その場合のファイル名はYYYY-MM-DD-<title>.md
  • さらに新しく作られたファイルへのリンクをindex.mdに追加し、hugoを起動、ブラウザでlocalhost:1313を開く。

終わりに

これまでorg-modeやJupyterなど、いろいろなメモ環境を試していたものの、いずれもしっくりこない、という問題がありました。結局それなら自分で作ったほうがいいんじゃね?という結論から最終的に自作メモスクリプトを作るに至りましたが、自分の好きなエディタでメモが取れる、しかもいろんなショートカットを覚え無くていいため、今ではかなりストレスなしにメモがとれます。Emacsでの使用を想定してスクリプトを書きましたが、基本的にはちょっと手を加えれば他のエディタでも動くはずです。

参考になれば幸いです。


  1. もちろんOrg-modeをディスってるわけではありません、念のため。。。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした