前提
・Ruby1.9以降の開発環境を用意しておいてください。
・gitをインストールしておいてください。
・dslable gemをインストールしておいてください。
gem install dslable
※またはbundlerでinstall
※下記は、公開を前提とする場合のみ必要です
・GitHubのユーザー登録を済ませておいてください
・RubyGemsのユーザー登録を済ませておいてください
仕様
三角形の面積計算ツールを作成します
・入力は内部DSLで行う。height, widthをHashで設定する
・gem名はtriangle_calc
・bin名はtrianglecalc
・trianglecalc initで内部DSLのひな形を生成
・trianglecalc executeで計算を実行
※この仕様自体にあまり意味はないですが、内部DSL形式の設定ファイルを利用した
簡単な内容のgemを説明するために上記の仕様にしています。
内部DSL形式の設定ファイルとはGemfileのように、Rubyのための設定ファイルが
RubyのDSLとして記述されているものです。
手順
設定ファイルの生成
下記コマンドで設定ファイルを生成
dslable i
下記内容でDsldefineファイルが出力されます
# encoding: utf-8 # set your gem name. this is use in rb-filename and class-name gem_name "TODO: set your gem_name" # set your bin name bin_name "TODO: set your bin_name" # set your dsl filed field :field_name1 do |f| # set your field description f.desc "field1 description" f.args :args_name do |a| # set your args description a.desc "args description" # you can use String, Array, Hash and :Boolean a.klass String # if you want not required, comment out following line a.required # if you comment out following line, default => nil a.default_value "args_value2" end end # field :field_name2 do |f| # f.desc "field2 description" # f.args :args_name do |a| # a.desc "args description" # a.klass String # a.required # a.default_value "args_value2" # end # end
引き続きDSLファイル内の設定内容について説明します。
設定ファイルの項目説明 gem名
下記にgem名を設定します。小文字のスネークケース推奨。(アンダースコア区切り)
ここに設定した内容がRubyGemsに登録する際のgem名になります。
# set your gem name. this is use in rb-filename and class-name gem_name "TODO: set your gem_name"
設定ファイルの項目説明 bin名
下記にbin名を設定します。短い名前にしたほうが利用時の利便性が高いです。
# set your bin name bin_name "TODO: set your bin_name"
設定ファイルの項目説明 フィールド
必要になるフィールド名、フィールドの説明、引数を設定する。
説明は自動生成されるコードのコメントに利用される。
引数はフィールドに設定する引数。詳細については続く引数の説明内容を参照。
フィールドは複数作成可能。
# set your dsl filed field :field_name1 do |f| # set your field description f.desc "field1 description" f.args :args_name do |a| # :
設定ファイルの項目説明 引数
下記の項目を設定できる
引数名
引数の説明
引数のクラス(String, Symbol, Array, Hash, :Boolean[trueかfalse]を利用可能)
必須かどうか(設定を省略した場合は必須ではなくなる)
デフォルト値(設定を省略した場合はデータ型に応じた初期値が設定される基本はemptyに相当する値)
引数は1つしか設定できないので、1つのフィールドで複数の値を取得したい場合はArrayかHashを利用すること。
Hashでデフォルトを指定する場合はブレースは付けないで指定すること。
# set your dsl filed field :field_name1 do |f| # set your field description f.desc "field1 description" f.args :args_name do |a| # set your args description a.desc "args description" # you can use String, Array, Hash and :Boolean a.klass String # if you want not required, comment out following line a.required # if you comment out following line, default => nil a.default_value "args_value2" end end
設定ファイルを編集する
では三角形面積計算の仕様にしたがって編集します。
# encoding: utf-8 gem_name "triangle_calc" bin_name "trianglecalc" field :triangle do |f| f.desc "triangle" f.args :h_w do |a| a.desc "height width setting" a.klass Hash a.required a.default_value height: 4, width: 2 end end
gemのテンプレートを生成
下記コマンドでgemのひな形を生成します
dslable g
gemテンプレートの出力確認 構成
下記構成でファイルが出力されます。
※.gitの中身は省略
└─triangle_calc │ .gitignore │ .rspec │ Gemfile │ LICENSE.txt │ Rakefile │ README.md │ Trianglecalcfile │ triangle_calc.gemspec │ ├─.git ├─bin │ trianglecalc │ ├─lib │ │ triangle_calc_core.rb │ │ triangle_calc_dsl.rb │ │ triangle_calc_dsl_model.rb │ │ │ └─triangle_calc │ version.rb │ ├─spec │ spec_helper.rb │ triangle_calc_core_spec.rb │ └─tudu doings dones todos
引き続き、生成された内容について説明します
出力確認 Gemfile
・rspec: テスト用
・thor: CLI機能用に利用
・simplecov: カバレッジ計測(実際に利用する場合はspec_helper.rbに利用の指定をしてください。)
・activesupport: ActiveSupport::Concernsやcapitalizeなどを利用します
・activemodel: ActiveModel::Modelを利用します
・tudu: gem作成のために必要になるタスク管理用
source 'https://rubygems.org' gemspec gem "rspec", "~> 2.14.1" gem "thor", "~> 0.18.1" gem "simplecov", "~> 0.8.2" gem "activesupport", "~> 4.0.1" gem "activemodel", "~> 4.0.2" gem "tudu", "~> 0.0.4"
出力確認 Core Class
・内部DSLのファイル名定数が設定済み(TRIANGLE_CALC_FILE)
・内部DSL用のテンプレートが設定済み(TRIANGLE_CALC_TEMPLATE)
・initメソッドは実装済み
・executeメソッドは内部DSLから値を取得する部分まで実装済み
・後は取得した値を利用して実行するロジックを手動で記述するだけです。
# encoding: utf-8 require 'triangle_calc_dsl' module TriangleCalc # TriangleCalc Core class Core TRIANGLE_CALC_FILE = "Trianglecalcfile" TRIANGLE_CALC_TEMPLATE =<<-EOS # encoding: utf-8 # triangle # h_w is required # h_w allow only Hash # h_w's default value => :height=>4, :width=>2 triangle :height=>4, :width=>2 EOS #== generate Trianglecalcfile to current directory. def init File.open(TRIANGLE_CALC_FILE, "w") {|f|f.puts TRIANGLE_CALC_TEMPLATE} end #== TODO: write your gem's specific contents def execute src = read_dsl dsl = TriangleCalc::Dsl.new dsl.instance_eval src # TODO: implement your gem's specific logic end private def read_dsl File.open(TRIANGLE_CALC_FILE) {|f|f.read} end end end
出力確認 Dsl Class
・内部DSLを管理するためのクラス。
・モデルをフィールドとして保持。
・モデルへの初期値設定処理が定義されている。
・一切編集する必要がありません。
# encoding: utf-8 require 'triangle_calc_dsl_model' module TriangleCalc class Dsl attr_accessor :triangle_calc # String Define [].each do |f| define_method f do |value| eval "@triangle_calc.#{f.to_s} = '#{value}'", binding end end # Array/Hash/Boolean Define [:triangle].each do |f| define_method f do |value| eval "@triangle_calc.#{f.to_s} = #{value}", binding end end def initialize @triangle_calc = TriangleCalc::DslModel.new @triangle_calc.triangle = {:height=>4, :width=>2} end end end
出力確認 DslModel Class
・内部DSLの内容をモデルとして保持するクラス。
・RailsのActiveModel::Modelをincludeしている。
・内部DSLで行った必須の設定はここで反映される。
※実際に必須のチェックをする場合はCoreクラスでモデルのvalidation機能を呼び出す
・一切編集する必要がありません。
# encoding: utf-8 require 'active_model' module TriangleCalc class DslModel include ActiveModel::Model # triangle attr_accessor :triangle validates :triangle, :presence => true end end
出力確認 bin
・CLIツールとしての機能を実装するクラス。
・基本的にはコマンドラインのサブコマンドやオプションの制御や、コマンドが増えた場合のメンテナンスが主な役割。
・実処理はCore側に持たせる想定。
今回はTODOになっているヘルプ用のコメント部の編集とCoreから受け取った値を標準出力させる処理のみ実装します。
#!/usr/bin/env ruby # encoding: utf-8 require "triangle_calc_core" require "triangle_calc/version" require "thor" module TriangleCalc #= TriangleCalc CLI class CLI < Thor class_option :help, :type => :boolean, :aliases => '-h', :desc => 'help message.' class_option :version, :type => :boolean, :desc => 'version' desc "execute", "TODO: write your desc" def execute TriangleCalc::Core.new.execute end desc "init", "generate Trianglecalcfile" def init TriangleCalc::Core.new.init end desc "version", "version" def version p TriangleCalc::VERSION end end end TriangleCalc::CLI.start(ARGV)
出力確認 Core Spec
Coreクラスのexecuteメソッド用のテストクラスのひな形が生成されています。
(内部的にRSpecPiccolo gemを利用して生成されています)
# encoding: utf-8 require "spec_helper" require "triangle_calc_core" describe TriangleCalc::Core do context :execute do cases = [ { case_no: 1, case_title: "case_title", expected: "expected", }, ] cases.each do |c| it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do begin case_before c # -- given -- triangle_calc_core = TriangleCalc::Core.new # -- when -- # TODO: implement execute code # actual = triangle_calc_core.execute # -- then -- # TODO: implement assertion code # expect(actual).to eq(c[:expected]) ensure case_after c end end def case_before(c) # implement each case before end def case_after(c) # implement each case after end end end end
出力確認 tudu
tuduディレクトリ配下の各種ファイルはtudu gemをインストールした状態で、
プロジェクトルートでコマンドを実行することで確認可能です。
今回の場合はtriangle_calcディレクトリ直下でコマンドを実行する。
tuduの利用方法について
簡単なヘルプの確認は
$tudu h Commands: tudu add # add tasks to todos file tudu choose # choose tasks from todos to doings file tudu doings # search tasks from doings file. no args => get all ta... tudu done # done tasks from doings to dones file. and choose tas... tudu dones # search tasks from dones file. no args => get all tas... tudu help [COMMAND] # Describe available commands or one specific command tudu init # generate todos,doings,dones files tudu now # search tasks from doings file. no args => get all ta... tudu progress # display tasks progress tudu remove # remove tasks from todos,doings,dones file tudu tasks # search tasks from todos,doings,dones file. no args =... tudu todos # search tasks from todos file. no args => get all tas... tudu version # version Options: -h, [--help] # help message. [--version] # version
詳細についてはGitHub参照
https://github.com/tbpgr/tudu
tuduの中身はただのテキストファイルのため操作に誤った場合は
手動で各テキストを編集することも可能です。
tuduの確認
タスクの一覧を確認します。
tudu tasks -c
現在のタスクがDOINGSに表示されます。
coreのテストの実装が最初のタスクです。
$tudu tasks -c ========TODOS======== implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== implement 'triangle_calc_core_spec.rb'. ========DONES========
ではtuduの現在のタスクに従い、coreのspecを作成します。
TDDでCoreSpecのexecuteのテストを実装
テストクラス(triangle_calc_core_spec.rb)のexecuteのテストを実装します。
今回はdslの内容を取得した結果として三角形の面積を文字列として返却します。
標準出力についてはbin側の責務とします。
テストケースは高さ10、幅20の三角形の面積が100になることを確認します。
# encoding: utf-8 require "spec_helper" require "triangle_calc_core" describe TriangleCalc::Core do context :execute do OUTPUT_TRIANGLE_TMP_DIR = 'tmp_templatable' TRIANGLE_CASE1 =<<-EOF # encoding: utf-8 triangle :height=>10, :width=>20 EOF cases = [ { case_no: 1, case_title: "height 10, width 20 case", output_file: "sample_use.rb", templatablefile: TRIANGLE_CASE1, expected: 100, }, ] cases.each do |c| it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do begin case_before c # -- given -- triangle_calc_core = TriangleCalc::Core.new # -- when -- actual = triangle_calc_core.execute # -- then -- expect(actual).to eq(c[:expected]) ensure case_after c end end def case_before(c) Dir.mkdir(OUTPUT_TRIANGLE_TMP_DIR) unless Dir.exists? OUTPUT_TRIANGLE_TMP_DIR Dir.chdir(OUTPUT_TRIANGLE_TMP_DIR) File.open(TriangleCalc::Core::TRIANGLE_CALC_FILE, 'w') { |f|f.print c[:templatablefile] } end def case_after(c) Dir.chdir('../') FileUtils.rm_rf(OUTPUT_TRIANGLE_TMP_DIR) if Dir.exists? OUTPUT_TRIANGLE_TMP_DIR end end end end
テストを実行し、失敗することを確認(Coreのexecuteをまだ実装していないため)
$rspec Run options: include {:focus=>true} All examples were filtered out; ignoring {:focus=>true} F Failures: 1) TriangleCalc::Core execute |case_no=1|case_title=height 10, width 20 case Failure/Error: expect(actual).to eq(c[:expected]) expected: 100 got: {:height=>10, :width=>20} (compared using ==) # ./spec/triangle_calc_core_spec.rb:37:in `block (4 levels) in <top (required)>' Finished in 0.009 seconds 1 example, 1 failure Failed examples: rspec ./spec/triangle_calc_core_spec.rb:26 # TriangleCalc::Core execute |case_no=1|case_title=height 10, width 20 case Randomized with seed 60601
Coreのテスト実装完了をtuduに反映
下記のコマンドをコンソールで実行して1つ目のタスクを完了します。
$tudu done -p 1/13|> |8%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. ========DONES======== implement 'triangle_calc_core_spec.rb'.
続いて新たなタスクであるcoreクラスの実装を行います。
TDDでCoreのexecuteを実装
底辺×高さ÷2になるように処理を実装します。
下記で編集しているのは
「#== calc triangle」というコメントと
「dsl.triangle_calc.triangle[:height] * dsl.triangle_calc.triangle[:width] / 2.0」
という行のみです。
dslのインスタンスからtriangle_calcを呼び出すとDslModelの内容を取得できます。
triangle_calcの部分はgem名と同じものが変数名として自動で設定されています。
DslModelは内部DSLで設定した名称で値を保持しています。
今回はフィールド名triangleでheightとwidthをハッシュで渡す仕様にしているため
上記のような記述で値を取得できます。
# encoding: utf-8 require 'triangle_calc_dsl' module TriangleCalc # TriangleCalc Core class Core TRIANGLE_CALC_FILE = "Trianglecalcfile" TRIANGLE_CALC_TEMPLATE =<<-EOS # encoding: utf-8 # triangle # h_w is required # h_w allow only Hash # h_w's default value => :height=>4, :width=>2 triangle :height=>4, :width=>2 EOS #== generate Trianglecalcfile to current directory. def init File.open(TRIANGLE_CALC_FILE, "w") {|f|f.puts TRIANGLE_CALC_TEMPLATE} end #== calc triangle def execute src = read_dsl dsl = TriangleCalc::Dsl.new dsl.instance_eval src dsl.triangle_calc.triangle[:height] * dsl.triangle_calc.triangle[:width] / 2.0 end private def read_dsl File.open(TRIANGLE_CALC_FILE) {|f|f.read} end end end
テストを実行し、成功することを確認します。
$rspec Run options: include {:focus=>true} All examples were filtered out; ignoring {:focus=>true} . Finished in 0.0085 seconds 1 example, 0 failures Randomized with seed 8323
Coreの実装完了をtuduに反映
$tudu done -p 2/13|=> |15%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== implement bin 'bin/trianglecalc'. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs.
tuduに従いbinの作成に着手します。
binの作成
binを作成します。
Coreクラスの呼び出しコードは自動生成済みなので、
標準出力する処理とexecuteコマンドのコメントのみ編集します。
コメントの内容はCUIのヘルプに表示される内容です。
#!/usr/bin/env ruby # encoding: utf-8 require "triangle_calc_core" require "triangle_calc/version" require "thor" module TriangleCalc #= TriangleCalc CLI class CLI < Thor class_option :help, :type => :boolean, :aliases => '-h', :desc => 'help message.' class_option :version, :type => :boolean, :desc => 'version' desc "execute", "calc triangle" def execute puts TriangleCalc::Core.new.execute end desc "init", "generate Trianglecalcfile" def init TriangleCalc::Core.new.init end desc "version", "version" def version p TriangleCalc::VERSION end end end TriangleCalc::CLI.start(ARGV)
binの実装完了をtuduに反映
$tudu done -p 3/13|==> |23%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== edit 'triangle_calc.gemspec'. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'.
tuduに従いgemspecを編集します。
triangle_calc.gemspecを編集
・gemspecを編集します。
・spec.authors:あなたのユーザー名
・spec.email:あなたのメールアドレス
・spec.description:gemの説明
・spec.summary:gemの要約
・spec.homepage:gem用のページがあるなら指定。よくあるパターンはGitHubのリポジトリURLを指定すること。
・spec.add_runtime_dependency:実行時依存のgemを必要なだけ指定しておくこと
・spec.add_development_dependency:開発依存のgemを必要なだけ指定しておくこと
# coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'triangle_calc/version' Gem::Specification.new do |spec| spec.name = "triangle_calc" spec.version = TriangleCalc::VERSION spec.authors = ["your_name"] spec.email = ["your_email] spec.description = %q{TODO: Write a gem description} spec.summary = %q{TODO: Write a gem summary} spec.homepage = "" spec.license = "MIT" spec.files = `git ls-files`.split($/) spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] spec.add_runtime_dependency "thor", "~> 0.18.1" spec.add_runtime_dependency "activesupport", "~> 4.0.1" spec.add_runtime_dependency "activemodel", "~> 4.0.2" spec.add_development_dependency "bundler", "~> 1.3" spec.add_development_dependency "rake" spec.add_development_dependency "simplecov", "~> 0.8.2" spec.add_development_dependency "rspec", "~> 2.14.1" end
gemspecの記述完了をtuduに反映
$tudu done -p 4/13|===> |31%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== edit 'README.md'. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'.
tuduに従いREADME.mdを編集します。
README.mdを編集
README.mdを編集します。
GitHubのリポジトリのトップページに表示される内容です。
ユーザーが迷わないように内容を記述します。
# TriangleCalc Triangle Calculator ## Installation Add this line to your application's Gemfile: gem 'triangle_calc' And then execute: $ bundle Or install it yourself as: $ gem install triangle_calc ## Usage ### init ~~~bash trianglecalc init ~~~ Trianglecalcfile ~~~ruby # encoding: utf-8 # triangle # h_w is required # h_w allow only Hash # h_w's default value => :height=>4, :width=>2 triangle :height=>4, :width=>2 ~~~ ### edit Trianglecalcfile manually ~~~bash # encoding: utf-8 triangle :height=>10, :width=>20 ~~~ ### execute ~~~bash $ trianglecalc execute 100.0 ~~~ ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request
READMEの記述完了をtuduに反映
$tudu done -p 5/13|===> |38%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== edit 'LICENSE.txt'. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'.
tuduに従いLICENSE.txtを編集します。
LICENSE.txtを編集
MITライセンスでよければユーザー名のみ自分のものに変更します。
Copyright (c) 2014 yoru_name MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
gemspecの記述完了をtuduに反映
$tudu done -p 6/13|====> |46%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== git add, commit. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'.
tuduに従いgitに現状の編集内容を登録します。
gitに登録する
git add -A
git add -u
git add commit -m "first commit"
git push origin master
※git push origin masterの部分は予めGitHubにリポジトリを作成し、
remoteリポジトリの登録を行っておくこと
gemspecの記述完了をtuduに反映
$tudu done -p 7/13|=====> |54%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== rake install. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit.
tuduに従いrake installをします。
rake install
rake installでgemを動作確認用にインストールします。
$rake install triangle_calc 0.0.1 built to pkg/triangle_calc-0.0.1.gem. triangle_calc (0.0.1) installed.
gemspecの記述完了をtuduに反映
$tudu done -p 8/13|======> |62%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== gem uninstall triangle_calc. rake release. gem install triangle_calc. after release check. ========DOINGS======== check gem(test using). ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install.
tuduに従いgemの動作確認をします。
gemの動作確認
trianglecalcの内部DSL生成の確認
$trianglecalc i $cat Trianglecalcfile # encoding: utf-8 # triangle # h_w is required # h_w allow only Hash # h_w's default value => :height=>4, :width=>2 triangle :height=>4, :width=>2
内部DSLの設定ファイルを編集します。
底辺20、高さ10に設定します。
# encoding: utf-8 # triangle # h_w is required # h_w allow only Hash # h_w's default value => :height=>4, :width=>2 triangle :height=>10, :width=>20
計算を実行します。
$trianglecalc e 100.0
結果が問題ないため次に進みます。
gemspecの記述完了をtuduに反映
$tudu done -p 9/13|======> |69%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== rake release. gem install triangle_calc. after release check. ========DOINGS======== gem uninstall triangle_calc. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using).
動作確認用にinstallしたgemをuninstallしておきます
$gem uninstall triangle_calc Removing trianglecalc Successfully uninstalled triangle_calc-0.0.1
gemspecの記述完了をtuduに反映
$tudu done -p 10/13|=======> |77%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== gem install triangle_calc. after release check. ========DOINGS======== rake release. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc.
tuduに従いgemをリリースします。
※外部公開しない場合は、ここまでの手順で作業完了です。
gemのリリース
まずGitHubにリリースします。
リモートリポジトリはoriginで作成され、ブランチはmasterを利用する前提とします。
git push origin master
RubyGemsにリリースします
rake release
gemspecの記述完了をtuduに反映
$tudu done -p 11/13|========> |85%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== after release check. ========DOINGS======== gem install triangle_calc. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release.
リリースしたgemをインストールします
$ gem install triangle_calc
gemspecの記述完了をtuduに反映
$tudu done -p 12/13|=========> |92%
タスクの一覧を確認します。
$tudu tasks -c ========TODOS======== ========DOINGS======== after release check. ========DONES======== implement 'triangle_calc_core_spec.rb'. implement 'triangle_calc_core.rb' your main logic. pass rspec all specs. implement bin 'bin/trianglecalc'. edit 'triangle_calc.gemspec'. edit 'README.md'. edit 'LICENSE.txt'. git add, commit. rake install. check gem(test using). gem uninstall triangle_calc. rake release. gem install triangle_calc.
最後のタスクとしてinstallしたgemを動作確認します。
問題が無ければ最後のtuduを反映します。
gemspecの記述完了をtuduに反映
$tudu done -p All Tasks Finish!! 13/13|==========>|100%
最後に
これでgemの作成から公開まで完了です。
ぜひdslableでコマンドライン形式のgemデビューをしてみてください!