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

วิธีสร้างแอปพลิเคชันบรรทัดคำสั่ง (CLI) ด้วย Ruby

หลายคนลืมไปว่า Ruby สามารถทำสิ่งต่างๆ ที่ไม่ใช่เว็บแอปพลิเคชันได้ ในบทความนี้ ฉันต้องการแสดงวิธีสร้างแอปพลิเคชันบรรทัดคำสั่งเพื่อช่วยแก้ไขปัญหานั้น!

ต่อไปนี้คือแอปพลิเคชันบรรทัดคำสั่งที่คุณอาจคุ้นเคย:

  • psql
  • rails
  • bundler
  • gem
  • git

มีหลายวิธีในการสร้างแอปพลิเคชันบรรทัดคำสั่ง และในบทความนี้เราจะพูดถึงสามวิธี

คุณจะได้เรียนรู้เกี่ยวกับ :

  • อาร์เรย์ ARGV
  • ห้องสมุด OptParse
  • อัญมณีแห่งธอร์

เริ่มกันเลย!

ค่าคงที่ทับทิม ARGV

แอปพลิเคชันบรรทัดคำสั่งมักมีหลายตัวเลือกหรือ 'แฟล็ก'

ตัวอย่างเช่น :

psql --help

คุณจะเข้าถึงตัวเลือกเหล่านี้ใน Ruby ได้อย่างไร

การใช้ ARGV อาร์เรย์

หากคุณมีรหัสต่อไปนี้ในไฟล์ชื่อ argv.rb :

p ARGV

และถ้าคุณรันโค้ดนี้โดยใช้ ruby argv.rb test abc 1 2 3 คุณจะได้รับสิ่งนี้:

["test", "abc", "1", "2", "3"]

เป็นอาร์เรย์ที่มีตัวเลือกทั้งหมด!

คุณสามารถตรวจสอบว่าตัวเลือกใดถูกส่งผ่านหรือไม่โดยใช้ตัวแยกวิเคราะห์ตัวเลือก

นี่คือตัวอย่าง :

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}

วิธีนี้ใช้ได้กับเรื่องง่ายๆ แต่ถ้าคุณต้องการเขียนแอปพลิเคชันที่ใหญ่ขึ้น คุณอาจต้องพิจารณาวิธีแก้ปัญหาอื่นๆ

วิธีใช้ไลบรารีตัวแยกวิเคราะห์ตัวเลือก

Ruby มาพร้อมกับ OptionParser คลาสที่คุณสามารถใช้เพื่อแยกวิเคราะห์ตัวเลือกบรรทัดคำสั่ง

นี่คือตัวอย่าง :

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 มากกว่าโซลูชันที่คุณกำหนดเอง

ตัวอย่างเช่น :

  • คุณสามารถมี -v สั้น ๆ ได้ &รุ่นยาว --verbose ของทุกธงโดยไม่ต้องทำงานพิเศษ
  • ทุกตัวเลือกมีคำอธิบาย ซึ่งจะเป็นส่วนหนึ่งของเมนูช่วยเหลือ
  • เมนูความช่วยเหลือถูกสร้างขึ้นโดยอัตโนมัติสำหรับคุณ คุณจึงไม่ต้องอัปเดตด้วยตนเองทุกครั้งที่เพิ่มหรือลบตัวเลือก

หน้าตาเมนูเป็นแบบนี้ :

วิธีสร้างแอปพลิเคชันบรรทัดคำสั่ง (CLI) ด้วย Ruby

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

ทั้งหมดนี้สร้างขึ้นใน Ruby ดังนั้นจึงไม่มีอะไรต้องติดตั้ง!

วิธีใช้อัญมณีของธอร์

หากคุณกำลังมองหาแนวทางที่แตกต่างในการแยกวิเคราะห์ตัวเลือกคุณควรดูที่อัญมณี 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 เป็นตัวเลือกที่ยอดเยี่ยม!

ห้องสมุดการอ่านทับทิม

คุณต้องการสร้างแอปพลิเคชันด้วยอินเทอร์เฟซแบบโต้ตอบเช่น pry หรือ psql ?

ตรวจสอบ Readline โมดูลซึ่งช่วยให้คุณทำสิ่งนี้ได้

นี่คือตัวอย่าง :

prompt = "> "

while buf = Readline.readline(prompt, true)
  puts "Your input was: '#{buf}'"
end

การดำเนินการนี้จะแจ้งให้คุณทราบ และสะท้อนกลับสิ่งที่คุณเขียนหลังจากกด Enter

คุณสามารถปิดโปรแกรมได้โดยกด CTRL+C .

Readline จะเก็บประวัติของทุกสิ่งที่คุณพิมพ์ และจะช่วยให้คุณค้นหาประวัติของคุณโดยใช้ ctrl+r , หรือ Readline::HISTORY.to_a ภายในโค้ดของคุณ

ด้วย Readline คุณยังสามารถใช้งานสิ่งต่างๆ เช่น การเติมข้อความอัตโนมัติ ดูตัวอย่างในลิงก์นี้

ชมวิดีโอการสอน

บทสรุป

แม้ว่าคุณจะเป็นคนประเภท GUI แต่แอปพลิเคชันบรรทัดคำสั่งก็มีประสิทธิภาพและสร้างความสนุกสนานได้มาก

ให้มันลอง &เริ่มสร้างของคุณเองวันนี้ 🙂