org-modeをpdf(tex経由)に変換するdocker imageを作ってみた

# はじめに
研究室の研究会でorg-modeのドキュメント環境作成について発表した。わりと好評だったので、キータにも記事にしようかなと。簡単に言うと

* plantuml
* gnuplot

の文法に対応したorg-modeフォーマットのテキストをpdf(tex経由)へのexport環境を作った。dockerで作ったので、windowsでも使える。dockerだけinstallすれば手元のorg-mode文書をpdf化できる。
技術文書でよく使うUML図や実験データの描画を全部テキストで記述できるので、そのままバージョン管理ツールかけられる。技術文書の作成においてはこの環境はなかなか良いではないかと個人的におすすめする。サンプルのorgファイルも[github](https://github.com/hsnuhayato/docker-org-export/tree/support_pdf)に上げたので、ぜひ合わせて見てみてください。

以下の内容が発表のスライドをそのまま写したもの：


<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgheadline1">ドキュメント書いてますか？</a></li>
<li><a href="#orgheadline2">皆様何使ってんの？</a></li>
<li><a href="#orgheadline3">待って！そのドキュメントは共同編集されますか?</a></li>
<li><a href="#orgheadline4">バージョン管理とは</a></li>
<li><a href="#orgheadline5">バージョン管理しないと&#x2026;</a></li>
<li><a href="#orgheadline6">ある日会社でこんな光景みました</a></li>
<li><a href="#orgheadline7">さすがにこのままじゃやばい！</a></li>
<li><a href="#orgheadline8">じゃあどうすればいいの？</a></li>
<li><a href="#orgheadline9">救世主org-modeキター!!!</a></li>
<li><a href="#orgheadline10">ただし、環境の整備が必要</a></li>
<li><a href="#orgheadline12"><code>docker</code> イメージを作った</a></li>
<li><a href="#orgheadline13">この発表の目的</a></li>
</ul>
</div>
</div>


# ドキュメント書いてますか？<a id="orgheadline1"></a>

-   論文、レポート
-   マニュアル
-   仕様書
-   履歴書

# 皆様何使ってんの？<a id="orgheadline2"></a>

-   word
    -   分けわからない独自の拡張子、フォーマット
-   tex
    -   いいんだが、敷居はそこそこ高い。
-   手書き
    -   履歴書くらいかな。別にワープロでも全然いい&#x2026;

# 待って！そのドキュメントは共同編集されますか?<a id="orgheadline3"></a>

-   しない `->` まあ、何でも良いじゃないですか
-   する `->` 絶対バージョン管理できるようにした方が良い！絶対！

# バージョン管理とは<a id="orgheadline4"></a>

-   版を重ねるにつれ変更履歴情報全部残す
    -   いつ、誰か、何を
-   過去のバージョンに戻せる
-   並列に共同編集してからマージできる
    -   conflictsなければ自動マージ
-   代表的ソフト
    -   git、svn、hg
        -   対象ファイルがテキストファイルであることを前提している。

# バージョン管理しないと&#x2026;<a id="orgheadline5"></a>

-   ドキュメントが更新になったことにも気づかないし、どこが変更になったのかを知る手順がない
-   バージョン管理せずにサーバーに置かれるものは、いつの間に内容が変わったのかを気づきようもない

# ある日会社でこんな光景みました<a id="orgheadline6"></a>

-   うちの会社word、かつ外部サーバー置かない主義
-   事情があってあるwordファイルが同時編集されていた→
    -   `仕様書_0412.doc` 、 `仕様書_承太郎.doc` 、 `仕様書_花京院.doc` と増殖
-   どれが最新版なのかわからない!自動マージできない!カオス！

# さすがにこのままじゃやばい！<a id="orgheadline7"></a>

-   上司に提案してみた。バージョン管理できるようにしようぜ！
-   office365はできるらしい 
    -   外部サーバー置くことになるので×
    -   そもそも会社買ってない。office2010現役
    -   ExcelやWordなどはデータ形式の互換性がバージョンアップの際に失われることがある。10年後に読めるファイル形式であるかの確信が持てない
    -   linuxユーザoffice使えない。
-   simulというクラウドサービスもある
    -   外部サーバ置くとこになるので×
    -   無料プランだと10個のファイルまで

# じゃあどうすればいいの？<a id="orgheadline8"></a>

-   OS非依存したい
-   バージョン管理ツールをかけたい
-   外部サーバーに置きたくない
-   金払いたくない

# 救世主org-modeキター!!!<a id="orgheadline9"></a>

-   emacsの拡張機能(もともとエディタのはずだったが、環境になりつつある)
-   完全なプレーンテキスト `->` gitとかかけられる！
    -   社内サーバーにおけばそのままリポジトリにできる！
-   テキストで書いた文書をtex、html、markdownなど様々なフォーマットにexportできる！
-   tex数式書ける
-   plantUML埋め込める！
    -   クラス図、ユーズケース図、フローチャート図、シーケンス図全部テキストで記述しちゃう！
-   gnuplot使える！
-   文法がeasy
-   無料、OS環境非依存
-   自分の論文をgithubにアップすれば誰かがpull request出してくれるかもしれない！

# ただし、環境の整備が必要<a id="orgheadline10"></a>

-   tex環境や
-   plantUML環境や
-   いくつかのemacsパッケージをインストールしたり
-   emacsの設定ファイル書いたりする
-   日々の行いにより環境設定で挫折する人も&#x2026;

めどいね&#x2026;でも大丈夫だ！なぜなら&#x2026;

# `docker` イメージを作った<a id="orgheadline12"></a>

-   <https://hub.docker.com/r/hsnuhayato/org-exporter>
-   <https://github.com/hsnuhayato/docker-org-export/tree/support_pdf>
-   dockerインストールし、dockerイメージ取ってくれば環境構築一瞬で終わる！
    -   $ docker pull hsnuhayato/org-exporter
    
- ソース取得：
    - $ git clone https://github.com/hsnuhayato/docker-org-export.git -b support_pdf  

## 使い方<a id="orgheadline11"></a>

-   Linux:
    1. githubリポジトリ内のdocker-org-export-pdfスクリプトをパスの通っているディレクトリに入れる。
    1.   $ ./docker-org-export-pdf orgファイル名
-   Windows(power shell):
    -   `>` docker run &#x2013;rm -i -t -v `C:\Users\username:/emacs/tmp --workdir=/emacs hsnuhayato/org-exporter` emacs --batch --load /emacs/emacs_init.el --file /emacs/tmp/orgファイル名 &#x2013;eval '(org-latex-export-to-pdf)' 
        -   `(対象orgファイルが"C:\Users\username\orgファイル名"の場合。windows bat作り方よくわからない...)`
        -   ただし、win10 pro以上じゃないとdocker desktopインストールできない。(hyper-vが必要。win10 homeのユーザは代わりにdocker toolboxインストルしてください)

githubリポジトリ内にexample.orgというサンプル置いてあった。まずはこのファイルの変換を試してみてください。

# この発表の目的<a id="orgheadline13"></a>

-   少しでもorg-mode + バージョン管理ツールの組み合わせる作法を広めたい
-   こんなツールもあるよ！だけ心のどこかに留めていただきたい

次回を待て！！