2020-01-01から1年間の記事一覧

2020年まとめ

2020年は特異な年だったというのもあり、個人的なことも含めて2020年にあったことをまとめた。 仕事 リモートワーク 2020年1月15日に日本での新型コロナウイルス感染者が確認されたあと、国内ではかなり早い段階で所属企業を含むグループ全社でリモートワー…

Railsエンジンのappディレクトリ配下のクラスを親アプリでオーバーライドする

やりたいこと Railsエンジンのappディレクトリ配下に存在するクラス(モデルやコントローラ)のメソッドをオーバーライドしたい。 結論 RailsガイドのRailsエンジンについての記事に全部書いてある。Railsエンジンのapp配下のオーバーライドは、to_prepareを…

authorization code grantに沿ったDoorkeeperのコードリーディング

さまざまな都合により、OAuth 2のプロバイダになるためのDoorkeeperというgemのコードを読むことがしばしばある生活を送っている。 似た名前のモジュールやクラスが多く、読むたびに混乱しているので、authorization code grantでアクセストークンを取得する…

OpenID Connectについて知るときに読んだもの

OpenID Connect (OIDC)がどういうものか、どう使うのかについて知るために読んだものについてまとめておく。前提として、OAuth 2を利用したアプリケーションの開発経験はあるとします。 OAuth 2 OIDCはOAuth 2を拡張した認証プロトコルとなっている。前提に…

『決済サービスとキャッシュレス社会の本質』を読んだ

Eコマースに関するWebサービスを開発しているのもあって、たまに決済に関する本を読んでいて*1*2、今年は本屋に『決済サービスとキャッシュレス社会の本質』が平積みされているのを見つけたので、読むことにした。 決済サービスとキャッシュレス社会の本質作…

APIスロットリングの実現方法

ある期間でのあるWeb APIに対するアクセス回数上限を与えたときのスロットリングについて、一例ではあるがRack::Attack (v6.3.1)で採用されているしくみについて調べた。 ここでは、ある期間において特定のクライアントからのアクセスを一定回数以下に制限す…

ポモドーロ・テクニックを2か月間やってみての感想

2か月ほどポモドーロ・テクニックを使って仕事をしてみたので感想を書きます。 前提 仕事ではWebアプリケーション*1*2の開発が主な業務。最近、会社の勤務体制が原則として在宅勤務に移行した*3。 なぜ始めたか 在宅勤務はとても便利だが、家の中でずっと同…

意図せず関連先のカラムでwhereしつつeager loadしたらクエリのパフォーマンスが極端に悪化した事例

問題 15個ぐらいのさまざまなクエリパラメータを検索条件として受け付けることができる一覧取得API(「Item取得API」とする)があった。 そのAPIで取得するItemは複数の関連を持っていた。また、関連先の取得時にN+1問題の対策が不十分だったので、取得する…

『SQLパフォーマンス詳解』を読んだ

RDBのインデックス作成の戦略や実行計画の読みかたにもう少し詳しくなりたいと思っていたので、この手の話題が体系的にまとめられている『SQLパフォーマンス詳解』を読んだ。今回は和訳版を公式サイトで購入したが、SQLのインデックスとそのチューニングにつ…

macOSのDay Oneにプレーンテキストをインポートする

macOS Catalina 10.15.4 Day One 4.11.1 とします。 Day Oneのインポート機能 Day Oneはさまざまな形式のデータをエントリとしてインポートできる。 Importing data to Day One | Day One Help 日付形式の問題 上述したサポートページには、プレーンテキスト…

GraphQL開発のベストプラクティスをまとめた"Principled GraphQL"を読んだ

"Principled GraphQL"はApollo社が公開しているGraphQL開発のベストプラクティス集です。 principledgraphql.com 背景として、近年のアプリケーション開発では「データグラフ」が重要になってきているとしています。GraphQLを通じて、ある企業のすべてのアプ…

値の妥当性をチェックする日時表現パーサを作る

『Haskell入門』に日時表現("YYYY/MM/DD hh:mm:ss")のパーサをAttoparsecで作る節*1があり、 このままでは9999/99/99 99:99:99のような入力ができてしまいますが、月の入力範囲を1~12に制限するといった制約をかけることも、これまで説明した範囲で簡単に実…

リソースとActive Recordのモデルのあいだの差異を吸収するクラスを作る

Web APIのリソースとバックエンドで扱うモデル(特にActive Recordのモデル)に歴史的な事情で差異があり、単純にモデルからリソースへと変換できないとき、それらの差異を吸収するクラスを作って対応することがあったのでメモを残しておきます。 問題 あるW…

関数をFunctor/Applicative/Monadにする

『プログラミングHaskell 第2版』の12章「モナドなど」の演習*1で型 (a ->) をFunctor(関手)、Applicative、Monadにするという問題があり、少しわかりにくかったので、いまの自分自身の理解をまとめました。 型(a ->)とは 部分適用された関数の型を(a ->)…

WebAuthnによる認証機能を作りながら理解を深める

Web

何をやったか 最近の仕事柄興味があったのと、WEB+DB PRESS Vol.114の特集2を読んだこともあって、理解を深めるためにWebAuthnでの公開鍵登録(今回はサインアップを兼ねる)、認証だけできる簡単なWebアプリを作りました。リポジトリのREADMEに様子のGIFア…