2020-06-01から1ヶ月間の記事一覧
今月のエントリのうちめぼしいものを振り返りながら挙げていく。 Rails を絶対視しないこと “Rails is omakase” とか “The Rails Way” とかいうキャッチフレーズを盲信してしまう傾向を見つめ直して、少しずつそこから脱却しなければいけないと思い始めてい…
Hanami に触ってみたことを動機として、『クリーン・アーキテクチャ』を再読した。 たぶんに漏れず、例の同心円の図ばかり印象深く記憶していたが、改めて精読してみると、この図にはごく軽くしか触れられない。むしろ繰り返し主張され、議論の中心を占める…
昨日の記事で、 secure_compare は String#== とは異なり常に一定時間で処理が行われる、と書いた。 jnsato.hateblo.jp あらためて GitHub Developer から引用する。 Using a plain == operator is not advised. A method like secure_compare performs a "c…
Hanami と Sinatra の CSRF 対策のコードで、いずれも Rack::Utils.secure_compare という API を利用していることを発見した。何が secure なのだろうか? という思いがあり、読んでみた。 def secure_compare(a, b) return false unless a.bytesize == b.b…
素の HTML form では GET と POST リクエストしか送信できない。PUT, PATCH, DELETE のような HTTP メソッドをリクエストするには、サーバーサイドで適当に解釈してあげる必要がある。 例えば Rails の場合、 form_with ヘルパーで編集画面の form タグを生…
CSRF 対策がフレームワークでどう行われるかを読み比べていた。せっかくなので簡単にまとめることにする。 TL;DR 対応するクラス/モジュール 不正時の挙動 トークン Sinatra v2.0.8 Rack::Protection::AuthenticityToken [source] 403 base64 Rails v6.0.3 A…
Rails のちょっとした機能を検証するとする。そんなとき、まずはなにからやるか? 今日の僕自身はと言うと、 Dockerfile を作るところから始めていた...。 改めていうまでもないことだが、自戒を込めて書く。愚の骨頂であった。ほんのちょっとした検証にわざ…
いわゆる「何もしていないのに壊れた」という状況に陥った。 症状としては、 Hanami アプリのデプロイにおける rake assets:precompile タスクの実行時に、 uninitialized constant Bundler とはねつけられてしまう。スタックトレースによると ここ でコケて…
iOS の設定で Safari の Cookie 機能を無効化することができる。 support.apple.com 普段 Safari を使うことは多くないのでそう意識していなかったが、僕自身はこれを有効化していた。で、これを有効化していると、当然 Cookie を利用したセッション管理を利…
AWS の個人アカウントに監査の仕組みを導入している。そのきっかけについては以前に書いた。 jnsato.hateblo.jp CIS AWS Foundations Benchmark を導入し、対応可能なセキュリティ対策を一通り有効化している。違反があれば AWS Chatbot 経由で Slack に通知…
AtCoderの過去問より、この問題を解いていた。 atcoder.jp やりたいこと 任意の数列を、空の配列の先頭と末尾に交互に追加していきたい。Ruby であれば、これは Array#unshift と Array#push を使って簡単に書ける。例えばこう。 n = 10 ans = [] 1.upto(n) …
ActiveSupport はきめ細かく require できる ということを学んだのが昨日。とはいえ、それでもやはりためらいはある。 次に示すのは ActiveSupport が依存するモジュールである。 % gem dep activesupport Gem activesupport-6.0.3.1 concurrent-ruby (~> 1.…
hanami を利用した開発への所感 にて、こう書いた。 タイムスタンプを「○日前」と文字列に変換するだけのために、 ActiveSupport を丸ごと取り込むのは、理にかなった判断とは言えまい。 断定してしまっているが、実はよく調べないまま印象で語ってしまって…
DateTime クラスのドキュメントを読んでいた。 ほんの小さな好奇心で調べ始めたものだったが、世界文学のふたりの巨匠の命日を引き合いに出して暦の問題を鮮やかに示す文章に興奮させられて、つい読み込んでしまった。それはこんな例である。 shakespeare = …
Hanami で小さな開発をやってみた。 jnsato.hateblo.jp 単機能のウェブページに過ぎず、 Rails であれば1日でできただろうと思う。 hanami の機能や API を追いかけながらの実装だったので、やや時間はかかった。とはいえ、それでもファースト・コミットから…
1週間ばかり、 hanami による開発に取り組んでいた。動機付けを描写したのは以下のエントリ。 jnsato.hateblo.jp jnsato.hateblo.jp そして、作ってみたものがこちら。 heroku の無料 dyno にデプロイしている。 hanami-news.herokuapp.com ブックマーク管理…
sqlite を pg アダプタに付け替えていた。一通り設定を終えて、開発サーバーを立ててみると、こんなエラーが発生した。Ruby 2.7 + hanami 1.3.3 + pg 1.2.3 で再現するはず。 undefined method `new' for class `#<Class:BigDecimal>' bigdecimal とは標準ライブラリで、 Ruby </class:bigdecimal>…
hanami new コマンドは application_layout_spec.rb を自動生成し、レイアウトクラスの単体テストのボイラープレートを用意してくれる。しかし実はこれは private API に依存しているとのこと。 github.com 具体的なエラー発生ケースはこう。まずこれが自動…
hanami にセッション管理を導入しようとしている。デフォルトでは Rack::Session::Cookie を使って cookie にセッションキーを格納する ことになっている。ちょうど先日、 Real World HTTP を読んで cookie の仕組みを復習したところだったので、 Rack がそ…
認証系の機能を持った gem を調べていた。見ていると多くの gem がパスワードのハッシュ化を BCrypt で実装している。きっと BCrypt ならば安心という一般的な合意があるのだろうとだけ推測して、あまり深入りはしなかった。 これだけであればただのつぶやき…
この記事を読んだ。 gigaom.com 要約する。 インド洋チャゴス諸島。モーリシャスの西に位置し、アフリカから奴隷を入植させて発展した島々は、奴隷解放を経て、1960年代までにはココナッツ農園を軸とした経済と、それに携わる島民の暮らしがあった。 冷戦構…
表題通り、公式ガイドが提供しているハンズオンをやってみた。 guides.hanamirb.org 書かれていることをひととおりなぞったに過ぎなく、批評的に何かを語ることはまだできないけれど、アークテクチャの単純明快な美しさには心を揺さぶられた。明確な責務を与…
自分の軸となる技術としての Ruby をさらに磨きたいという気持ちが強まっている。なにせ時間だけはあるから、これまでなかなか取り組めていなかったテーマに腰を据えて組み合ってみようかと思っている。 で、やりたいこともそれはそれでいくつかあるのだが、…
Ruby と Rails は明らかに自分の軸となる技術だ。そもそもこれらとの出会いがなければ僕はエンジニアになっていなかった。人生を変えてくれた技術であるとも言える。ただ、知れば知るほどに別の技術に目移りし始めてしまっていたのも事実。 あれやこれやの言…
「ゼロからアーキテクチャを考えるのであればどのような構成を検討しますか?」 これはある企業の面談を受けたときに聞かれたこと。僕は、最低限サーバーサイドのAPIとフロントエンドのSPAを分割する、というようなことを話した。 いま振り返ってこう考えて…
「最大公約数」と問われると「ユークリッドの互除法!」とただちに着想が湧くようにはなってきた。 その一方で「最小公倍数」と問われたら、「おや...」と思いながら調べ直さざるをえない自分がいた。 この記事できちんと整理して、記憶に定着させたい。 定…
先週末の AtCoder ABC169 B の問題で、long long 型の整数をオーバーフローさせてしまった。しかもそれに気づけずにだいぶつまずいてしまった。 atcoder.jp Ruby や Python であれば意識せず扱える部分であっただけに悔しさがある一方で、こうも思った。 Rub…
jnsato.com で自己紹介ページを公開している。 jnsato.com シンプルなページではあるが、裏ではいろいろと工夫をしている。たとえばページのホスティングについて、AWSのサービスを組み合わせて稼働させているのだが、最高水準の可用性とパフォーマンスを保…
jnsato.com でホストしている自己紹介ページについて、連続して書いてきた。昨日はホスティングのインフラ構成について書いた。 jnsato.hateblo.jp こちらの記事にて、このウェブページはサーバーレスな構成を取っていて、保守にリソースを割く必要はほとん…
前回記事に引き続き、 jnsato.com でホストしている自己紹介ページについて。前回はデザイン面について書いた。 jnsato.hateblo.jp 今回はホスティングについて書く。 構成 はじめに構成図を示しておく。それはこんな形。 各サービスの詳細については公式ド…