お使いのブラウザはサポート対象外です。

2021/09/21 の日報

1

puma 5.5.0で、開発中にhttpsを使うのが簡単になったっぽい

  • Automatic SSL certificate provisioning for localhost by ye-lin-aung · Pull Request #2610 · puma/puma
  • localhostというgemと連携して、開発用の証明書を生成してpumaでそれをつかう、というのができるらしい
  • いまサバンナは証明書用にnginxコンテナをpumaの前段に配置しているんだけど、これをうまく使えばnginxコンテナをなくせるのかな…
  • ざっと見た感じlocalhost以外のホスト名でもできるっぽいしいけそうな雰囲気ある

TurboでCSPが使いやすくなった

Server Timing 用のmiddlewareがはいった

【Rails】Bundler 2.2.x以降は開発者が適切なプラットフォームを追加する必要がある - AUTOVICE

  • 自作のgemにGitHub Actionsでテスト実行しようとしたらbundle lock --add-platform x86_64-linuxしろ、と言われたので調べた
  • bundle lockそのものはインストール無しでGemfile.lockを更新するためのコマンド
  • --add-platformに関してはざっと検索しただけでは↑くらいしか情報がない
  • 想定しているプラットフォームがGemfile.lockに書かれていて、そこに書いてある場所以外は対応していないぞ、というのがわかるので便利、ということなのだろうけどあんまりこれで嬉しい感じがしないな

2021/09/19 の日報

1

Fix update & destroy queries when default_scope is nillable with all_… by nvasilevski · Pull Request #42517 · rails/rails

  • いつのまにdefault_scopeにall_queriesオプション追加されたんだっけ…
  • 7.0っぽいが
  • あとで調べる

Let's encryptの期限切れ通知メール

  • 30日前から何度か送ってくる認識だったのだけど、今回は前日の通知だった
  • 案の定メールをスルーしていたので外形監視のエラーで証明書の期限切れに気づいた
    • 外形監視しておいてよかった
  • そもそも自動で更新できるようにしておきたいが時間がないのであった…
  • ちなみにサバンナの話ではないです
    • サバンナはherokuにすべてを任せているので楽

Suggest Kredis + bcrypt as long as we're not minimal · rails/rails@5d9ee65

  • kredisとbcryptが準デフォルト(rails newするとコメントアウトされた状態でGemfileにはいっている)になった
  • これでkredis使う人増えるかもなー

2021/09/17 の日報

5

ツイートの埋め込みもできるようになりました(\( ⁰⊖⁰)/)

2021/09/17 の日報

5

シンタックスハイライト入りました

class Hello
  def world
    puts "どうぞご利用ください(\\( ⁰⊖⁰)/)"
  end
end

2021/09/07 の日報

3

memory_profilerでメモリ割当のボトルネックを計測する(のは難しい)

2021/08/23 の日報

3

[サバンナ開発]古いブラウザに対するjsはES5で書かねばならぬ

  • それはそう、という話なんだけどね
  • IE11などの未対応ブラウザへの通知をするためのjsをES6で書いていたので動かなかった
    • 確認はchromeでUAを変更して実施していたので気づかなかった…><
  • そもそもjs書かないで対応する(サーバ側でUAみてHTML出し分ける)のが一番いい気がしたけど面倒だったのでES5化で対応した
  • 見たことない人向けにスクショ置いておきます。古いブラウザでアクセスすると下のようなサバオの矢バージョン(通称ヤバオ)が見れます

image.png

2021/08/13 の日報

2

Reactハンズオンラーニング

  • ちょっとずつ読む
  • 最初はjsについてなので飛ばした
    • 4章と5章をざっと読んだぞ
  • ReactとReactDOMというライブラリがある
    • Reactはビューを構築する
    • ReactDOMはReactで作ったビューをブラウザで描画するライブラリ
      • たぶんReactDOMをReactNativeなどに差し替えて使うことでいろんなデバイスでReactが使えるぞ、ということにしているのだと思う
  • React.createElement("h1", { id: "recippe-0" }, "Baked Salmon")
    • 引数はそれぞれ type, props, child になる
    • typeに関数を渡すことができる
      • つまりコンポーネント=関数
  • ReactDOM.render(↑で作ったReactElement, マウントするDOM要素)でレンダリングができる
    • 第一引数は配列でも ok_woman
    • 第三引数以降、第四引数、5、6…と続いても良さそう
      • それぞれ子要素として扱われる
      • 第三引数が配列である、という状況も ok_woman
        • しかし、そのときはkeyプロパティがないとダメ
          • 要素の更新を管理するためにkeyが必要
  • JSXで{}は文字列リテラル以外のJavaScript式を入れるときに使う 
  • babelはブラウザで読み込んで使うこともできる
    • <script type="text/babel">の中にbabelで解釈したいコードを書く
    • あくまで開発用途で、プロダクションはコンパイルするのが普通
  • <Recipe key={i} {...recipe} /> のような...はJSX用の特別な記法

2021/08/12 の日報

2

Stop trying to configure listen by default on compatible platforms by dhh · Pull Request #42985 · rails/rails

  • 今どきのマシンならlisten gemなしで、普通にポーリングするのでもパフォーマンスに大した違いがない、とのこと
  • 本当かなあ。ベンチとりたい

2021/08/11 の日報

3

Output Action Cable JS without transpiling and as ESM by dhh · Pull Request #42856 · rails/rails

  • DHHがwebpackなしでAction Cable使えるようにjsを整備している、というのにどういう狙いがあってそうやってるんだろ、となっている

2021/08/10 の日報

2

Add Marginalia to Rails, via QueryLogs by keeran · Pull Request #42240 · rails/rails

  • SQLにどのコントローラのどのアクションから実行されたやつなのかコメントに残すMarginaliaというbasecamp製gemがあるのだけどこれがRails本体に入った
  • slow query logなどを見るときにめっちゃ便利

Merge pull request #42061 from kddnewton/ar-in-order-of · rails/rails@14540a5

  • orderで順番指定できるようになった
  • mysqlだとfield()でそれ以外だと↓のようにcaseが使われる
    SELECT "posts".* FROM "posts" ORDER BY CASE "posts"."id" WHEN 3 THEN 1 WHEN 5 THEN 2 WHEN 1 THEN 3 ELSE 4 END ASC

Merge pull request #41841 from kddnewton/structurally-compatible · rails/rails@21f9db1

  • andやorを使うにはレシーバと引数の構造が同じ必要がある
  • ActiveRecord::Relation#structurally_compatible?で構造が同じかどうかチェックできる
  • 便利に使うケースがまれにありそう

STIを使うと良いケースの具体例

  • STIは使わないほうが良い、という声も多いけど、個人的にはマッチするケースもあると思う
  • しかし人に説明するときに「マッチするケースもある」では弱い
  • https://www.slideshare.net/YuyaTaki/sti-87083980 はまあまあ良いSTIの使い方
    • 事業所ごとに別々のバリデーションを使いたい
  • もうちょっと一般化すると、enumのような形で実質複数のtypeに分かれているモデルで使うと良い
    • かつ、enumの場合分けによって振る舞い(ex: validationやメソッドの実装)を変えている場合
  • という説明で伝わるかな…