ruby知らない人にもおすすめ!イケてるgem4選
はじめに
gemとはrubyのパッケージのことです。rails, chef, rspec, capybaraなどプロのデベロッパーが開発のために使用する鉄板gemは数多くありますが、 ここではrubyでのソフトウェア開発から離れ、rubyを普段使わない人も思わず使いたくなってしまうかもしれないイケてるgemについて紹介したいと思います。
ここで紹介するgemはrubyをインストールすると入っているgemコマンドをたたくと、インストールできます。
gem install gemの名前
jekyll
jeykyllはmarkdownブログが作れるWebアプリケーションフレームワークです。
markdown形式なので、簡単に記事が書ける上に好きなjavascriptライブラリやjekyllプラグインを使ってカスタマイズできるのが特徴です。
jekyll new myblog
cd myblog
上のコマンドを実行すると、以下のようなディレクトリが作成されています。
myblog
├── about.md
├── _config.yml
├── Gemfile
├── Gemfile.lock
├── index.md
├── _posts # この中にマークダウンファイルを入れると記事になる。
│ └── 2016-12-13-welcome-to-jekyll.markdown
└── _site
jeykyll serveでサーバーを立ち上げるとローカルホストの4000番でブログが立ち上がります。
cd myblog
jekyll serve --host=0.0.0.0 # サーバの立ち上げ。--hostを省略するとlocalからのみ参照可になる
結果
_postディレクトリ配下に、markdown形式で追加するだけでブログに記事を追加していくことができます。
※ファイル名は2016-11-20-jekyll-test.mdのような感じで日付を先頭に書いておく必要があります
サンプル(myblog/_post/2016-11-20-jekyll-test.md)
---
layout: post
title: "jeykyllで簡単ブログ記事"
date: 2016-11-20 00:00:00 +0900
categories: test
---
## コード
```ruby
class Array
def sum
self.reduce(0,&:+)
end
end
puts [1,2,3,4,5,5].sum
```
### テーブル
|name|age|
|---|---|
|sato|29|
|ito|12|
結果
jekyllにはほかのフレームワークと一線を隔すもう一つの特徴がります。それはgithubがjekyllのホスティングをサポートしていることです。
jekyllのディレクトリをgithubにpushするだけでgithubが勝手にホスティングをしてくれるんです!!!(これは楽ですね)
なお、このブログもこの仕組みでホスティングされています。
axlsx
ワークシートを追加する(add_worksheet
)、行を追加する(add_row
)などのメソッドで簡単にExcelが生成できます。
報告書をExcelで書かないといけないけど、人力でExcelを書くのが面倒!という人におすすめ。
サンプル
require 'axlsx'
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "Example") do |sheet|
sheet.add_row ['時','商品A','商品B','商品C','商品D']
sheet.add_row ['今月',1,2,3,4]
sheet.add_row ['先月',1,2,1,10]
end
p.serialize('example.xlsx')
end
結果
あの有名なExcel方眼紙も簡単!
require 'axlsx'
text = <<'EOS'
axlsxで簡単!
Excel方眼紙
EOS
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "sheet1") do |sheet|
text.each_line do |line|
row = sheet.add_row
line.each_char{|char| row.add_cell char }
end
end
p.serialize('hoganshi.xlsx')
end
結果
ほかにも、グラフを作ったりセルの色やスタイルを変更できます。
公式のgithubのexample配下を見るとやり方がわかります。
rubywarrior
RPG風の2dのマップ上を歩くAIが作りステージを攻略していくgemです。
道中の敵を攻撃したり、回避したり、危険な場合には休んで体力を回復したりしてゴールを目指すのが目的です。
- @ : プレイヤー
- s : 敵
- S : 強めの敵
-
: ゴール
基本的な使い方は以下のように、play_turn
メソッドの中で、warrior
の様々なメソッドを呼び出して、プレイヤーの行動を決めていくことになります。
class Player
def play_turn(warrior)
forward = warrior.feel :forward
if forward.enemy?
# warrior.feelで敵が存在するかを感知し、いればwarrior.attack!で攻撃
warrior.attack! :forward
else
# 敵がいなければwarror.walkでそのまま進んでいく
warrior.walk! :forward
end
end
end
このgemにインスパイアされたwebアプリ版rubywarriorも存在します。
※注意 音が出ます。
ゲームのAIに興味のある方に、ぜひおすすめ!
reality
realityはrubyのオブジェクトにwikipediaの記事などをマッピングしてくれるgemです。
rubyのオブジェクトを返してくれるのでメソッドチェインで複雑な問い合わせが実現できます。
require 'reality'
include Reality
ru = Entity('Russia')
# ロシアの首都は?
p ru.capital # => Moscow
# ロシアの面積は?
p ru.area # => #<Reality::Measure(17,075,400 km²)>
# ロシアの公式サイトは?
p ru.official_website # => http://gov.ru/
# ロシアはどの大陸に属しているか?
p ru.continent # => #<Reality::Entity?(Europe)>
# ロシアの前の国は?
p ru.follows # => #<Reality::Entity?(Russian Soviet Federative Socialist Republic)>
# ロシアの前の前の国は?
p ru.follows.follows # => #<Reality::Entity?(Russian Republic)>
# ロシアの前の前の国の公式サイトは?
p ru.follows.follows.official_website # => nil
国以外の記事ももちろん検索できます。
o = Entity("Olympic Games")
# オリンピックのツイッターアカウント名は?
p o.twitter_username # => "olympics"
# オリンピックの公式Webサイトは?
p o.official_website # => "http://www.olympic.org/"
s = Entity("Star Wars (film)")
# スターウォーズが公開された日は?
p s.published_at # => Wed, 25 May 1977
# スターウォーズの出演者一覧
p s.actors # => [#<Reality::Entity?(Harrison Ford)>, #<Reality::Entity?(Alec Guinness)>, .............
# ハリソンフォードの年齢は?
p s.actors.first.age # => 74
Siriみたいな検索システムが作れそうで、とても面白いgemです。
似たようなことができるgemにfactbookがあります。こちらは
データソースがwikipediaではなくCIAが発行しているWorld Factbookです。