Brainf*ck 亜種言語生成ライブラリ (gen_brain) を gem release します

秒速@284km

表参道.rb #28 ~gem~

goku.jpg

秒速@284km

goku.jpg

  • feedforce エンジニア
  • Rails Developers Meetup

gem について 今日話すこと

  • 「オススメのgemの紹介」
  • 「gemを使って失敗した事例」
  • 「gemの作り方」
  • なお 非実用的な gem です

Brainf*ck

Brainfuck

Input (brainfuck のコード)

+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.

Output

Hello, World!

Input (前回実装した brain_kemofure のコード)

わーい!わーい!すごーい!わーい!たーのしー!すごーい!わーい!わーい!たーのしー!食べないでくださいあなたは何のフレンズさんですか?わーい!わーい!わーい!わーい!わーい!わーい!わーい!わーい!あなたは何のフレンズさんですか?わーい!わーい!わーい!わーい!わーい!わーい!わーい!わーい!わーい!わーい!わーい!あなたは何のフレンズさんですか?わーい!わーい!わーい!わーい!わーい!われわれはかしこいのでわれわれはかしこいのでわれわれはかしこいのでまたやってしまったねぇ食べないよあなたは何のフレンズさんですか?やりますねあなたは何のフレンズさんですか?わーい!わーい!やりますねわーい!わーい!わーい!わーい!わーい!わーい!わーい!やりますねやりますねわーい!わーい!わーい!やりますねあなたは何のフレンズさんですか?またやってしまったねぇやりますねまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇやりますねわれわれはかしこいのでわーい!わーい!わーい!わーい!わーい!わーい!わーい!わーい!やりますねまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇやりますねわーい!わーい!わーい!やりますねまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇやりますねまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇまたやってしまったねぇやりますねあなたは何のフレンズさんですか?わーい!やりますね

Output

Hello, World!

gem を作る

  • bundle gem (雛形を作る)
  • .gemspec ファイルを編集する
  • 実装したり、README を更新したり
  • rake install:local (network access 無しで gem を install)
  • rake release (tag 付けて build して Rubygems へ push する)

雛形を作る

bundle gem -b gen_brain -t
  • -b
    • 作成するライブラリのためのバイナリを生成する
  • -t
    • 作成するライブラリのためのテスト用のディレクトリを生成する
    • default: rspec ですが、minitest もサポートしている

これらは端折ります

  • .gemspec ファイルを編集する
  • 実装したり、README を更新したり
  • rake install:local (network access 無しで gem を install)

gen_brain がやること

  • brainfuck 亜種言語の生成
  • Hello, World! と出力する生成した brainfuck 亜種言語のコード

gem release します

284km/gen_brain

Usage:
gen_brain config.yml

設定ファイルを 284/gen_brain に3つほど用意してみた

  • config.yml (普通の brainfuck)
  • config_kemofure.config (ケモフレ言語)
  • config_street_fighter2.config (スト2言語)