10〜20のクラス/ファイルを含む小さなRubyプロジェクトを作成します。いくつかのgemが必要で、テストフレームワークとしてRSpecを使用します。
後でgemを構築したいかもしれませんが、それは確かではありません。
プロジェクトの基本構造を設定する方法を示すハウツーまたはガイドはありますか?
私が持っている質問は次のとおりです。
ゼロからすべてを実行できることは知っていますが、ガイダンスが必要です。そこにコピーできる良い宝石がいくつかありますが、本当に必要なものと削除できるものがわかりません。
http://gembundler.com/ を見ましたが、Bundlerのセットアップ後に停止します。
良いスタートを切るには、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
のファイルを必要とします。自分の好みに応じて、そのファイル、または独自のファイルで例外を定義できます。ext/my_lib
に入りますbin
に入ります疑問がある場合は、他の宝石がどのように配置されているかを見てください。
詳細情報:
他の開発者にとって物事を簡単にするために、gemspecに開発依存としてrspecを追加する必要があります
gem.add_development_dependency 'rspec'
およびgem.add_development_dependency 'rake'
を下部近くに追加します。Bundler.setup
とrequire 'my_lib'
をspec/spec_helper.rbの先頭に追加して、仕様の実行時にgemの依存関係が確実にロードされるようにします。require "rspec/core/rake_task"
とtask :default => :spec
をRakefileに追加して、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 [email protected]:myusername/my_lib.git
~/code/my_lib $ git Push
次に、Rubygems.orgでgemをリリースする準備ができたら、rake release
を実行し、手順を説明します。
~/code/my_lib $ rake release
さらなる参考文献
rubygems.orgのニースガイド があり、慣習とそのいくつかの背後にある理由を紹介します。一般的に、 Rubygemsの命名規則とディレクトリ規則 の後に、ほとんどのRuby開発者が続きます。
標準ライブラリでエラーの説明に適合するクラスが見つからなかった場合にのみ、カスタム例外クラスを作成します。エラークラスを、それを発生させるクラスまたはモジュールの下にネストします。
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
に指定された依存関係のみを使用して、環境を自動的にセットアップします。また、コードをgemにせずに簡単にrequire
することができます。
ただし、将来的にコードをgemにバンドルする可能性があるため、 gem仕様の作成方法 を調査することをお勧めします。仕様を手動で記述する必要があります。自動的に生成するツールを使用しないでください-私の意見では、ソース管理で使用すると、不必要に情報を複製して大混乱を招くブルートフォースアプローチです。
私はgemを作成しました これは便利だと思うかもしれません。 gemspec
ファイルを指定すると、gemをRake
およびrubygems
リポジトリにビルド、インストール、リリースするタスクを含む、gemを操作するための多くの便利なgit
タスクを定義します自動バージョンのタグ付け。また、irb
またはpry
セッションでコードをロードする簡単な方法も提供します。
# Rakefile
require 'rookie'
# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
私が最もよく見た慣例は次のとおりです(プロジェクトの名前が「foo」であると仮定):
Lib /内では、通常、トップレベルの名前空間内の各サブ名前空間にフォルダーを作成するのが慣例です。たとえば、クラスFoo :: Bar :: Bazは通常/lib/foo/bar/baz.rbの下にあります。
Foo :: VERSION定数を設定するためだけに/lib/foo/version.rbファイルを作成したい人もいますが、非常によく/lib/foo.rbファイルで定義されています。
また、gemを作成する場合は、次のファイルが必要です。
Rubyプロジェクトを構築する方法については、インターネット上にいくつかのガイドがあります。さらに、これを解決する最良の方法はgithubに向かい、有名なRubyプロジェクト、および「それら」の構造を確認します。
一般的なRuby gem要件に加えて、ワークフローを改善するために次のツールをお勧めします。
package
:gemパッケージをビルドしますclean
:生成されたファイルを消去しますtest
:テストを実行上記のすべてのツールに加えて、それらはRubyプロジェクトのオンラインサービスです:
また、オープンソースプロジェクトの http://shields.io/ を介してバッジを生成することもできます。
それが私の経験です。それが何らかの助けになることを願っています。