Ruby

Introduction

Ruby는 자연스럽게 읽히고 쓰기 쉬운 우아한 문법을 가지고 있는 언어입니다. 철학 자체가 인간 중심의 설계다 보니 뛰어난 가독성을 가졌고 언어 자체도 쉽게 사용할 수 있도록 고안되었습니다. 그리고 오픈소스이며 순수 객체 지향 프로그래밍 언어입니다. 그래서 정수, 문자열 등 모든 데이터 형식은 객체입니다.

  • VHLL (Very High-Level Lanauge)
  • Pure OOP (Object-Oriented Programming)
  • Multiple Platforms

But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. Matz

# Greeter 클래스
class Greeter
  def initialize(name)
    @name = name.capitalize
  end

  def salute
    puts "Hello #{@name}!"
  end
end

# 새 객체 생성
g = Greeter.new("world")

# "Hello World!" 출력
g.salute

📜 Style Guide

https://rubystyle.guide/

😎 Awesome Resources

🎛 RVM

Macos의 경우 기본적으로 Ruby가 시스템에 설치되어 있습니다. 그러나 다른OS나 특정 루비 버전 설치가 필요한 경우가 있는데, 이 때는 직접 시스템에 설치하는 것 보다 rvm이나 rbenv 같은 Version Manager를 사용하는 것이 좋습니다.

# Install RVM
curl -sSL https://get.rvm.io | bash -s stable

# Install/Use Ruby 3.0
rvm install 3.0.0
rvm use 3.0.0

# Set default ruby version
rvm use 3.3.0 --default

참고로 종종 RVM으로 Ruby 설치 과정 또는 Ruby 설치 이후 Gem 설치 중 OpenSSL 관련 에러가 발생할 수 있습니다. 이는 RVM을 통해 Ruby를 설치하는 과정에서 OpenSSL 경로가 잘못 지정되면 발생하는 이슈로 아래와 같이 --with-openssl-dir flag를 주어 해결할 수 있습니다.

rvm install 3.2.1 --with-openssl-dir=`brew --prefix openssl`

💎 Gem

Gem은 Ruby의 패키지 관리자입니다. gem 명령을 통해 원하는 루비 기반의 도구나 라이브러리를 설치/삭제/검색할 수 있습니다.

# 설치
gem install yaml 

# 삭제
gem uninstall yaml

# 검색
gem search yaml

Gemfile and Bundler

어플리케이션의 의존성을 매번 gem 명령 하나로 관리하긴 어렵습니다. 그래서 Gemfile과 Bundler를 통해 여러가지 패키지를 관리할 수 있습니다.

source 'https://rubygems.org'

# 기본적인 gem 명시 방법입니다.
gem 'yaml' 

# 두번째 인자 값으로 버전을 명시할 수 있습니다. 
gem 'xspear', '1.4.1' 

# 특정 버전 이상의 gem만 설치할 수 있도록 명시할 수도 있습니다.
gem "haml-rails", "~> 0.3.4" 

# require를 지정해서 bundler가 gem을 require하는 것을 방지할 수 있습니다.
gem 'rspec', :require => false 

# source를 이용하면 사설 gem 서버 등에서도 gem을 가져올 수 있습니다.
source 'https://your.private.gems.repo' do
  gem 'my_gem', :group => :development
end

이렇게 명시한 Gemfile은 bundler로 한번에 설치하거나 관리할 수 있습니다.

bundle install

Make Gem

Gem Structure

.gemspec 파일에 명시된 내용을 기반으로 Ruby App을 하나의 패키지로 묶여진 것을 Gem이라고 합니다. 그래서 .gemspec 파일만 작성하면 어떤 디렉토리에서도 Gem을 빌드할 수 있습니다. 다만 대부분은 Gem을 만들때는 Bundler($ bundle gem) 명령으로 Gem 디렉토리 구조를 한번에 생성하여 만듭니다.

Gem::Specification.new do |spec|
  spec.name = "testapp"
  spec.version = Testapp::VERSION
  spec.authors = ["hahwul"]
  # ...
end
  • <APPNAME>.gemspec: Gem에 대한 전반적인 정보와 설정을 명시
  • lib: 라이브러리 코드가 들어가는 디렉토리
  • bin: 실행을 위한 코드가 들어가는 디렉토리
    • bin/console: IRB 지원을 위한 코드입니다.
    • bin/setup: gem install 시 추가적으로 처리해줄 코드를 지정합니다. (예를들어 3rd-party 설치 등)
    • bin/<NAME>: bin 하위에 console, setup 이외 파일은 gem 설치 후 사용할 수 있는 명령어를 의미합니다.

With bundler

# bundle gem <GEMNAME>
# --------------------
bundle gem testapp

# Creating gem 'testapp'...
# Initializing git repo in /Users/hahwul/nop/testapp
#       create  testapp/Gemfile
#       create  testapp/lib/testapp.rb
#       create  testapp/lib/testapp/version.rb
#       create  testapp/sig/testapp.rbs
#       create  testapp/testapp.gemspec
#       create  testapp/Rakefile
# .... snip ....
#       create  testapp/spec/spec_helper.rb
#       create  testapp/spec/testapp_spec.rb

Build

# Build
gem build testapp.gemspec

# Install
gem install ./testapp-0.0.1.gem

🎮 IRB

IRB(Interactive Ruby Shell)은 Ruby를 실시간으로 작성하고 내용을 확인할 수 있는 쉘입니다. 기본으로 제공되며 이를 활용하면 계산 작업 등 간단한 작업에 루비를 사용하여 처리할 수 있고 실시간 디버깅에도 굉장히 용이합니다.

irb

🚀 Go-to Gems

Env

Concurrency

Utils

Terminal

Parser

Web

Log

Notify

CommandLine

Task

Articles

https://www.hahwul.com/tag/ruby/

References