기본 Ruby 프로젝트는 어떻게 설정하나요?


103

10 ~ 20 개의 클래스 / 파일로 구성된 작은 Ruby 프로젝트를 만들고 싶습니다. 보석이 필요하고 RSpec을 테스트 프레임 워크로 사용하고 싶습니다.

나중에 보석을 만들고 싶을 수도 있지만 확실하지 않습니다.

프로젝트의 기본 구조를 설정하는 방법을 보여주는 방법이나 가이드가 있습니까?

내가 가진 질문은 다음과 같습니다.

  • 모든 사용자 지정 오류 / 예외를 어디에 두나요?
  • lib, bin, src 등과 같은 디렉토리 이름 지정에 대한 몇 가지 규칙이 있습니까?
  • 테스트 데이터 또는 문서는 어디에 두나요?
  • 프로젝트에서 액세스 할 수 있도록 모든 파일이 어디에 필요합니까?

나는 모든 것을 처음부터 할 수 있다는 것을 알고 있지만 약간의 지침이 필요합니다. 복사 할 수있는 좋은 보석이 몇 가지 있지만 내가 정말로 필요한 것과 삭제할 수있는 것은 확실하지 않습니다.

http://gembundler.com/을 보았지만 Bundler 설정 후 중지됩니다.


답변:


156

좋은 시작을 위해 bundle gem및 명령을 사용할 수 있습니다 rspec --init.

~/code $ bundle gem my_lib
      create  my_lib/Gemfile
      create  my_lib/Rakefile
      create  my_lib/LICENSE.txt
      create  my_lib/README.md
      create  my_lib/.gitignore
      create  my_lib/my_lib.gemspec
      create  my_lib/lib/my_lib.rb
      create  my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
  create   spec/spec_helper.rb
  create   .rspec
  • 코드가 들어갑니다 lib
  • 사양 입력 spec
  • 테스트 데이터 또는 문서 입력 spec/fixtures/
  • 모든 루비 파일이 lib/my_lib.rb. 자신의 기본 설정에 따라 해당 파일 또는 자체 파일에서 예외를 정의 할 수도 있습니다.
  • C 소스 파일이 들어갑니다. ext/my_lib
  • 쉘 스크립트와 실행 파일이 들어갑니다. bin

의심스러운 경우 다른 보석이 어떻게 배치되어 있는지 살펴보십시오.


추가 정보 :

다른 개발자가 더 쉽게 작업 할 수 있도록 gemspec에 rspec을 개발 종속성으로 추가해야합니다.

  1. 편집 my_lib.gemspec, 추가 gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'아래쪽.
  2. spec / spec_helper.rb 상단에 Bundler.setuprequire 'my_lib'을 추가 하여 사양을 실행할 때 gem 종속성이로드되도록합니다.
  3. Rakefile을 추가 require "rspec/core/rake_task"하여 task :default => :spec실행 rake하면 사양 이 실행 됩니다.

최신 생성 작업을하는 동안 guard-rspec 은 파일이 변경 될 때 사양을 자동으로 실행하여 사양 실패를 경고 함으로써 시간과 번거 로움을 절약 할 수 있습니다.

~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"

제작이 만족 스러우면 github로 푸시하세요.

# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}' 
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push

그런 다음 Rubygems.org에서 gem을 릴리스 할 준비가 되었으면을 실행 rake release하여 단계를 안내합니다.

~/code/my_lib $ rake release

추가 참조


1
-b, [--bin=Generate a binary for your library.]와 함께 사용할 수 있습니다 bundle gem.
Selman Ulug 2012 년

를 사용 bundle gem <gem-name> -t하여 rspec --init모든 작업을 한 번 에 수행 할 수도 있습니다 .
pioto 2015-06-12

1
루비 프로젝트를 실행하는 방법. 학생 교사 시간표를위한 콘솔 기반 루비 프로젝트를 구축했습니다. 그것을 실행하는 방법을 모르십니까 ??
rAzOr

11

있다 rubygems.org에서 멋진 가이드 관습과 그들 중 일부 뒤에 추론을 소개합니다. 일반적으로 대부분의 Ruby 개발자는 Rubygems 이름 지정 및 디렉토리 규칙 을 따릅니다.

표준 라이브러리에서 오류 설명에 맞는 클래스를 찾을 수없는 경우에만 사용자 지정 예외 클래스를 만듭니다. 오류를 발생시키는 클래스 또는 모듈 아래에 오류 클래스를 중첩합니다.

