Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

สร้างเครื่องมือ CLI ใน Ruby ที่ทรงพลัง: คู่มือขั้นตอน

หลายคนลืมว่า Ruby ทำได้ไม่ใช่แค่เว็บแอปพลิเคชัน ในบทความนี้ ผมอยากแสดงวิธีสร้างแอปพลิเคชัน command-line เพื่อแก้ปัญหานั้น!

นี่คือแอปพลิเคชัน command-line บางอย่างที่คุณอาจคุ้นเคย:

  • psql
  • rails
  • bundler
  • gem
  • git

มีหลายวิธีในการสร้างแอปพลิเคชัน 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 ของทุกแฟล็กโดยไม่ต้องทำงานเพิ่ม
  • ทุกตัวเลือกมีคำอธิบาย ซึ่งจะเป็นส่วนหนึ่งของเมนูช่วยเหลือ
  • เมนูช่วยเหลือถูกสร้างอัตโนมัติ ดังนั้นคุณไม่ต้องอัปเดตด้วยมือทุกครั้งที่เพิ่มหรือลบตัวเลือก

เมนูเป็นแบบนี้:

สร้างเครื่องมือ CLI ใน Ruby ที่ทรงพลัง: คู่มือขั้นตอน

ส่วนที่ดีที่สุด?

ทั้งหมดนี้ built-in ใน Ruby แล้ว ไม่ต้องติดตั้งอะไร!

วิธีใช้ Gem Thor

หากคุณมองหาวิธีแตกต่างในการ parse ตัวเลือก ควรดู gem Thor นี่คือสิ่งที่ Rails ใช้

ใน Rails คุณทำอย่างเช่น:

  • rails new
  • rails generate
  • rails 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)

เมนูช่วยเหลือเป็นแบบนี้:

สร้างเครื่องมือ CLI ใน Ruby ที่ทรงพลัง: คู่มือขั้นตอน

นี่เป็นสไตล์ที่ต่างจาก 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 ก็สามารถทรงพลังและสนุกในการสร้างได้

ลองทำดู และเริ่มสร้างของตัวเองวันนี้ 🙂