自己紹介
- sue445
-
ドリコム 所属
- サーバサイドをアプリからインフラまで浅く広く
- 最近 http://dabimas.jp/ (ダビスタスマホゲームの公式サイト兼事前予約サイト)作りました
- Ruby 2.3.1 + Rails 5.0.0.1
- 好きなエディタは Vimと RubyMine
- 好きなプリキュアは キュアピース
My profile
- 最近はペース落ちたけど社内外合わせるとだいたい月1個ペースでgemを新しく作ってる
- ググって見つからなければとりあえず作ってる
- 今回はrubygems.orgのダウンロード数が多い順に上からいくつか適当に紹介
- rspec-parameterized は他の人が作ったgemなので省略 1
rubicure
- プリキュアのRuby実装
- 他言語の実装は プリキュアの各言語での実装まとめ - Qiita を参照
よく分かるサンプル
よく分かる解説
プリキュアのタイトルを出力
puts Precure.maho_girls.title
#=> 魔法つかいプリキュア
Cure.xxxx
でインスタンスを取得
@mirai = Cure.miracle
puts @mirai.name
#=> 朝日奈みらい
キュアップ・ラパパ!で変身 2
自分自身が変化する破壊的メソッドなのでRubyの慣習に則ってメソッド名の末尾に !
がついています
@mirai.cure_up_rapapa! :diamond
# キュアップ・ラパパ! ダイヤ!
# ミラクル・マジカル・ジュエリーレ!
# ふたりの奇跡!キュアミラクル!
# 魔法つかいプリキュア!!
変身すると名前が変わります
puts @mirai.name
#=> キュアミラクル(ダイヤスタイル)
attack!
で必殺技を出します
敵を攻撃する破壊的メソッドなのでRubyの慣習に則ってメソッド名の末尾に !
がついています
@mirai.attack!
# リンクルステッキ!
# ダイヤ!永遠の輝きを私達の手に!
# フルフルリンクル!
# プリキュア・ダイヤモンド・エターナル!
humanize!
で人間に戻ります
自分自身が変化する破壊的メソッドなので(ry
@mirai.humanize!
puts @mirai.name
#=> 朝日奈みらい
魔法つかいプリキュアでは変身の時に使うリンクルストーンの種類によって別の形態に変身することができます
@mirai.cure_up_rapapa! :ruby
# キュアップ・ラパパ! ルビー!
# ミラクル・マジカル・ジュエリーレ!
# ふたりの奇跡!キュアミラクル!
# 魔法つかいプリキュア!!
puts @mirai.name
#=> キュアミラクル(ルビースタイル)
@mirai.attack!
# リンクルステッキ!
# ルビー!紅の情熱よ私達の手に!
# フルフルリンクル!
# プリキュア・ルビー・パッショナーレ!
paraduct
- paraduct = parallel(並行) + parameterize(パラメータ表記) + product(掛け算の積)
- JenkinsでTravis CI的なマトリクステストをやりたくて作った、
- 最近は Yaml Axis Plugin をメインで使ってる。(コアのコードもRubyからGroovyに移植)
- Werckerでitamaeプラグインのパラメタライズドテストをやるためにparaductを一瞬使ったが、Workflowが便利なのでそっちに寄せた
heart_seed
- xlsxをyamlに変換して、yamlを
db:seed
するためのgem - 最新バージョンのDL数が1500くらいなのでそこそこ使われてるっぽい感ある
- 詳しいこと:heart_seedというマスタデータDB投入用のgemを作りました - くりにっき
rspec-temp_dir
- テストコード中で一時ディレクトリを手軽に作るためのgem
- プロダクトコードでファイルを作ってるような場合に、出力先を
temp_dir
にしていればわざわざafter(:each)
でファイルを消す必要がなくなって便利 - 詳しいこと:rspec-temp_dir をリリースしました - くりにっき
fluent-plugin-out_chatwork
- ChatWorkに投稿するためのfluentプラグイン
- 雑にwebhookを受けて雑に通知するのにfluentdとtd-agentが便利だったので、GitLabのwebhookを社内のChatWorkに流すために作った
- 詳しいこと:fluentd初心者がgitlabとChatWorkを連携してみた - くりにっき
activerecord-simple_index_name
- Railsでデフォルトのindex名からテーブル名を抜いて短くするためのgem
- 詳しいこと:【今月のgem】activerecord-simple_index_name を作った - くりにっき
- 大元の実装は ActiveRecordのデフォルトのインデックス名が長いのが気になる - Qiita だけど、Rails 5対応で
prepend
使うようにした
Example
db/migration/create_user_stoks.rb
create_table :user_stocks do |t|
t.integer :user_id, null: false
t.integer :article_id, null: false
t.timestamps null: false
end
add_index :user_stocks, [:user_id, :article_id]
- activerecord-simple_index_name無し:
index_user_stocks_on_user_id_and_article_id
(43文字) - activerecord-simple_index_name有り:
user_id_and_article_id
(22文字)
index_shotgun
- 不要なインデックスを検出するためのgem
- 名前の由来は SQLアンチパターン
- pt-duplicate-key-checkerとだいたい一緒だけどactive_recordベースなのでMySQL以外でも使える
- MySQL, PostgreSQL, SQLite, Oracle対応
- 詳しいこと:index_shotgunを作った #omotesandorb - Qiita
- 最近だとビルドスクリプトに組み込んで、不要インデックスがあったらPullRequestの時点でビルドが失敗するようにしてる
- 面白い試みとして、Travis CIとWerckerを両方使ってる
- Travis CIだとOracleが使えない
- Oracleのインストールが超絶面倒くさいので、Oracleインストール済のDockerfileをWerckerで使ってる
One more thing
gem開発の知見はだいたいここに全部書いた
- gemを作る時に気をつけていること - くりにっき
- githubでgemを公開する時に使いたいバッジ - くりにっき
- gemの複数バージョンカジュアルテスト - くりにっき
- 社内gemとOSSのgemのメンテについて - くりにっき
- gemspecにRUBY_VERSIONによるif文書くのは意味がないので今すぐやめるべき - くりにっき