更新情報
こんにちは、トランスネットの泉です。
「Ruby開発」と聞いて皆さん何を思い浮かべられるでしょうか。
このサイトの他のコラムでもご紹介している、Ruby on Railsではないでしょうか。
この強力なフレームワークの存在ゆえ、「Railsを使わない、Rubyでのアプリケーション開発」というものがピンと来ない方もいらっしゃるでしょう。
アプリケーションを作るということは、ソースコードを書いて保存することになります。
Rubyは自由な言語です。好きなところに好きなように書くことができます。
しかし、Railsのような「規約」やIDEのウィザードに慣れていますと、いきなり「ご自由にどうぞ!」と言われても戸惑ってしまうかも知れません。
「Railsなら、どこに何を書けば良いかわかるけれど・・・・・・」

そんな方のために、Dig Ruby! 第3回は足掛かりとなる「骨組み」を簡単に作る方法をご紹介します。

bundler

Railsを使われている方でしたらお馴染みのbundler。
gemを利用するためにお世話になるツールですが、実はgemを「作る」ためのツールでもあります。
今回はこの機能を利用して骨組みを作り、次のことを実践してみます。
  • Rubyプログラミング(Hello world!)
  • BDDの実践(RSpec)
  • コマンドラインからプログラムを実行

 

bundle gem

骨組みを生成するコマンドがbundle gemです。

Usage:
  bundle gem GEM [OPTIONS]
Options:
  -b, [–bin=Generate a binary for your library.]
  -t, [–test=Generate a test directory for your library: ‘rspec’ is the default, but ‘minitest’ is also supported.]
  -e, [–edit=/path/to/your/editor]                                                                                   # Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)
      [–ext=Generate the boilerplate for C extension code]
      [–no-color=Disable colorization in output]
  -V, [–verbose=Enable verbose output mode]
  -r, [–retry=Specify the number of times you wish to attempt network commands]
生成するgemの名前(空間)としてGEMを、更にいくつかのオプションを指定できます。
ここでは、以下の二つのオプションを指定してmy_skeltonという名前で骨組みを生成します。

 

  -b コマンドラインから実行するためのファイルを生成
-t テスト用のディレクトリなどを生成

 

$ bundle gem my_skelton -t -b

 

指定した名前でディレクトリが作られ、そのディレクトリ内に骨組みが生成されます。

 

$ bundle gem my_skelton -t -b

      create  my_skelton/Gemfile
      create  my_skelton/Rakefile
      create  my_skelton/LICENSE.txt
      create  my_skelton/README.md
      create  my_skelton/.gitignore
      create  my_skelton/my_skelton.gemspec
      create  my_skelton/lib/my_skelton.rb
      create  my_skelton/lib/my_skelton/version.rb
      create  my_skelton/bin/my_skelton
      create  my_skelton/.rspec
      create  my_skelton/spec/spec_helper.rb
      create  my_skelton/spec/my_skelton_spec.rb
      create  my_skelton/.travis.yml
Initializing git repo in /**/my_skelton

 

生成されたディレクトリに移動します。
gitがインストールされていてvcs_infoなどを利用している場合、このディレクトリがGitのリポジトリとして初期化されていることがわかります。
dr3
既に`git add`された状態ですので、そのままcommitしておけばいつでも最初の状態に戻せます。
$ git commit -m “generated by bundler”

 

bundle install

お決まりのbundle installを実行します。
$ bundle install –path=vendor/bundle
次のような、「有効なgemspecがない」という旨のメッセージが表示されます。

my_skelton at /**/my_skelton did not have a valid gemspec.

This prevents bundler from installing bins or native extensions, but that may not affect its functionality.
The validation message from Rubygems was:
  “FIXME” or “TODO” is not a description
作成したアプリケーションをgemとしてパッケージにする際には対応する必要がありますが、ひとまずこのままにしておきます。
ここまでの手順で、RSpecが組み込まれた骨組みを手に入れることができました。

 

Hello world!

それでは、早速Hello world!を出力してみましょう。
MySkelton.hello メソッドとして実装することにします。
bundle gemコマンドを実行する際に他の名前を指定された場合、my_skelton/MySkeltonを適宜読み替えてください。
テストフレームワークとしてRSpecを利用できる状態ですので、BDDを実践しましょう。

red

RSpecによるテストコードは、specディレクトリの下に保存することになります。

今回はspecディレクトリの下に生成されているファイル、my_skelton_spec.rbを利用します。
元々書かれているテストを削除し、MySkelton.helloのテストを書きます。
require spec_helper
describe MySkelton do
it has a version numberdo
expect(MySkelton::VERSION).not_to be nil
end
describe .hellodo
it puts “Hello world!” to $stdoutdo
expect($stdout).to receive(:puts).with(Hello world!)
MySkelton.hello
end
end
end
view rawmy_skelton_spec.rb hosted with ❤ by GitHub
保存して、rspecを実行します。
$ bundle exec rspec

red2赤いメッセージを確認できました。

テストが書けましたので、実装してみましょう。

green

アプリケーションとして実装するコードは、libディレクトリの下に保存することになります。
今回はlibディレクトリの下に生成されているファイル、my_skelton.rbを利用します。
Your code goes here…と書かれていますので、ここにコードを書いていきます。
require my_skelton/version
module MySkelton
def self.hello
putsHello world!
end
end
view rawmy_skelton.rb hosted with ❤ by GitHub
保存して、再びrspecを実行します。
$ bundle exec rspec

greenテストが通り、緑色のメッセージを見ることができました。

bin

メソッドを用意できましたので、コマンドとして実行してみましょう。
binディレクトリの下に生成されているファイル、my_skeltonを利用します。
先程用意したメソッドを呼び出すコードを書いて、保存してください。
#!/usr/bin/env ruby
require my_skelton
MySkelton.hello
view rawmy_skelton hosted with ❤ by GitHub

chmod a+x

編集したファイルに実行パーミッションを付与します。
$ chmod a+x bin/my_skelton
それでは実行してみましょう!
$ bundle exec bin/my_skelton

メッセージを確認できれば成功です。

まとめ

bundlerを利用して、Rubyアプリケーション開発の足掛かりとなる「骨組み」を作る方法についてご紹介しました。
これで、「どこに何を書けば良いかわからない……」という問題を解決できるのではないでしょうか:-)
次回以降は、この骨組みを使って実際に利用できるアプリケーションを開発する方法をご紹介したいと思います。
それでは今日はこの辺で。次回をお楽しみに♪