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

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…

同一モデルへの関連に対するdependentオプション

いつ書いたのか忘れたけど、下書きに書いてあったので公開 次のように、同じモデルに対してdependent: :destroyを設定してしまうと、もとのモデルを削除したときに二重にDELETEが発行されてしまう class User < ApplicationRecord has_one :latest_post, -> …

capybaraでunicornを使うときの注意事項

capybaraで利用するテストサーバは変更可能 デフォルトだとwebrickだったはず? (追記)capybara3からpumaになっていた capybara/UPGRADING.md at master · teamcapybara/capybara Railsのsystem testだとpuma unicornをproductionで使っているのであれば、un…

るりま編集方法のメモ

プログラミング言語 Ruby リファレンスマニュアルでリンク切れが見つかったので、PRしようと思って調べたことのメモ。 内容はGitHubで管理されているrurema/doctree: Repository of Japanese Ruby reference manual 普通にPRだせばよいみたい wikiに古い記事…

Font Awesome5をRailsアプリケーションに導入した

Font Awesomeのバージョンが5になって、有料版と無料版の二パターンになった。 4.7.0だと675アイコン 5.0.6(無料版)だと929アイコン 5.0.6(有料版)だと2316アイコン(無料版のアイコン含む) Font Awesomeお世話になっているし、アイコン多いほうが嬉しいので…

prmdを利用して空のレスポンスを表現する

prmdで生成されるドキュメントは、Response Exampleが自動的に生成されて便利。 しかし、何かを作成するときや何かを削除するときなど、レスポンスボディがなくても問題ないことを表すのが面倒。 prmd/link.md.erb at 928d9cb1c0fa1163bab5f3cb43c81eed4a147…

続、Railsのきれいなコードについて議論する勉強会

Railsのきれいなコードについて議論する勉強会の話の続き。 とりあえずお題を集めてみようと思い、GitHub上にclean-rails-jaというorganizationを作りました*1。下記のIssueで議論のお題になりそうな案を募集しています。 「こういうとき、いつもどうしたら…

Railsのきれいなコードについて議論する勉強会

Railsアプリで「こういう時、どう実装するのが綺麗なのか?」みたいな現実感ある事例を各自が持ち寄って、それに対する意見を出す場というか、そんなの。nested_attributes_for、bulk_insert、複雑なview、非同期処理をどこに書くの?的な。— 神速 (@sinsoku…

ActionCableでセッションを使う

(追記)ちょっと自信なくなってきた(スタンドアロン版だとちょっと違うのでは?という気がしてきた)ので今度時間のあるときに調べます Rails Guidesを読むと、Action Cableはセッション使えないと書いてあるのだけど、よくよく考えるとAction Cable はRailsの…

webpacker3のコードをざっと読んだ

webpacker3は、「2から導入されたテスト環境でのlazy compileが開発環境にも入り、webpack-dev-serverの起動が必須ではなくなった」「デフォルト設定類がnpmのパッケージ側に寄せられた」くらいの認識だったのだけど、コード見るとどうやらそれ以外の変更も…

headless chromeをdockerで動かすときに注意する点

前提 Google Chrome 61.0.3163.100 chromedriver 2.3.1 Docker 17.03.1-ce docker-compose 1.11.2 注意点 dockerがデフォルトで利用しているseccompの設定だとheadless chromeが動かない seccompを変更することはできる dockerコマンドのオプションでseccomp…

webpacker2から3へアップグレード

だいたい次のような感じで行けるはず(実際は試行錯誤したのでこの通りにはやっていない)。設定ファイルやpackage.jsonに記載されるpackageなどがだいぶ減った。 bundle update webpacker config/webpack 配下を全部消す package.jsonを消す yarn.lockを消す …

Redashをherokuでホスティングする

モチベーション Redashを楽に安くホスティングしたい 以前はherokuでのホスティングをサポートしていたけど、現在はサポートなし しかしDockerでのホスティングをサポートしているようなので、DockerイメージをherokuにpushしてしまえばherokuでもRedash使え…

puma-devとwebpackerを使ってHTTPSで開発する

OneSignalを利用してブラウザPush通知機能を追加した際に、HTTPSでのみ使用する前提のJSライブラリを入れたのが原因で、開発環境でもHTTPSを利用する必要が出た。 前提として、 Mac OSX puma-dev webpacker を利用している。puma-devはHTTPSに対応していて、…

jquery-ujsからrails-ujsへの移行で気をつけること

jquery-ujsからrails-ujsの移行、特に気をつけることないと思ってたけどajax:successなどのイベントのコールバックに渡される引数が違うな— willnet (@netwillnet) 2017年7月15日 jquery-ujs だと data, status, xhr rails-ujs だと event だけ レスポンスの…

2017年にruby1.8.6をビルドする

ruby 1.8.6を使ってみようと思い、mac sierraでビルドしてみようとしましたがだいぶハマりました。 まずは公式のgccを使わないといけないと怒られる。指示の通り入れようとするともうそんなのないと言われる。こちらのブログを参考に無理やり入れてみようと…

会社設立支援系のサービスは便利だけどまだまだなところもあるという話

株式会社ウィルネットを設立した - おもしろwebサービス開発日記の関連エントリ。作る過程のメモ書きです。 僕は普段の記帳にMFクラウド会計を使っていたので、まず関連サービスであるMFクラウド創業支援サービスを試しました。正確にはMFクラウド創業支援サ…