日常

ケ・セラ・セラ

Team Geek メモ

Team Geek

以下は印象に残ったあたりのメモ。

  • p8 隠したらダメになる

  • p15 三本柱 (HRT, heart, not hurt)

    • 謙虚 (Humility)
    • 尊敬 (Respect)
    • 信頼 (Trust)
  • p18 人間関係は確実にプロジェクトよりプロジェクトより長続きするものである。

  • p19 組織を自分の仕事に使うことを学べば、組織を自分の要求に合わせられるようになる。そうしなければ、宣戦布告なしの小さな戦争を人生をかけて日々戦うことになるだろう。

  • p23 過ちから学ぶには、失敗を文書化することである。我々の業界では、「ポストモーテム」を書くという。適切なポストモーテムには、学習した結果として何を学んだかと何を変更するかを記述する。書き終わったら見つけやすい場所に置いて、変更を継続できるようにする。

  • p24 優れたポストモーテムには以下のことが含まれる。

    • 概要
    • イベントのタイムライン (調査開始から解決に至るまで)
    • イベントの根本原因
    • 影響と損害の評価
    • すぐに問題を解決するための行動一式
    • 再発を防止するための行動一式
    • 学習した教訓
  • p35 自己選択的な文化

  • p71 アンチパターン: パフォーマンスの低い人を無視する

  • p73 アンチパターン: 人間の問題を無視する

  • p74 アンチパターン: みんなの友達になる

  • p74 アンチパターン: 採用を妥協する

  • p87 幸せを追い求める 「何か必要なものはある?」 ここで重要なのは、暗黙的な目標を明確化することである。

  • p99 チームの文化に含めないことについても議論すべきである。効率的で動きの早いチームを目指しているのであれば、やりたくないことも明確にしておいたほうがいい。

  • p145 プランB: 逃げる

rails new skip-いろいろ して react_on_rails を使おうとた場合に遭遇したあれこれ

これは整理して書いておこうと思ってもう2ヶ月経ってしまったものなので、この際ちらかったままに公開だけしておこうというメモです。

意気込んで、

rails new app --skip-action-cable --skip-action-mailer --skip-bundle --skip-javascript --skip-listen --skip-puma --skip-spring --skip-test --skip-turbolinks

などどして react_on_rails を使い始めようとした際に得た知見です。 react_on_rails をまっとうに使っている記事はもう色々あるので、 こういうの公開しておく意味はありそうかなと思ったのでした。

gist.github.com

RailsでRuby2.4のHash#compactを使うp-rがある

読みました。短くまとめます。

これがマージされると、Ruby 2.4 で加わる Hash#compact / Hash#compact! を Rails でも使うようになる。

Hash#compact が無い環境では、従来どおり activesupport 版を使うような変更ですね。

# activesupport/lib/active_support/core_ext/hash/compact.rb

+  unless Hash.instance_methods(false).include?(:compact)
+    # Returns a hash with non +nil+ values.
+    #
+    #   hash = { a: true, b: false, c: nil }
+    #   hash.compact        # => { a: true, b: false }
+    #   hash                # => { a: true, b: false, c: nil }
+    #   { c: nil }.compact  # => {}
+    #   { c: true }.compact # => { c: true }
+    def compact
+      select { |_, value| !value.nil? }
+    end

Ruby 2.4 の Hash#compact #compact! は C 実装です。ActiveSupport 版に比べて速くなるでしょう。

yaml_checker という Gem を作りました

github.com

https://rubygems.org/gems/yaml_checker

ファイル名かディレクトリを指定すると、.yml / .yaml 拡張子のファイルのみ YAML.load_file して回って、例外を起こしたものをまとめて標準出力する。というやつです。

$ yaml_checker path/to/directory
$ yaml_checker path/to/directory/foo.yml
$ yaml_checker path/to/directory/bar.yaml

invalid なファイルを含む時の様子です。

$ yaml_checker examples/
(/path/to/examples/dir1/dir2/invalid.yml): did not find expected key while parsing a block mapping at line 1 column 3
(/path/to/examples/dir1/invalid.yml): did not find expected key while parsing a block mapping at line 1 column 3
(/path/to/examples/invalid.yml): did not find expected key while parsing a block mapping at line 1 column 3
(/path/to/examples/dir1/dir2/invalid.yaml): did not find expected key while parsing a block mapping at line 1 column 3
(/path/to/examples/dir1/invalid.yaml): did not find expected key while parsing a block mapping at line 1 column 3
(/path/to/examples/invalid.yaml): did not find expected key while parsing a block mapping at line 1 column 3

もう少し機能的に色々考えていて書き始めたのですが、とりあえずこれだけあればいいかという気持ちになってきて公開しました。必要が生じたらまたという気持ちです。

capybara, poltergeist, phantomjs で js: true なテストをする

save_and_open_page や save_screenshot する場合には、 html の charset が設定されていないと日本語が文字化けてしまいました。 そういう場合には書きましょう。

<meta charset="UTF-8" />

まず install phantomjs (Ubuntu での例です)

$ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
$ sudo cp -ip phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
$ phantomjs --version
2.1.1

Gemfile

group :test do
  gem "capybara"
  gem "launchy" # save_and_open_page するなら
  gem "poltergeist"
end

rails_helper.rb

require "capybara/poltergeist"
Capybara.javascript_driver = :poltergeist

sample feature spec

# sample_spec.rb
require "rails_helper"
RSpec.describe "Sample", :type => :feature do
  before do
    visit foo_path
  end

  feature "bar" do
    senario "baz", js: true do
      click_link "baz"

      # target: "_blank" な場合は別 window になる
      within_window(switch_to_window(windows.last)) do
        expect(current_path).to eq("/foo/bar/baz")
        expect(page).to have_content "some content"

        # save_page("save.html")
        # save_and_open_page
        save_screenshot "screenshot-#{DateTime.now}.png"
        # 全画面とりたい場合は full: true で
        save_screenshot("screenshot-#{DateTime.now}.png", full: true)
      end
    end
  end
end

save_and_open_page で js, css も反映されたい場合、 assets が localhost で完結している場合には別途 rails s しておいて、 rails_helper.rb などに以下の様に設定しておくというのが簡単かなあと思いました。

Capybara.asset_host = "http://localhost:3000"