หลายคนลืมว่า Ruby ทำได้ไม่ใช่แค่เว็บแอปพลิเคชัน ในบทความนี้ ผมอยากแสดงวิธีสร้างแอปพลิเคชัน command-line เพื่อแก้ปัญหานั้น!
นี่คือแอปพลิเคชัน command-line บางอย่างที่คุณอาจคุ้นเคย:
psqlrailsbundlergemgit
มีหลายวิธีในการสร้างแอปพลิเคชัน command-line และในบทความนี้เราจะเน้นที่สามวิธี
คุณจะได้เรียนรู้เกี่ยวกับ:
- อาร์เรย์ ARGV
- ไลบรารี OptParse
- Gem Thor
มาเริ่มกัน!
ค่าคงที่ ARGV ใน Ruby
แอปพลิเคชัน command-line ปกติรับตัวเลือกหรือ 'flags' หลายตัว
ตัวอย่าง:
psql --help
คุณเข้าถึงตัวเลือกเหล่านี้ใน Ruby ได้อย่างไร?
ใช้ ARGV array
ถ้าคุณมีโค้ดต่อไปนี้ในไฟล์ชื่อ argv.rb:
p ARGV
และถ้าคุณรันโค้ดนี้ด้วย ruby argv.rb test abc 1 2 3 คุณจะได้:
["test", "abc", "1", "2", "3"]
มันคืออาร์เรย์พร้อมตัวเลือกทั้งหมด!
คุณสามารถตรวจสอบว่าตัวเลือกเฉพาะถูกส่งมาหรือไม่ โดยการ implement option parser
ตัวอย่าง:
def process_argv(option)
case option
when "-h"
puts "This is the help menu."
puts " -v Enable verbose mode"
puts " -c Enable syntax highlighting"
exit
when "-v"
@options[:verbose] = true
when "-c"
@options[:syntax_highlighting] = true
end
end
@options = {}
ARGV.each { |option| process_argv(option) }
p @options
ถ้าคุณรันแบบนี้:
ruby argv.rb -v -c
คุณจะเห็น:
{:verbose=>true, :syntax_highlighting=>true}
สิ่งนี้ทำงานสำหรับสิ่งง่ายๆ แตถ้าคุณอยากเขียนแอปพลิเคชันใหญ่ขึ้น คุณอาจพิจารณาวิธีแก้อื่น
วิธีใช้ไลบรารี Option Parser
Ruby มาพร้อมกับคลาส OptionParser ที่คุณสามารถใช้เพื่อ parse ตัวเลือกบรรทัดคำสั่ง
ตัวอย่าง:
require 'optparse'
@options = {}
OptionParser.new do |opts|
opts.on("-v", "--verbose", "Show extra information") do
@options[:verbose] = true
end
opts.on("-c", "--color", "Enable syntax highlighting") do
@options[:syntax_highlighting] = true
end
end.parse!
p @options
คุณได้ประโยชน์หลายอย่างเมื่อใช้ optparse แทนโซลูชันกำหนดเอง
ตัวอย่าง:
- คุณสามารถมี short
-vและ long version--verboseของทุกแฟล็กโดยไม่ต้องทำงานเพิ่ม - ทุกตัวเลือกมีคำอธิบาย ซึ่งจะเป็นส่วนหนึ่งของเมนูช่วยเหลือ
- เมนูช่วยเหลือถูกสร้างอัตโนมัติ ดังนั้นคุณไม่ต้องอัปเดตด้วยมือทุกครั้งที่เพิ่มหรือลบตัวเลือก
เมนูเป็นแบบนี้:

ส่วนที่ดีที่สุด?
ทั้งหมดนี้ built-in ใน Ruby แล้ว ไม่ต้องติดตั้งอะไร!
วิธีใช้ Gem Thor
หากคุณมองหาวิธีแตกต่างในการ parse ตัวเลือก ควรดู gem Thor นี่คือสิ่งที่ Rails ใช้
ใน Rails คุณทำอย่างเช่น:
rails newrails generaterails console
เพื่อสร้างคำสั่ง rails ให้คล้ายคลึง (บางส่วน) คุณสามารถทำอย่างนี้:
require 'thor'
class RailsCLI < Thor
class_option :verbose, :type => :boolean, :aliases => "-v"
desc "new DIRECTORY", "Create a new rails app"
def new
# ...
end
desc "generate THING PARAMETERS", "Generate controller / model / migration"
def generate
# ...
end
desc "console", "Start a rails console"
def console
# ...
end
end
RailsCLI.start(ARGV)
เมนูช่วยเหลือเป็นแบบนี้:

นี่เป็นสไตล์ที่ต่างจาก OptionParser มาก...
...และอาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับแอปของคุณ หากมันทำหนึ่งอย่างกับตัวเลือกไม่มากมาย
แต่ถ้าคุณมีคำสั่งอย่าง rails ซึ่งใช้สำหรับงานหลายอย่างที่ต่างกัน Thor เป็นตัวเลือกยอดเยี่ยม!
ไลบรารี Readline ของ Ruby
คุณอยากสร้างแอปพลิเคชันด้วยอินเทอร์เฟซแบบโต้ตอบ (interactive) เหมือน pry หรือ psql ไหม?
ดู Readline module ซึ่งช่วยให้คุณทำได้
ตัวอย่าง:
prompt = "> "
while buf = Readline.readline(prompt, true)
puts "Your input was: '#{buf}'"
end
สิ่งนี้จะให้ prompt และ echo กลับสิ่งที่คุณพิมพ์หลังกด enter
คุณสามารถจบโปรแกรมได้โดยกด CTRL+C
Readline จะเก็บประวัติทุกอย่างที่คุณพิมพ์ และอนุญาตให้คุณค้นหาประวัติด้วย ctrl+r หรือ Readline::HISTORY.to_a ภายในโค้ด
ด้วย Readline คุณยังสามารถ implement auto-completion ได้ ดูลิงก์นี้สำหรับตัวอย่าง
ดูวิดีโอสอน
สรุป
แม้คุณจะเป็นคน GUI แอปพลิเคชัน command-line ก็สามารถทรงพลังและสนุกในการสร้างได้
ลองทำดู และเริ่มสร้างของตัวเองวันนี้ 🙂