Ledger Mode เป็นแพ็กเกจใน Emacs สำหรับโปรแกรมบัญชี Command Line ชื่อ Ledger ให้ผู้ใช้ Emacs ใช้ฟีเจอร์ของ Ledger ได้จาก Text Editor ที่ชอบ
ทำไมต้องใช้ Ledger Mode ใน Emacs
Ledger Mode เรียบง่าย เข้าใจง่าย คิดยอดอัตโนมัติ แจ้งเตือนผิดพลาด จัดหมวดหมู่รายจ่าย/รายได้ เรียงและวิเคราะห์ได้จากในแพ็กเกจเลย
Emacs ทำงานแบบ Interoperability: ข้อมูลใน Emacs นำไปใช้แพ็กเกจอื่นได้ Ledger Mode ให้สร้างและรวมข้อมูล Ledger กับเครื่องมืออื่นใน Emacs เช่น สร้าง Org Mode Documents ลิงก์ Email ที่เก็บไว้และไฟล์ Ledger คัดลอก Entry ระหว่าง Email และ Ledger ได้ง่าย เพราะ Ledger Mode ใช้ Plain Text
โปรแกรม Ledger (Backend)
Ledger Mode แค่ Front-end ต้องรู้จัก Ledger CLI ก่อน
Ledger ทำงานอย่างไร
Ledger อ่าน Plain Text Ledger สร้างรายงานบัญชี ไม่สร้าง/แก้ไข Database ไฟล์ → Lean และ Flexible
รูปแบบ Entry ที่ Ledger คาดหวัง:
2022/02/16 Expenses Expenses:Food:Lunch 140 PHP Expenses:Food:Snack 50 PHP Assets:Fiat:Cash -190 PHP
Ledger ต้องการ 3 สิ่ง:
- Title Line: วันที่และชื่อ Entry (เช่น Expenses วันที่ 16 Feb)
- กลุ่ม Accounts: แสดงเงินมาจากไหน ไปไหน (Cash → Expenses)
- จำนวนเงิน: ย้าย Cash 2 ครั้ง (Lunch, Snack) แต่หักจาก Assets ทีเดียวท้ายวัน
สมมติฐาน 3 ข้อนี้ ทำให้ Ledger ปรับตัวได้ทุกสถานการณ์ รองรับทั้งสกุลเงินและ Commodities (หุ้น สินค้า) ใช้ได้ทั้งติดตามค่าใช้จ่ายและลงทุน
Account Categories ใน Ledger
หมวดหมู่ Arbitrary (กำหนดเองได้) แต่มาตรฐานแบ่ง 5 หมวด:
- Assets — สินทรัพย์/เงิน/หุ้น/สินค้าที่ครอง
- Expenses — ค่าใช้จ่ายที่จ่ายจาก Assets
- Income — แหล่งรายได้ (เงินเดือน ฯล฿)
- Liabilities — หนี้/ภาระผูกพัน
- Equity — บัญชีพิเศษคำนวณ Net Worth (ใช้ทำ Opening Balance)
เพิ่มรายละเอียดด้วย Colon (:) เช่น Expenses:Food:Lunch เป็น 3 ระดับ
ติดตั้ง Ledger
- Debian/Ubuntu:
sudo apt install ledger - Fedora:
sudo dnf install ledger - Arch:
sudo pacman -S ledger
ใช้ Ledger Mode ใน Emacs
ติดตั้งแพ็กเกจ ledger-mode จาก ELPA Repository (Built-in)
- Alt+X →
package-install→ พิมพ์ledger-mode - Emacs ดาวน์โหลด คอมไพล์ เสร็จ ใช้ได้แล้ว
สร้าง Ledger ไฟล์แรก
Ledger Mode เปิดอัตโนมัติเมื่อเปิดไฟล์副檔名 .ledger
- Ctrl+X, Ctrl+F → พิมพ์
example.ledger - Emacs สร้างและเปิดไฟล์ เริ่มเพิ่ม Transaction ได้เลย
สร้าง Opening Balance
ต้องให้ Ledger รู้ยอดคงเหลือปัจจุบัน โดยหัก Assets/Liabilities ไปยัง Equity
2022/02/10 * Opening Balance Assets:Bitcoin:Savings 0.045 BTC Assets:Bitcoin:Checking 0.00050712 BTC Assets:Fiat:Checking 15,000.00 PHP Assets:Fiat:Savings 255,944.00 PHP Liabilities:Fiat:Car Loan -450,000.00 PHP Liabilities:Fiat:Credit Payable -5,000.00 PHP Liabilities:Fiat:Home Loan -755,831.34 PHP Equity:Opening Balance
โครงสร้างเหมือนเดิม แต่มี * หน้าชื่อ Entry บอก Ledger ว่า Transaction "Clear" แล้ว (พร้อมคิดยอด)
ตรวจสอบยอดคงเหลือ (Balance)
- Ctrl+C, Ctrl+O, Ctrl+R → Prompt ให้พิมพ์คำสั่ง Ledger
- พิมพ์
balแสดง Running Balance - จะได้ Hierarchy ทุก Account รวมกันต้องได้ 0 ที่บรรทัดสุดท้าย
เพิ่ม Transaction ใหม่
- Ctrl+C, Ctrl+A → สร้าง Transaction ใหม่
- ถาม Date (กด Enter ใช้วันนี้)
- ถามชื่อ Transaction เก่าที่จะ Copy (Enter สร้างใหม่)
- เพิ่มรายการ เช่น:
2022/02/11 My First Transaction
Expenses:Food:Snack 250.00 PHP
Assets:PHP:Checking -250.00 PHP
สร้างรายงานพื้นฐาน
- Ctrl+C, Ctrl+O, Ctrl+R → พิมพ์คำสั่งต่างๆ:
bal— Balanceaccount Assets— Statement ของ Assetspayee snack— แสดง Transaction ที่มีคำว่า snackreg— Register Report (รายละเอียดทุก Transaction)
คำถามที่พบบ่อย (FAQ)
1. Ledger แจ้ง Error "Not Balanced" ทำไม?
สาเหตุหลัก: ลืมปิด Transaction (ไม่มีค่าลบ) ทุก Transaction ต้องมีค่าบวก (เพิ่ม) และค่าลบ (หัก) คู่กัน
2. Ledger ใช้ได้แค่สินทรัพย์จริงไหม?
ไม่! Account ทั้งหมด Arbitrary ใช้ติดตาม Virtual Assets ได้ เช่น เกม EVE Online:
2022/01/04 Venture Profits Main:Assets:Liquid:ISK 150,000,000.00 ISK Alt 1:Income:Ore Mining -10,000,000.00 ISK Alt 1:Income:Station Trading -40,000,000.00 ISK Alt 2:Income:Data Running -100,000,000.00 ISK
3. กลับลำดับ Transaction ให้เหมือน Bank Statement ได้ไหม?
ใน Report ได้: ใน Buffer Report กด Shift+R จะกลับลำดับ แต่ในไฟล์ Ledger เองไม่ได้