現在過去あまりやったことがない感じでTDDライクな開発をしているんですが、すごい不安材料の消しやすさが楽。
いままでは
みたいな流れが基本だったんで、大きい機能とかになると壊れている場所の把握がめっちゃ大変だったんですが、テストを書くことによって小さい粒度でテストを書くのですごい楽。なんとなくテスト書く人たちが言う「テスト書かないと怖くてプログラム書けない」ってのはこういう感覚なのかなって感じです。
お休みの日なのでたまにはこんな感じの記事も。現場からは以上です。
MySQLの出力結果を非エンジニアに渡すときなどはExcelなどにはると思うのですがそういうときの話。
意外と知らない人は知らないのでメモがてら。
MySQLの出力結果をテキストエディタなどに貼り付けて |
を \t
(タブ文字)に変換する。
Excel(もしくはスプレッドシート)は以下の性質を持っている
この性質があるため、列の区切りをタブに変換するとすんなり貼れる。
『users
テーブルの最新10件の作成日と更新日をスプレッドシートで欲しい』みたいなとき
mysql> SELECT id,created_at,updated_at FROM users order by ID DESC LIMIT 10; +-----+---------------------+---------------------+ | id | created_at | updated_at | +-----+---------------------+---------------------+ | 233 | 2017-12-18 03:19:23 | 2017-12-18 03:19:23 | | 232 | 2017-12-18 03:18:45 | 2017-12-18 03:19:05 | | 231 | 2017-12-18 02:01:15 | 2017-12-18 02:01:49 | | 230 | 2017-11-29 08:38:25 | 2017-11-29 08:42:56 | | 229 | 2017-10-06 05:52:32 | 2018-04-24 12:37:47 | | 228 | 2017-10-03 03:56:23 | 2017-10-03 03:58:22 | | 227 | 2017-10-03 03:52:20 | 2017-10-03 03:52:20 | | 226 | 2017-10-02 04:02:05 | 2017-10-03 04:04:57 | | 225 | 2017-09-28 09:24:02 | 2017-09-28 09:24:48 | | 224 | 2017-09-25 23:06:23 | 2017-09-25 23:09:28 | +-----+---------------------+---------------------+ 10 rows in set (0.00 sec)
こんなデータがあるとしたときに、|
を \t
に変換する
233 2017-12-18 03:19:23 2017-12-18 03:19:23 232 2017-12-18 03:18:45 2017-12-18 03:19:05 231 2017-12-18 02:01:15 2017-12-18 02:01:49 230 2017-11-29 08:38:25 2017-11-29 08:42:56 229 2017-10-06 05:52:32 2018-04-24 12:37:47 228 2017-10-03 03:56:23 2017-10-03 03:58:22 227 2017-10-03 03:52:20 2017-10-03 03:52:20 226 2017-10-02 04:02:05 2017-10-03 04:04:57 225 2017-09-28 09:24:02 2017-09-28 09:24:48 224 2017-09-25 23:06:23 2017-09-25 23:09:28
これを貼り付けるといい感じに並んでくれる
あとは体裁を整えて完成
実はTimecopはいらなくなったという話題の実践編
rails (5.1.5) rspec (3.7.0)
rails_helper.rbのお好みのところに追加
RSpec.configure do |config| # 中略 config.include ActiveSupport::Testing::TimeHelpers end
travel_to
で囲む
context "現在時刻かどうかは" do it "こんな感じでテストをかく" do travel_to('2018-3-10 8:00'.to_time) do expect(Time.zone.now).to eq(Time.new(2018, 3, 10, 8, 0, 0)) end end end
around
をつかうと、複数のitにも対応できるのでそちらも便利。
context "現在時刻かどうか確認" do around do |e| travel_to('2018-3-10 8:00'.to_time) {e.run} end it "日付が同じ" do expect(Time.zone.now).to eq(Time.new(2018, 3, 10, 8, 0, 0)) end it "異なる日付である" do expect(Time.zone.now).not_to eq(Time.new(2018, 4, 10, 8, 0, 0)) end end
絶対継承後のクラスは実装しろ!!!いいな!!!
みたいなJavaでいうところのInterfaceみたいなものを実装したいとき
NotImplementedError
をraiseする▼親クラス
class Oya def say NotImplementedError end def has_a_method # 共通で使うメソッドはそのまま実装 return "共通で使うメソッドだよ" end end
▼子クラス
class Ko < Oya def say p "私は" + has_a_method end end
Sorcery とか使っていると 『アクティベーションのユーザ』 みたいなオブジェクトが欲しくなるのでそういうのの書き方
rails (5.1.5) factory_bot (4.8.2) factory_bot_rails (4.8.2)
after(:create)
のコールバックを活用する
Sorceryを交えた例
factory :user do # なんかuserのデフォルト定義 # アクティベーション済 factory :user_with_activated do after(:create) do |user| # Userのインスタンスメソッドである activate! を実行 user.activate! end end end
やり方が全然書かれていない、いやシェル界ではよくある話なのかもしれないが…
$ docker --version Docker version 18.03.1-ce, build 9ee9f40 $ docker-compose --version docker-compose version 1.21.1, build 5a3f1a3
2回指定するだけ。
docker-compose build --build-arg {{引数名その1}}={{引数値その1}} --build-arg {{引数名その2}}={{引数値その2}}