org-modeはEmacsに同梱される文書作成・タスク管理モードで、拡張子 .org のプレーンテキスト1枚に見出し・TODO・表・実行できるコードをまとめて書けます。ただし既定値のまま使うと、アジェンダは空のまま、Emacs Lisp以外のコードは動かず、Markdown書き出しもメニューに出ません。この記事では、2026年8月24日公開の Emacs 31.1 に同梱された Org 9.8.7 を実際に起動して確かめた既定値と動作をもとに、.orgファイルの書き方から設定の要所までを整理します。
まとめ:org-modeで最初に押さえる6点
- .orgはプレーンテキストのファイル。見出しは行頭のアスタリスクの数が階層で、TABで折り畳む。
- TODOは既定でTODOとDONEの2状態だけ。
C-c C-tで切り替え、増やすときは#+TODO:行を書く。 - アジェンダには対象ファイルの指定が必要。captureはテンプレート未設定でも標準テンプレートで使える。
org-agenda-filesとorg-capture-templatesの既定値がどちらもnilで、C-c aも未割り当て。 - コードブロックの実行は既定でEmacs Lispのみ。Pythonは有効化しないと「No org-babel-execute function for python!」で止まる。
- Markdown書き出しは
(require 'ox-md)が必要で、表はHTMLの<table>として出る。GitHub向けの表が欲しいならPandocを使う。 - 同梱のOrgをELPA版(2026年8月31日公開の9.8.10)へ上げるコマンドは
package-installではなくpackage-upgrade。
以下、.orgファイルの実例と、Emacs 31.1で確かめた挙動つきで順に見ていきます。
.orgファイルの中身と開き方
.org は独自バイナリではなく、ただのテキストです。見出しもTODOも表も行頭の記号だけで表現されるため、Emacsが無い環境でもメモ帳やVS Codeでそのまま読めます。Emacsで拡張子 .org のファイルを開くと、追加インストールなしで org-mode が有効になります。
#+TITLE: 開発メモ
#+STARTUP: overview
* プロジェクトA
** TODO 設計レビューの日程調整 :work:
SCHEDULED: <2026-10-20 Tue>
:PROPERTIES:
:Owner: 佐藤
:END:
** DONE 見積もり提出
先頭の #+TITLE: や #+STARTUP: はファイル単位の設定行、* の行が見出し、:work: がタグ、:PROPERTIES: から :END: までがプロパティの引き出しです。どれも人が読めるテキストなので、Gitの差分でも変更箇所がそのまま追えます。
拡張子.orgの別用途との見分け方
拡張子 .org は org-mode 専用ではありません。たとえばゲーム「洞窟物語(Cave Story)」の音楽形式 Organya のファイルも .org で、再生ソフト OrgPlay はこの形式のファイルを引数に取ります。受け取った .org をテキストエディタで開いて、* で始まる見出しや #+ の設定行が読めれば org-mode の文書、文字化けした記号の羅列なら、文字コードの不一致やバイナリの別形式を疑い、作成元のソフトと文字コードを確認します。
Emacs同梱のOrgとELPA版の更新手順
Emacsの版ごとに同梱されているOrg
使用中の版は M-x org-version で分かります。Emacsのタグ付きソース(lisp/org/org-version.el)で確かめた同梱版は次のとおりです。
| Emacs | 同梱のOrg | 主な配布先 |
|---|---|---|
| 29.3 | 9.6.15 | Ubuntu 24.04 |
| 30.2 | 9.7.11 | Ubuntu 26.04 |
| 31.1 | 9.8.7 | 2026年8月24日公開 |
| (ELPA) | 9.8.10 | 2026年8月31日公開 |
差が出やすいのは9.7系と9.8系の間です。画像やリンクのプレビューは9.8で C-c C-x C-v の割り当てが org-link-preview に移り(旧 org-toggle-inline-images は非推奨として残存)、C#のコードブロックは .NET SDK を使う ob-csharp が本体に入りました(Org の変更履歴)。Ubuntu 24.04 の標準パッケージのまま9.8向けの解説を読むと、コマンドが見つからない場面が出ます。また9.8はEmacs 26と27の対応を打ち切っています。
package-installでは更新されない理由とpackage-upgrade
同梱のOrgを新しくするとき、よく紹介される M-x package-install RET org は、Emacs 31.1では何もしません。Emacs 31.1 を -Q で起動し、GNU ELPA を読み込んだ状態で (package-install 'org) を実行したところ、同梱版が「インストール済み」と判定されてELPA側には何も入らず、版は9.8.7のままでした。同梱パッケージを上書きするかを決める package-install-upgrade-built-in の既定値が nil だからです。
同じ状態で (package-upgrade 'org) を実行すると org-9.8.10 がELPAのディレクトリに入り、再起動後の org-version は 9.8.10 になりました。手で行うなら次の順です。
;; 1. .orgファイルを1つも開いていない状態で Emacs を起動する
;; 2. M-x package-refresh-contents
;; 3. M-x package-upgrade RET org
;; 4. Emacs を再起動して M-x org-version で確認する
手順1は公式マニュアルの注意書きによるものです。.orgファイルを開いた後のセッションで更新すると、読み込み済みの同梱版の関数とELPA版が混ざり、インストールが壊れることがあります。Orgの安定版は直近3つのEmacs安定版との完全な互換を前提に作られているので、9.8.10はEmacs 29・30・31が対象です。逆に、新機能を追わないなら同梱版のまま使い、読む解説を自分の版に合わせるほうが手間はかかりません。
アウトラインの階層とTABでの折り畳み
org-modeの土台はアウトラインプロセッサです。見出しは行頭のアスタリスクとスペースで作り、アスタリスクの数がそのまま階層の深さになります。見出しの上で TAB(org-cycle)を押すと、その見出しだけが「折り畳み→子見出しのみ表示→全展開」と循環。文書全体を同じ順序で切り替えるのが S-TAB(org-shifttab)です。
戸惑いやすいのが初期表示です。org-startup-folded の既定値は showeverything なので、ファイルを開いた直後は全展開になります。長い文書を目次のような状態で開きたいなら、ファイル先頭に #+STARTUP: overview を1行(content、show2levels なども指定可)。設定変数を触らずファイル単位で制御できるため、共有リポジトリの文書ではこちらが扱いやすい方法です。
箇条書きとチェックボックスによる小タスクの管理
見出しにするまでもない項目は、ハイフンで始める箇条書きにします。項目の行末で M-RET(org-meta-return)を押せば同じ深さの項目が追加され、番号付きリストなら番号が振り直されます。項目に [ ] を書くとチェックボックスになり、その上で C-c C-c を押すと [X] と交互に切り替わります。
** TODO リリース準備 [1/3]
- [X] 変更履歴の更新
- [ ] タグの付与
- [ ] リリースノートの下書き
見出しに書いた [1/3] は進捗クッキーで、子項目のチェック状態に応じて自動更新されます。割合で見たいときは [%] を書きます。TODOキーワードを付けるほどでもない細かい作業を、1つの見出しの下にまとめて潰していく用途に向いています。
リンクの挿入と文書間のジャンプ
リンクは [[リンク先][表示テキスト]] の形式で、URLだけでなくファイルパスや他の見出しも指定できます。C-c C-l(org-insert-link)で補完付きの入力ができ、リンク上で C-c C-o(org-open-at-point)を押すと、URLならブラウザ、ファイルならEmacsのバッファで開きます。
- [[https://orgmode.org/org.html][Org Manual]]
- [[file:~/org/spec.org::*API設計][API設計の節]]
- [[*リリース準備][同じファイル内の見出しへ]]
後述の初期設定で C-c l に割り当てる org-store-link は、いま開いている位置を控えるコマンドです。参照元で C-c l、メモ側で C-c C-l と押せばリンクが貼られます。複数の .org ファイルを相互参照するときは、この2つの操作で参照位置の記録とリンクの挿入を行えます。
TODOキーワード・タグ・プロパティによるタスク管理
状態を増やすTODOキーワードの定義
見出しの上で C-c C-t(org-todo)を押すと状態が切り替わります。org-todo-keywords の既定値は ((sequence "TODO" "DONE")) なので、素の状態では2値しかありません。未完了のTODOとWAIT、完了扱いのDONEとCANCELEDを使い分けたいときは、ファイル先頭に次の行を書きます。
#+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)
縦棒の左が未完了、右が完了扱いの状態です。括弧内の1文字目は素早く選ぶためのキー。! はタイムスタンプ、@ はメモ(タイムスタンプ付き)の記録指定で、スラッシュの前がその状態に入るとき、後が出るときを表します。w@/! なら、WAIT に入るときメモを求め、抜けるときタイムスタンプを残します。書き換えた #+TODO: 行の上で C-c C-c を押すと設定が読み直されます。C-c C-c はカーソル位置で働きが変わるコマンドで、設定行では再読み込み、チェックボックス上では切り替え、表の中では再計算として動きます。
タグとプロパティによる分類
タグは見出しの行末に :work:urgent: のようにコロンで挟んで並べます。C-c C-q(org-set-tags-command)を使えば既存タグを補完で選べます。担当者や見積工数のように「キーと値」で持たせたい情報はタグではなく、C-c C-x p(org-set-property)でプロパティにします。プロパティは見出し直下の :PROPERTIES: 引き出しに入り、アジェンダの絞り込み条件にも使えます。
予定日とアジェンダ表示の前提設定
予定日は C-c C-s(org-schedule)、締切は C-c C-d(org-deadline)で入れます。これらを横断表示するのがアジェンダです。初期状態でも M-x org-agenda で選択メニューを開けますが、予定を表示するには対象ファイルの指定が必要です。Emacs 31.1で確かめると、org-agenda-files の既定値は nil(対象ファイルなし)で、C-c a にはグローバルに何も割り当てられていませんでした。公式マニュアルは初期設定ファイルに次の3行を書くよう勧めています。
(global-set-key (kbd "C-c l") #'org-store-link)
(global-set-key (kbd "C-c a") #'org-agenda)
(global-set-key (kbd "C-c c") #'org-capture)
(setq org-agenda-files '("~/org/"))
最後の行でアジェンダの対象ディレクトリを指定して、初めて C-c a のアジェンダに予定が並びます。アジェンダに何も出ないときは、まず対象ファイルの指定とキー割り当てを確認し、次に選んだ表示形式(日別・週別か、TODO一覧か)と、見出しに予定日・締切が入っているかを確認します。なお Emacs 31.1 は lexical-binding の宣言コメントが1行目に無い初期設定ファイルを読み込むと警告を出すので、init.el を新しく作るなら先頭行に ;;; -*- lexical-binding: t -*- を書いておきます。
org-captureの保存先とテンプレート設定
C-c c(org-capture)は、作業中のバッファを離れずにTODOやメモを決まったファイルへ放り込むコマンドです。org-capture-templates の既定値は nil で、テンプレートが無いうちは org-default-notes-file の既定値 ~/.notes に書き込まれます。受け皿を ~/org/ にそろえるなら、テンプレートを1つ書いておきます。
(setq org-capture-templates
'(("t" "Todo" entry (file+headline "~/org/inbox.org" "Tasks")
"* TODO %?\n %U")))
保存先ディレクトリを用意し、C-c c t で入力を開始して C-c C-c で確定します。Emacs 31.1でこのテンプレートを使って「見積もりの再確認」をキャプチャすると、存在しなかった ~/org/inbox.org が作られ、* Tasks 見出しの下に次の項目が入りました。%? は入力開始位置、%U は作成日時です。
* Tasks
** TODO 見積もりの再確認
[2026-10-19 Mon 04:14]
アジェンダの対象を ~/org/ にしておけば、キャプチャしたTODOは C-c a t のTODO一覧に表示できます。例の %U は非アクティブな日時なので、日別・週別アジェンダに通常表示するには予定日や締切などを別途設定します。思いついた時点で inbox に入れ、あとで C-c C-w(org-refile)で正しい見出しへ移す、という流れがorg-modeでのタスク管理の基本形です。
作業時間の記録と集計表(clocktable)
見出しの上で C-c C-x C-i(org-clock-in)を押すと計測が始まり、C-c C-x C-o(org-clock-out)で止まります。記録は見出し直下の :LOGBOOK: 引き出しに CLOCK: 行として残ります。集計表は C-c C-x x で clocktable を選んで挿入し、表の上で C-c C-c を押すと更新されます。2つの見出しに1時間30分と45分を記録したファイルで更新した結果が次の表です。
#+BEGIN: clocktable :scope file :maxlevel 2
| Headline | Time |
|--------------+--------|
| *Total time* | *2:15* |
|--------------+--------|
| 記事の下書き | 1:30 |
| レビュー | 0:45 |
#+END:
注意したいのは、Emacsを終了すると計測中の時計が失われる点です。org-clock-persist の既定値は nil なので、計測を翌日にまたがせる使い方をするなら (setq org-clock-persist t) と (org-clock-persistence-insinuate) を初期設定ファイルに書きます。
表の自動整形・計算とCSVの読み書き
表はパイプ区切りで1行書き、TAB を押すだけで罫線が整います。既存のテキスト範囲を選んで C-c |(org-table-create-or-convert-from-region)を押せば、区切り文字を判定して表に変換。計算は表の下に #+TBLFM: 行を1本置き、C-c * で再計算です。
| 項目 | 単価 | 数量 | 金額 |
|------------+------+------+------|
| ライセンス | 1200 | 5 | 6000 |
| 保守 | 3000 | 1 | 3000 |
#+TBLFM: $4=$2*$3
金額の列を空にした表で再計算すると、Emacs 31.1でも上のとおり6000と3000が埋まりました。列は $1 から始まる番号で参照し、@2$3 のように行と列を組み合わせた指定もできます。外部データとやり取りするときは M-x org-table-import でCSVやTSVを表として取り込み、M-x org-table-export で書き出します。
org-babelでのコードブロック実行と結果の埋め込み
コードブロックは #+begin_src と #+end_src で囲み、ブロック内で C-c C-c を押すと実行され、結果が #+RESULTS: として文書に書き戻されます。ブロック内で C-c '(org-edit-special)を押せば、その言語の専用バッファで補完やインデントが効きます。
#+begin_src python :results output
print("hello from org-babel")
#+end_src
#+RESULTS:
: hello from org-babel
上の例は、既定のままでは動きません。org-babel-load-languages の既定値が ((emacs-lisp . t)) で、Emacs 31.1で実行すると「No org-babel-execute function for python!」のエラーで止まりました。使う言語を初期設定ファイルで有効化し、EmacsからPython実行環境を起動できる状態にすると、上の #+RESULTS: が書き戻されます。
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(python . t)
(shell . t)))
もう1つの既定値 org-confirm-babel-evaluate は t で、実行のたびに確認を求めます。煩わしいからと nil にする設定例が広く出回っていますが、勧めません。.orgファイルは他人から受け取ることもあり、開いてエクスポートしただけで中のシェルコマンドが走る状態を作ることになるからです。無効化するなら、自分が書いたファイルだけを対象に判定する関数を org-confirm-babel-evaluate に渡す形にとどめます。
HTML・LaTeX・Markdownへのエクスポート
書き出しは C-c C-e(org-export-dispatch)でメニューを開き、形式と出力先を1文字ずつ選びます。HTMLファイルなら h のあと h、LaTeX経由のPDFなら l のあと p です。PDF出力にはOrg側の設定に加えてTeX処理系が別途必要で、導入はLaTeXとは?読み方(ラテフ・ラテック)とTeXとの違い・使い方を実例で解説で扱っています。
見落としやすいのが、Markdownがメニューに出ないことです。org-export-backends の既定値は (ascii html icalendar latex odt) で、Markdown用の ox-md は含まれていません。Emacs 31.1で確かめると、md の書き出し先は初期状態では未登録で、(require 'ox-md) を評価した後に登録されました。初期設定ファイルにこの1行を書くのが確実です。
Markdown書き出しで表がHTMLになる問題とPandoc
ox-md が出力するのはJohn Gruberの元祖Markdownで、表の記法を持ちません。公式マニュアルにも「Markdownの構文に無い要素は表を含めてHTMLに変換する」とあり、実際に書き出すと表は <table border="2" ...> のHTMLになり、コードブロックは言語名の無い字下げブロックになりました。GitHubのREADMEやドキュメントサイト向けに、パイプ記法の表と言語名つきのコードブロックが欲しいなら、ox-md では足りません。
その用途には Pandoc が向いています。Pandoc 3.9 で pandoc -f org -t gfm に同じファイルを通すと、表はパイプ記法、コードは ```python で囲まれた形で出ました。一方で、TODOキーワードとタグは <span class="todo TODO"> のようなHTMLの断片になり、clocktable などの動的ブロックは中身が空のdivになり、#+TBLFM: の計算も実行されません。Emacs側で計算や集計を済ませてから変換する、TODOの多い作業メモは変換せず .org のまま置く、の2点を守ると崩れにくくなります。Pandoc自体の使い方はPandocの使い方|Markdownからdocx・PDF変換の手順と日本語出力の詰まり方にまとめています。
Emacs以外で.orgファイルを読み書きする方法
.orgファイルはテキストなのでどのエディタでも開けますが、見出しの折り畳みやTODOの切り替えまで使えるかは環境ごとに大きく違います。
| 環境 | できること | 確認した版・仕組み |
|---|---|---|
| GitHub | 閲覧時のHTML表示 | org-ruby で変換 |
| Neovim | アジェンダ・時間記録 | nvim-orgmode 0.7.5 |
| VS Code | アウトライン・TODO | vscode-org-mode 拡張 |
| Android | 閲覧・編集・検索 | Orgzly Revived 1.23.1 |
| Logseq | DB版は非対応 | Markdownのみ |
GitHubはリポジトリ内の .org を github/markup 経由の org-ruby でHTMLにして表示します。設定を見ると、ほかのファイルを取り込む #+INCLUDE: は無効、コードの構文強調も無効で、org-ruby自体もOrgの全機能は実装していません。READMEを .org で書くなら、見出し・表・リンク程度に抑えるのが無難です。
Neovimでは nvim-orgmode がアジェンダ、タグとキーワードの検索、作業時間の記録、繰り返し予定まで持っており、Emacsを使わずに同じファイルを運用する現実的な選択肢です(Neovim本体の設定はNeovim 0.12系への移行手順:vim.packと内蔵LSP・自動補完の実装【0.12.6対応】)。VS Codeの拡張はアウトラインの操作とTODOの切り替えが中心で、アジェンダやorg-babelは期待しないほうがよい水準です。
注意したいのはLogseqです。かつては .org ファイルを直接扱えましたが、DB版の変更点に「Markdownだけが対応形式で、Org modeのファイルはもう対応しない」と明記されました。Logseqで .org を開き続けたいなら、保守のみとなったMarkdown版のLogseq OGを使うことになります(両者の違いはLogseqとは?料金・使い方・Obsidianとの違いとDB版・OG版の選び方【2026年10月】)。
主要キーバインド一覧(Org 9.8.10)
ここまでに出たキーを、9.8.10の org-keys.el の定義どおりに並べます。上3つは初期設定ファイルで割り当てるもので、それ以外は org-mode のバッファ内でだけ有効です。
| キー | コマンド | 働き |
|---|---|---|
| C-c l | org-store-link | リンク位置の記憶(要設定) |
| C-c a | org-agenda | アジェンダ(要設定) |
| C-c c | org-capture | メモの投入(要設定) |
| TAB | org-cycle | 見出しの折り畳み |
| S-TAB | org-shifttab | 文書全体の折り畳み |
| M-RET | org-meta-return | 見出し・項目の追加 |
| C-c C-t | org-todo | TODO状態の切替 |
| C-c C-q | org-set-tags-command | タグ入力 |
| C-c C-x p | org-set-property | プロパティ設定 |
| C-c C-s | org-schedule | 予定日の設定 |
| C-c C-d | org-deadline | 締切の設定 |
| C-c C-w | org-refile | 見出しの移動 |
| C-c C-x C-i | org-clock-in | 時間計測の開始 |
| C-c C-x C-o | org-clock-out | 時間計測の停止 |
| C-c C-x x | org-dynamic-block-insert-dblock | 集計表などの挿入 |
| C-c C-l | org-insert-link | リンク挿入 |
| C-c C-o | org-open-at-point | リンクを開く |
| C-c | | org-table-create-or-convert-from-region | 表への変換 |
| C-c * | org-ctrl-c-star | 表の再計算 |
| C-c ‘ | org-edit-special | コードの別バッファ編集 |
| C-c C-, | org-insert-structure-template | ブロックの雛形挿入 |
| C-c C-e | org-export-dispatch | エクスポート |
| C-c C-x C-v | org-link-preview | 画像等のプレビュー |
古い解説との差分:Org 9.2以降の削除・既定変更・非推奨化
古いorg-modeの解説を参照するときは、使用中の版と設定例の対応を確認します。特に次の機能・操作は、現在の実装と食い違っています。
| 古い解説の記述 | 現行(Org 9.8) | 変わった版 |
|---|---|---|
| orgstruct-mode | 削除済み(代替: orgalist.el) | 9.2 |
| orgstruct++-mode | 削除済み(代替: outshine) | 9.2 |
| ラジオリスト | 削除済み(ラジオ表は残存) | 9.2 |
| <s のあとTAB | 既定で無効(C-c C-, を使う) | 9.2 |
| org-toggle-inline-images | 非推奨(org-link-preview が後継) | 9.8 |
orgstruct-mode は、旧版の解説記事が章を割いて紹介している割に、Org の変更履歴の9.2節に「OrgStruct minor mode と radio lists の仕組みをコードベースから削除した」と明記されている機能です。Emacs 31.1で (fboundp 'orgstruct-mode) を評価しても nil が返ります。一方 <s は完全な削除ではなく、(require 'org-tempo) を評価すると <s が #+begin_src と #+end_src の組に展開されることを確かめました。org-toggle-inline-images も非推奨扱いで呼び出しはでき、変更履歴には C-c C-x C-v へ割り当て直す設定例まで載っています。手元の設定が動かないときは、まず参照した記事の公開年とOrg 9.2(2018年)の前後を確認するのが早道です。
よくある質問
.orgファイルとは何ですか?
org-modeで扱うプレーンテキストのファイルです。見出しはアスタリスク、タグはコロン、表はパイプというように、行頭の記号で構造を表すため、テキストエディタやGitの差分でもそのまま読めます。専用アプリが無くても内容を失わない点が、独自形式のノートアプリとの違いです。
orgデータ(拡張子.org)はどのソフトで開けますか?
中身が org-mode の文書なら、Emacsで開けば書式どおりに扱え、メモ帳やVS Codeでもテキストとして読めます。スマートフォンではAndroidのOrgzly Revivedが対応しています。テキストエディタで開いて記号の羅列にしか見えない場合は、ゲーム音楽のOrganyaなど別形式の .org の可能性があります。
org-modeを使うのに追加インストールは必要ですか?
不要です。Emacs本体に同梱されており、Emacs 31.1にはOrg 9.8.7が入っています。ELPA版の9.8.10に上げたい場合は、.orgファイルを開く前に M-x package-upgrade RET org を実行して再起動します。package-install では同梱版が入ったままになります。
コードブロックを実行しても結果が出ないのはなぜですか?
org-babel-load-languages の既定値がEmacs Lispしか有効にしていないためです。org-babel-do-load-languages で使う言語を有効化してください。実行前に確認を求められるのは org-confirm-babel-evaluate の既定値が t だからで、受け取った.orgファイルが勝手にコマンドを実行しないための安全弁です。
org-modeとObsidianのようなノートアプリはどちらを選ぶべきですか?
Emacsを日常のエディタとして使っていないなら、org-modeを選ぶ理由は薄いです。キー操作と初期設定ファイルの記述を覚えるコストが、ノート機能そのものより大きくなります。逆にEmacs上でコードを書き、コードブロックを実行して結果を文書に残したい、作業時間まで同じファイルで記録したいなら、編集・コード実行・時間記録をEmacs内でまとめられるorg-modeが適しています。判断軸は「スマホ対応が要るか」ではなく「編集環境をEmacs(またはNeovim)に寄せるか」です。