다이어그램과 차트를 만드는 Mermaid를 Org-mode에서 사용하기

1 minute read

mermaid는 plantuml처럼 텍스트로 다이어그램을 만드는 프로그램이다. github도 지원하고 gitlab도 지원한다. plantuml보다 더 대세가 된 것 같아 쓰기 시작했다.

전용 에디터나 뭐 그런걸로 mermaid 다이어그램을 만든다? 노노. emacs를 놔두고 왜 그런 걸. org에서 mermaid를 사용하는 방법을 소개한다. mermaid 소스 코드 블럭을 만들어서 실행하면 mermaid가 만든 이미지가 결과물로 착~ 붙는다.

mermaid-cli 설치

mermaid-cli는 Node.js로 만들었다. 그래서 Node.js가 없다면 먼저 설치한다.

windows

npm install -g @mermaid-js/mermaid-cli

mermaid-cli 패키지를 글로벌로 설치한다. 이렇게 쉽게 끝나면 좋은데, 에러가 난다.

We do NOT recommend installing it globally because both YARN and NPM could fail to install a command-line tool globally properly due to weird permission issues. yarn global add @mermaid-js/mermaid-cli or npm install -g @mermaid-js/mermaid-cli

mermaid-js/mermaid-cli - github.com 페이지에도 추천하지 않는 방법인데. 이슈에 자기는 잘만 쓰고 있다는 댓글을 봐서 혹시나 싶어 시도해봤다. 역시나 실패다.

mkdir mermaid-cli
cd mermaid-cli/
npm install @mermaid-js/mermaid-cli
node_modules/.bin/mmdc -h

디렉터리를 하나 만들어서 로컬로 설치했다.

mermaid-cli 실행 파일 경로는 ~/bin.local/mermaid-cli/node_modules/.bin/mmdc.cmd 이다.

macOS

brew install mermaid-cli
mmdc -h

homebrew로 설치한다.

mermaid-mode 설치 및 세팅

구문 강조(syntax highlighting), 들여쓰기(indent), mermaid 컴파일 등을 지원하는 패키지다. 컴파일은 뒤에 설치할 ob-mermaid 에서도 할 수 있어서 필요 없을 것 같지만 구문 강조와 들여쓰기를 사용하려고 설치했다.

(use-package mermaid-mode
  :init
  (setq mermaid-mmdc-location "~/bin.local/mermaid-cli/node_modules/.bin/mmdc.cmd")
  )

디폴트 임시 파일 위치가 루트 tmp 디렉터리로 잡혀있다. windows에서 설정 변경 없이 사용하려면 C:\tmp 디렉터리를 만들어준다. 디렉터리가 없으면 그냥 실패하기 때문에 만들어줘야 한다. 아님 mermaid-tmp-dir 심볼에 원하는 경로를 설정해주면 된다.

M-x mermaid-compile-buffer

함수를 실행하면 다이어그램을 보여준다.

ob-mermaid 설치 및 세팅

org-babel에서 mermaid를 사용할 수 있게 하는 패키지다.

(use-package ob-mermaid
  :init
  (setq ob-mermaid-cli-path "~/bin.local/mermaid-cli/node_modules/.bin/mmdc.cmd")
  )

mermaid-cli 경로를 지정한다.

(org-babel-do-load-languages 'org-babel-load-languages
                             (append org-babel-load-languages
                                     '((mermaid . t)))
                             )

org-babel에서 사용할 수 있는 언어로 mermaid 를 추가한다. 이걸 해야 소스 블럭에 언어로 mermaid 를 사용할 수 있다.

#+begin_src mermaid :file test.png
  sequenceDiagram
      A-->B: Works!
#+end_src

테스트로 이렇게 만들어서 C-c C-c 키를 누르면 mermaid 가 만든 다이어그램을 볼 수 있다.

파일만 보인다면 M-x org-toggle-inline-images 함수를 실행하거나 (setq org-startup-with-inline-images t) 코드를 설정 파일에 추가해 항상 보이게 할 수 있다.

C-x C-s C-x C-c