class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end

단위 테스트로 중 이동 /test당신이 사용하는 경우, Test::Unit또는으로 /spec당신이 사용하는 경우 RSpec. 후자를 추천합니다.

Bundler로드 경로를 관리하는 좋은 방법입니다. 에 지정된 종속성 만 사용하여 환경을 자동으로 설정 Gemfile하고 선택적으로 gemspec. 또한 require코드를 보석으로 만들지 않고도 쉽게 코드를 작성할 수 있습니다.

그러나 나중에 gem에 코드를 묶을 수 있으므로 gem 사양을 만드는 방법을 조사 하는 것이 좋습니다 . 사양을 수동으로 작성해야합니다. 자동 생성을 위해 어떤 도구를 사용하지 마십시오. 제 생각에는 소스 제어와 함께 사용할 때 불필요하게 정보를 복제하고 혼란을 일으키는 무차별 대입 접근 방식입니다.

유용하다고 생각되는 보석만들었습니다 . gemspec파일이 주어지면 자동 버전 태그 지정을 사용 Rake하여 gem을 빌드, 설치 및 릴리스하는 작업 rubygemsgit저장소에 대한 작업을 포함하여 gem 작업에 유용한 많은 작업을 정의합니다 . 또한 irb또는 pry세션 에서 코드를 쉽게로드 할 수있는 방법을 제공합니다 .

# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!

6

다음은 제가 가장 자주 본 규칙입니다 (프로젝트 이름이 "foo"라고 가정).

  • /lib/foo.rb-프로젝트 및 버전의 최상위 네임 스페이스를 정의합니다. 필요한 파일이 필요합니다.
  • / lib / foo /-오류 관련 클래스를 포함하여 프로젝트의 모든 클래스를 포함합니다.
  • / test /-프로젝트에 대한 테스트를 포함합니다.
  • / spec /-프로젝트의 사양을 포함합니다.
  • / bin /-프로젝트가 바이너리 (JAR 파일 등)에 의존하는 경우 일반적으로 거기에 들어갑니다.

lib / 내에서 규칙은 일반적으로 최상위 네임 스페이스 내에 각 하위 네임 스페이스에 대한 폴더를 만드는 것입니다. 예를 들어 Foo :: Bar :: Baz 클래스는 일반적으로 /lib/foo/bar/baz.rb에 있습니다.

어떤 사람들은 Foo :: VERSION 상수를 설정하기 위해 /lib/foo/version.rb 파일을 만드는 것을 좋아하지만 /lib/foo.rb 파일에 정의 된 것을 자주 보았습니다.

또한 gem을 생성하는 경우 다음 파일이 필요합니다.

  • / Rakefile-레이크 작업 (예 : gem 테스트, 빌드 및 푸시 작업)을 정의합니다.
  • / Gemfile-gem의 소스를 정의합니다 (다른 가능한 것들 중에서).
  • /foo.gemspec-gem에 대해 설명하고 종속성 목록을 제공합니다.

5

Ruby 프로젝트를 구성하는 방법에 대한 몇 가지 가이드가 인터넷에 있습니다. 게다가이 문제를 해결하는 가장 좋은 방법은 github로 가서 유명한 Ruby 프로젝트를 찾고 "그들의"구조를 확인하는 것입니다.

일반적인 Ruby gem 요구 사항 외에도 더 나은 워크 플로를 위해 다음 도구를 권장합니다.

  • editorconfig 는 개발자가 서로 다른 편집기와 IDE간에 일관된 코딩 스타일을 정의하고 유지하도록 도와줍니다.
  • rubocop , ruby ​​용 정적 코드 분석기, ruby ​​커뮤니티의 linter에 대한 defac.
  • guard 는 여러 플러그인과 함께 코드가 변경 될 때 원하는대로 자동으로 명령을 실행할 수 있습니다.
  • rake , 다음과 같은 다양한 프로젝트 작업을위한 범용 드라이버 :
    • package: gem 패키지 빌드
    • clean: 생성 된 파일 정리
    • test: 테스트 실행
  • yard , 인기있는 루비 문서화 도구입니다.

그리고 위의 모든 도구 외에도 루비 프로젝트를위한 온라인 서비스입니다.

또한 오픈 소스 프로젝트에 대해 http://shields.io/ 를 통해 배지를 생성 할 수도 있습니다 .

그것이 제 경험입니다. 누군가에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.