default gemとrubygems.orgから取得するgemの違い

default gemとは、standard librariesとdefault gemsとbundled gemsの違い - esm アジャイル事業部 開発者ブログが詳しい default gemはrubyがビルドされるときに一緒にビルドされており、rubygems.orgで配布しているものと同じバージョンを指していてもコー…

Rails7でシステムテスト失敗時のスクショが保存されるディレクトリが変わる

Rails7未満でスクショが保存される先は"tmp/screenshots"配下固定だった。 このコミットでスクショ保存のディレクトリの設定が変更になって、「Capybara.save_pathがあればそれを優先して使う」になった。 require 'capybara/rails'すると Rails.root.join('…

Tower Git Clientでgitのhookを動かす

gitの操作にTower Git Clientを使っています 一部の行を選択してstagingしたり、コミットを移動させたりsquashしたりするのがCLIより楽 が、PATHの設定がないのでhuskyなどを使っているとコミット時にエラーになりコミットできない、ということがあってスト…

LeanとDevOpsの科学を読んだ

LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する impress top gearシリーズ | Nicole Forsgren Ph.D., Jez Humble, Gene Kim, 武舎広幸, 武舎るみ | 工学 | Kindleストア | Amazon 1章をざっと読んで、2,3章はほとんど飛ば…

ディスプレイをどう配置するのがベストかPart2

ディスプレイをどう配置するのがベストか - おもしろwebサービス開発日記チラシの裏 の続き。 この記事をもとに色んな人に聞いたところ、縦 * 2の構成でも、zoomやgoogle meetの共有をウィンドウ単位にすればよい、という意見がありました。実際に試してみて…

ディスプレイをどう配置するのがベストか

今はLGの27インチのディスプレイを二台、一台を縦に、一台を横にして運用しています。 昔は二台縦にしていたのですが、最近google meetやzoomなどで画面共有する事が増えたので、横にしておいたほうが参加者に優しいぞ、というのと横幅が広いことが前提とし…

docker-compose runでbashを起動したら何故かctrl-hなどのコマンドが期待通りに動かなくなった

最近のdocker for macのバージョンアップで入力周りなにか変わりました?ctrl-bなどの入力が期待通りにならなくなったんだけど…— willnet (@netwillnet) July 22, 2021 docker-composeの2系にいつの間にか切り替わったのが原因だったようです。docker-compos…

docker環境でシステムテストを途中で止めてブラウザで画面を確認する

savanna日報から改変してブログに書く試み ref: slackのhuddle良さそう - savanna.io Railsがdocker環境でなければheadlessではないchromeを使うのが楽 Railsがdocker環境であれば、remote debuggingを有効にする remote-debugging-port=9222 remote-debuggi…

脆弱性情報をどこまでどうやって共有するのが良いのか

脆弱性が見つかって、対応パッチが入ったgemの新しいバージョンがリリースされるということはよくあります。そういうときに僕は内容を把握して「こういう脆弱性があるので早くバージョン上げましょうね」と各お手伝い先に共有しています。 各お手伝い先にと…

n_plus_one_controlはrequest specで使うのが良いという話とrequest specでログイン後のリクエストを投げるための方法について

savanna.io の日報からの転載。ちゃんと整形したり説明詳しく入れてメインのブログで公開しようと思ってたんだけど時間がなさすぎた palkan/n_plus_one_control: RSpec and Minitest matchers to prevent N+1 queries problem N+1をテストで検出できて便利 …

type="date"なフォームをcapybara+chromeでテストするには

type="date"なフォームは現時点ではsafari以外のブラウザはカレンダーっぽい入力に対応している (追記)safariの14.1からカレンダーっぽい入力対応になった - HTML: HyperText Markup Language | MDN こんな感じになる 入力もtype="text"のときとは違うようで…

GitHubのiosアプリケーション

子供の隙をついてレビューを進めたい時など便利に使えているのだけど、ちょっと複雑なPRだと次のように内容が表示されずに辛い。早く対応して欲しいぞ

Docker環境でRubymineを使う

Rubymineはコードジャンプがべんり gemのソースコードにもサッとジャンプできる しかしDockerで開発していると、gemのコードはコンテナの中なのでそのままだとジャンプできない これまではやむを得ずホスト側でbundle installとかしてたけど、設定でコンテナ…

USキーボード環境で英数キーを⌘+スペースに割り当てた

ずっと左コマンドを単体で押したときに英数、右コマンドを単体で押したときにかなとしていたけど、左コマンドキーを押してすぐキーをタイプするとミスってタブを閉じてしまったりなどすることがよくあった。 我慢して使っていたのだけど、だれかのツイートで…

家のインターネット環境を安定させた

自宅で作業するのが増えた結果、インターネットが遅くなったり、ルーターとの接続が切れたりするのに気づくことが増えた。ので設定を変更してなんとかしたぞというメモ 前提 niftyのv6プラスを利用済み ルータの近くだと20~30Mbpsくらいでる v6プラス以前は1…

Railsのbelongs_toによるバリデーションと外部キー制約って重複しているような気がする

表題のとおりなのですが。 class Post < ApplicationRecord belongs_to :user end ↑のように書いたときに、Rails5からは自動でvalidation_presence_of :userとしたのと同じになります。postをバリデーションするときにuserの存在をチェックする必要があるの…

Rails 6時代のCredentailsをどうやって書くのが一番スマートなのか

Rails6ではcredentials.yml.encが複数の環境で作れるようになりました*1。staging環境などでもCredentialsが使えてべんり!となったのだけどdevelopment環境やtest環境の秘密の文字列はどのようにするべきなのでしょうか。たぶんRails公式ではこういう書き方…

実行時間が長いコマンドが終了したら教えてほしい

macの話。 実行時間が長いコマンドを走らせて待っている間に他のことを始めてしまい、いつのまにかコマンドを実行していることそのものを忘れてしまう、という事が多かったので、終わったら通知が来るといいな、と思ったのでした。 調べたらapple script経由…

webpackerでデフォルト以外のenvironmentを使いたい場合

"environment"が指すものがRAILS_ENVとNODE_ENVの2つあり、かつwebpackerはその両方を利用するのでわかりづらい。 config/webpacker.yml RAILS_ENVに対応したキーの設定を使う config/webpack/*.js NODE_ENVに対応したキーのファイルを使う。のだけど注意点…

SentryやRollbarに通知する内容を2つに分けたい

Railsプロジェクトでエラーの管理をするとき、SentryかRollbarを使うことが多いはず(以下エラー管理システムと呼ぶ) エラー管理システムには、システムでの想定外の挙動を通知させたい 「システムでの想定外の挙動」を分けるとおおきく次の2つ いわゆるバグ …

循環参照してるときのsaveにおけるActive Recordの挙動

class A < ApplicationRecord belongs_to :b end class B < ApplicationRecord belongs_to :a end a = A.new b = B.new a.b = b b.a = a a.save みたいなときどのように動くのかを調べた。 ↓このへんを参考にした rails/autosave_association.rb at master ·…

system specでNet::ReadTimeoutになったら

headless chromeを利用していて、超長い文章をフォームに入力しようとするとNet::ReadTimeoutでこける。そもそも超長い文章をフォームに入れないようにするべきだけど、他に方法がない*1か微妙な場合はtimeoutの間隔を伸ばすことで対応できる。 Capybara.reg…

時々失敗するE2Eテストの原因を計測して判別する方法について

Railsをお仕事で使っている方はみんなE2Eのテストで時々失敗するやつに苦労しているんじゃないかなと思います。 @mtsmfmさんの発表スライドが詳しいので基本的にはこれで大体のケースには対応できるはず。 スライド読むのがめんどくさい人向けに、一部抜粋か…

turbolinks環境でCSPを導入しようとしたらテストがコケた

CSPを導入しようとして、まず様子見でcontent_security_policy_report_only = trueとしていろいろ試していたらテストが落ちるようになった。content_security_policy_report_only = trueだとjsやcssは普通に適用されるはずなのにおかしい。 落ちているテスト…

resize_to_fitオプションはどこからきたのか

Railsのmasterのコードを読んでいて、コメント行でvariantメソッドにresize_to_fitオプションを渡しているのが目についた。 rails/variant.rb at master · rails/rails というのは、ImageMagickのオプションにresize_to_fitに相当するものがなかったから。mi…

mailcatcherとletter_opener_webの使い分け

letter_openerをよく使います。ローカルの開発環境でメールが送信されたらブラウザのタブが新しく開き、メールが送信されたことがすぐにわかる。べんり。 しかし、最近Docker環境で開発することが増えたので、自動でホストマシンのブラウザタブを開くことが…

ajaxでHTMLをリクエストするタイプの設計のときに、メタ情報もうまく受け取りたい

Railsアプリケーションを書くときに、turbolinksやstimulusなどを使い、なるべくサーバサイドはHTMLを返してjsをあまり書かずに楽をする、という方針でいくとします。このように割り切るとだいぶ楽なのですが、例えば次のようなケースで悩みます。 コメント…

macで/etc/hostsに定義を追加するときの注意点

開発用に、127.0.0.1に解決されるドメインを/etc/hostsに登録する、ということはそれなりにあると思います。 そのときに、次のように複数行に分けて書くとなぜか example.com へのDNS lookupがめちゃくちゃ遅くなります。自分の環境ではだいたい5秒ほどかか…

OmniAuthでログインを失敗したときのテストでエラーが出たときの対処法

OmniAuthを利用したログインのsystem specで、ログインに失敗した場合のテストが次のようなエラーになった。 1) ユーザがログインする ログインに失敗したとき "ログインに失敗しました"と表示されること Failure/Error: click_link 'Twitterでログイン' Omn…

Turbolinks5でPOSTするときはajax経由のほうが良いのかも

Turbolinks5になってから「フォームでバリデーションエラーになったあとその画面をリロードしたときの挙動がTurbolinksを利用していないときと異なる」という問題がある。 2年半くらい前からIssueが立っている Turbolinks doesn't recognize form re-submiss…