読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

Rubyでアプリケーション以外のコードを書く

Webアプリエンジニア養成読本 Advent Calendar 2014 - Qiita の19日目です。そろそろ書くことなくなってきましたね。

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

本書を読んだあなたが

もし、Rubyを気に入ってくれているのだけど、直近のプロジェクトでRubyは使わないんだなーという場合に役立つかもしれません。

プロビジョニングツールを使ってみよう

最近流行ってますよね。DevOpsってヤツ。デブオプス。Ruby製のツールとしてはChefが一世を風靡したことは記憶にあたらしいところです。

しかし、この世はChef疲れを起こす人々であふれています*1。本稿ではもう少しお手軽に使えるツールとして ryotarai/itamae · GitHub について説明していきます。

ChefやitamaeはDSLで設定を書いていくスタイルですが、Rubyの構文が使えますので、本書で手に入れた知識が役に立つ時です!

itamaeをインストールする

前提となる環境は以下のとおりです

  • OSX Yosemite
  • Homebrewがインストールされている
  • Bundlerがインストールされている

まずはGemfileの生成を行います。

$ bundle init
Writing new Gemfile to /private/tmp/itamae_sample/Gemfile

おもむろにGemfileを編集します。

# A sample Gemfile
source "https://rubygems.org"

gem "itamae"

Gemfileの編集を行ったら bundle install を実行してインストールします。

レシピファイルを作成します

ここでは、自分のOSXの環境構築でインストールするお決まりのツールをitamaeでインストールするようにしてみましょう*2

recipe.rbというファイルを作成し、下記の内容を記述してみましょう。golangをパッケージングシステムを使ってインストールするための内容です。

packageは実行されるOSによって最適なパッケージシステムが選択されます。つまり、OSX上で実行する場合はHomebrewが選択されます。

package 'go'

これだけ記述したら、itamaeを実行してみます。

itamaeにはlocalモードとsshモードがありますが、今回はローカルに対して実行したいのでlocalという引数を使っています。そして、最後に作成したレシピファイルのパスを指定してあげます。

$ bundle exec itamae local recipe.rb
 INFO : Starting Itamae...
 INFO : Recipe: /private/tmp/itamae_sample/recipe.rb
 INFO :    package[go]
 INFO :       action: install

そうすると、goパッケージがインストールされました。

もうちょっとRubyっぽさを……

これだけで「ドヤ?Rubyで掛けて便利やろ?」などと言われても「ハァ、Rubyっすねぇ」というしかないと思うので、もうちょっとRubyっぽい感じでかける例にしてみましょう。例えば、goだけではなく、treeもインストールしたい!!という時、愚直に書くとこんな感じになるでしょう。

package 'go'
package 'tree'

しかしここはRubyの世界。このようにも書けます。

%w(go tree).each do |name|
  package name
end

goとtreeをRubyの構文で配列にしてeachで繰り返すようにしました。

$ bundle exec itamae local recipe2.rb
 INFO : Starting Itamae...
 INFO : Recipe: /private/tmp/itamae_sample/recipe2.rb
 INFO :    package[go]
 INFO :       action: install
 INFO :    package[tree]
 INFO :       action: install

これを実行すると、複数のファイルが読み込まれているのがわかりますね。

itamae自体は設定ファイルをjsonで外出しにする機構もあるので、あまりこういう使い方はしないかもしれませんが、用途に応じて、簡素に書ける方法を考えていくのが良いですね。

雑なまとめ

  • itamaeは便利
  • itamaeはRubyが書けるので便利
  • itamaeはChefと違って少ない設定でかけるので、ローカルの環境構築とかに便利
  • itamaeの詳細はGitHubを見よう!(当たり前ですがpackage以外にもgitとか色々あります!)
  • itamae自体はバックエンドに serverspec/specinfra · GitHub を使っているため、RedHatBSDでも動きます*3
    • Serverspecと同じものを使っているということですね
  • すぐにRubyを触れない状態でも、Rubyを使う用途はアプリケーション以外にもあるので、そういうところから狙うと良いかもしれません

書かなくてはならない宣伝

itamaeの設定を書くくらいであれば、Rubyを簡単に知っていれば十分なので、↓のRubyの解説を読んだくらいでもなんとかできるんじゃないかなーと思います!!

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

次のアドベントカレンダーおじさんは @koemu さんです。

enjoy!

*1:主に僕のことですが、、、

*2:実際のところ、このマシンは環境構築済みなのであまり恩恵はないですが……

*3:僕は確認してませんが、Windowsでもワンチャンありそう