Ledger는 플레인 텍스트 기반의 강력한 명령줄 복식부기 회계 도구입니다. 사람이 읽을 수 있는 텍스트 저널 파일을 통해 잔액 계산, 거래 내역 조회, 예산 추적, 상세 재무 보고서 작성을 손쉽게 수행할 수 있습니다.
핵심 개념 및 시작하기
복식부기 기본 항등식
Ledger에서 모든 거래는 합계가 엄격히 0이 되는 두 개 이상의 분개로 구성됩니다:
$$\text{Assets} + \text{Expenses} = \text{Liabilities} + \text{Equity} + \text{Income}$$
Assets:Checking -$600.00 ; Asset decreases (credit)
Expenses:Rent $600.00 ; Expense increases (debit)
---------------------------------
순 잔액 = $0.00
핵심 명령어 개요
| 명령어 | 전체 형태 | 설명 |
|---|---|---|
ledger bal |
ledger balance |
모든 계정의 현재 잔액을 계산하고 표시 |
ledger reg |
ledger register |
거래 내역과 누적 잔액을 시간 순서대로 나열 |
ledger print |
ledger print |
저널 원본 항목을 서식에 맞게 출력 |
ledger csv |
ledger csv |
필터링된 거래를 표준 CSV 형식으로 내보내기 |
ledger payees |
ledger payees |
저널에 기록된 모든 고유 거래처 나열 |
ledger accounts |
ledger accounts |
정의된 모든 계정 이름과 계층 구조 나열 |
저널(Journal) 문법 규격
기본 거래 구조
2024/01/03 * (CODE#001) Landlord John ; tag:rent
Expenses:Rent:Apartment $600.00
Assets:Checking:MainBank
- 헤더 라인 세부 분석::
2024/01/03 * (CODE#001) Landlord John ; tag:rent
^ ^ ^ ^ ^
Date State Code/Check# Payee/Description Comment & Tags
- 자동 계산: Ledger는 대차대조가 맞도록 한 분개의 금액을 자동으로 유추할 수 있습니다.
거래 상태 플래그
| 플래그 | 상태 | 설명 및 일반적인 용도 |
|---|---|---|
| (None) | 미정산 | 은행 명세서와 아직 대조되지 않은 새로운 거래 |
! |
대기 중 | 승인 대기 중인 거래 (신용카드 결제 대기 등) |
* |
정산 완료 | 은행 계좌와 대조가 완료된 확정 거래 |
보조 날짜 (Auxiliary Dates)
등호를 사용하여 거래 발생일과 실제 결제일을 분리할 수 있습니다:
; Format: EventDate=SettlementDate
2024/01/01=2024/01/15 Consulting Client A
Assets:AccountsReceivable $1,000.00
Income:Consulting
잔액 단언 및 할당
- 잔액 단언 (= $VALUE): 분개 후 누적 잔액이 지정된 값과 일치하는지 검증합니다.
- 잔액 할당 (= $VALUE): 계정 잔액이 지정된 값이 되도록 차액을 계산합니다.
; 1. Balance Assertion
2024/01/01 * Restaurant
Expenses:Food:Dinner $20.00
Assets:Cash -$20.00 = $500.00
; 2. Balance Assignment
2024/01/01 * Opening Balance
Assets:Cash = $500.00
Equity:OpeningBalances
Account Declarations & Validation
account Expenses:Food
note Dining and grocery expenses
alias food
payee ^(KFC|McDonalds|Starbucks)$
check commodity == "$"
assert commodity == "$"
default
account Assets:Cash
alias cash
Commodities & Currencies
; 1. Per-unit cost (@ symbol)
2024/05/31 * Farmers Market
Expenses:Food:Apples 10 APPLE @ $1.50
Assets:Checking -$15.00
; 2. Total cost (@@ symbol)
2024/06/01 * Brokerage
Assets:Investments:AAPL 5 AAPL @@ $950.00
Assets:Checking -$950.00
; 3. Explicit currency price history
P 2024/06/01 00:00:00 EUR $1.0850
Directives
; Global default currency
D $1,000.00
; Set default year
Y2024
Including Sub-Journals
include accounts.journal
include 2023.journal
include 2024.journal
account Business
include company_expenses.journal
end
Budgeting
~ Monthly
Expenses:Rent $600.00
Expenses:Food $400.00
Expenses:Utilities $100.00
Expenses $100.00
Assets
~ Yearly
Expenses:Insurance $1,200.00
Assets
ledger bal --budget Expensesledger bal --unbudgeted Expenses
기간 표현식
Ledger는 -p 또는 --period 옵션을 통해 자연어 시간 필터링을 지원합니다.
Syntax Structure
[INTERVAL] [BEGIN] [END]
주기 간격
| 간격 | 의미 |
|---|---|
every day / daily |
Daily |
every week / weekly |
Weekly |
biweekly |
Every two weeks |
every month / monthly |
Monthly |
every quarter / quarterly |
Quarterly |
every year / yearly |
Yearly |
every N days/weeks/months |
Custom interval |
Period Filtering Examples
ledger reg -p "since last month"
ledger reg Expenses -p "every month from 2024 to 2024/12/31" -M
ledger bal -p "from 2024/01/01 until this month"
ledger bal Expenses:Food -p "last quarter"
쿼리 표현식 및 필터링
| Syntax | 대상 | 예시 | 설명 |
|---|---|---|---|
Account |
Account name | ledger bal Assets |
Substring/regex match |
^Account |
Root account | ledger bal ^Expenses |
Accounts starting with Expenses |
@Payee |
Payee name | ledger reg @Starbucks |
Match payee field |
%Tag |
Tag presence | ledger reg %reimburse |
Match tagged transactions |
%Tag=Value |
Tag value | ledger reg %project=alpha |
Match tag key-value pairs |
=Note |
Memo note | ledger reg =taxi |
Match memo text |
#Code |
Transaction code | ledger reg #1042 |
Match check or order number |
부울 논리 연산
ledger reg Expenses:Food and @Starbucks and not dining
ledger bal Rent or Transportation
ledger bal Expenses and not \( Drinks or Food \)
주요 필터 옵션
| 플래그 | 옵션 | 설명 |
|---|---|---|
-b DATE |
--begin DATE |
Filter transactions on or after date |
-e DATE |
--end DATE |
Filter transactions before date |
-C |
--cleared |
Only cleared transactions (*) |
-U |
--uncleared |
Only uncleared transactions |
--pending |
--pending |
Only pending transactions (!) |
-R |
--real |
Exclude virtual postings |
-r |
--related |
Show the offsetting balancing postings |
보고서 및 데이터 내보내기
-s, --subtotal # Calculate subtotals for grouped postings
-n, --collapse # Collapse multi-line postings into one line
--flat # Render account tree as a flat list
--tail N # Limit output to last N lines
--invert # Invert numerical signs (display expenses as positive)
-X CUR, --exchange CUR # Convert foreign holdings to specified currency at latest rate
# Export all entries to CSV
ledger csv > report.csv
# Export this month's dining expenses
ledger csv Expenses:Food -p "this month"
실전 활용 예시
# Current assets vs liabilities
ledger bal ^Assets ^Liabilities
# Net revenue this month with positive expenses
ledger bal ^Expenses ^Income -p "this month" --invert
# Top 10 largest expenses
ledger reg Expenses -S amount --tail 10
# Monthly average daily expenses
ledger reg Expenses -M -n --average