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
😎 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