Org-modeのプラグインであるorg-babelでドキュメント内に記述したコードを実行する方法と #+PROPERTY: 構文を使った設定設定の共通化の方法をまとめました。

コードブロックとorg-babel

org-babelを使うとOrgのコードブロックを実行し結果をファイルに反映できます。

#+HEADER: :engine mysql
#+HEADER: :dbhost 127.0.0.1
#+HEADER: :dbuser person_local
#+HEADER: :dbpassword local12345
#+BEGIN_SRC sql
SELECT 1;
#+END_SRC

#+RESULTS:
| 1 |
|---|
| 1 |

コードブロックにポイントがある状態で C-c C-c を実行すると #+RESULTS: のブロックが挿入されます。このファイルはOrgファイルなのでもちろんドキュメントを書くこともできますし、タスク管理を内部で行うこともできます。そのためSQLの説明を前後に記述して、ドキュメントと動作するコードを近い位置に配置することができます。

コードブロックの設定を共通化する

先ほどの例のようにSQLのコードブロックが複数あると #+HEADER: で設定している接続情報も複数箇所に記述することになってしまいます。ただ接続情報はコードブロックで共通であることが多いと思うので、その設定も共通化したいです。

Orgでは #+PROPERTY: 構文を使ってこの設定を共通化できます。

#+PROPERTY: header-args:sql :engine mysql :dbhost 127.0.0.1 :dbuser person_local :dbpassword local12345 :database person_local

1行ではなく複数行でこの設定を行いたい場合は次のように2行目以降に header-args+ を使うこともできます。

#+PROPERTY: header-args:sql
#+PROPERTY: header-args+:sql :engine mysql
#+PROPERTY: header-args+:sql :dbhost 127.0.0.1
#+PROPERTY: header-args+:sql :dbuser person_local
#+PROPERTY: header-args+:sql :dbpassword local12345
#+PROPERTY: header-args+:sql :database person_local

設定を追加したら C-c C-c (org-ctrl-c-ctrl-c) を実行して設定を読み込む必要があります。

#+BEGIN_SRC sql
SELECT 1;
#+END_SRC

#+RESULTS:
| 1 |
|---|
| 1 |