書籍レビュアーとして参加した、エキスパートPythonプログラミング 改訂4版 が発売されました

書籍レビュアーとして参加した、「エキスパートPythonプログラミング 改訂4版」が、7/21に発売されました。また、電子書籍版も発売されています。 「エキスパートPythonプログラミング 改訂4版」MichalJaworski [PC・理工科学書] - KADOKAWA レビュアーと…

Tanstack QueryにおけるuseQueryのselectオプションを調べてみた

Tanstack Queryの useQuery のドキュメントを見ていたところ、 select オプションがありました。 This option can be used to transform or select a part of the data returned by the query function. It affects the returned data value, but does not a…

Tanstack Queryの Query Key について調べてみた

Tanstack Queryの useQuery や invalidateQueries を使うときは Query Key を指定します。 Query Keyとはなにかを公式ドキュメントで見たところ At its core, TanStack Query manages query caching for you based on query keys. Query keys have to be an …

Reactにて、useStateやuseEffectを使っていたところをTanstack Queryに置き換えてみた

最近、状態管理ライブラリ Tanstack Query を使う機会がありました。 Tanstack Query は公式ドキュメントが充実しています。 TanStack Query | React Query, Solid Query, Svelte Query, Vue Query TanStack/query: Powerful asynchronous state management…

MySQL8系でutf8mb4なテーブルに4バイトのUnicode文字🍣🍺があっても、JetBrains系IDEやDataGripにて確認できるようにする

MySQL8系でutf8mb4なテーブルに4バイトのUnicode文字(例: )があるとき、JetBrains系IDEやDataGripで確認すると ?? のように表示されていました。 一方、mysqlコマンドでは と正しく表示されていました。 そこで、JetBrains系IDEでも表示できるよう設定を変…

各RailsアプリにOpenTelemetryを組み込み、収集したデータをJaegerで表示してみた

最近「オブザーバビリティ(Observability)」が気になっていたので、オライリーの「オブザーバビリティ・エンジニアリング」を読みました。 O'Reilly Japan - オブザーバビリティ・エンジニアリング その本の7章ではOpenTelemetryが紹介されていました。 Open…

Railsで、included付のConcernをincludeしたり、prepended付のConcernをprependしてみた

Railsには Concern と呼ばれる関心事を分離する機能があります。 我々はConcernsとどう向き合うか - おもしろwebサービス開発日記 そのConcernをモデルに組み込もうとした時、 モデルで include するか prepend するか Rails API: ActiveSupport::ConcernとM…

TypeScript + Jest で、type文やinterface宣言による型からモックオブジェクトを作ってみた

関数 sumItem があり、2つの引数の型 Item があるとします。 export const sumItem = (a: Item, b: Item) => a.unitPrice + b.unitPrice Itemの型は export type Item = { name: string, description: string, contents: string, unitPrice: number, note: s…

Rails + RSpecで、引数が必要なRake Taskのテストコードを書いてみた

Rails + RSpecにて、Rake Taskのテストコードを書く機会がありました。 ただ、引数が必要なRake Taskのテストを書くときに悩んだことがあったため、メモを残します。 目次 環境 引数なしのRake Taskをテストする 引数ありのRake Taskをテストする [] を使っ…

#rubykaigi RubyKaigi 2023に参加しました

5/11(木)~5/13(土)に、長野県松本市のまつもと市民芸術館で開催された「RubyKaigi 2023」に参加しました。 RubyKaigi 2023 - RubyKaigi 2023 今日の松本駅、RubyKaigi 2023仕様になってた #rubykaigi pic.twitter.com/zPbHut3mSu— thinkAmi (@thinkAmi) May…

「研鑽Rubyプログラミング」を読みました #研鑽Ruby

研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ – 技術書出版と販売のラムダノート を読んだので、簡単に感想をメモしておきます。 前置き ここ2年ほど、仕事にてRubyやRailsを使ってWebアプリを開発しています。 RubyやRailsに詳しい…

ActiveSupportのdeep_mergeに対し、with_indifferent_accessと組み合わせたり、blockを渡してみたりしてみた

Rubyでは Hash#merge を使うことで、2つのハッシュをマージできます。 Hash#merge (Ruby 3.2 リファレンスマニュアル) 2つのハッシュでキーが異なる場合は、それぞれのキーを持つハッシュへとマージされます。 h1 = { name: 'foo' } h2 = { color: 'red' } h…

Rails + RSpecにて、changeマッチャまわりをいろいろ試してみた

前回に続き、RSpecのchangeマッチャに関する記事です。 値の変化を検証する時は change マッチャが便利です。 ただ、「こんな時どうするんだっけ」と調べることが多かったことから、 change マッチャまわりをいろいろ試してみたときのメモを残します。 目次 …

RSpec 3.12 + rspec-rails 6.0.2にて、change + have_attributesマッチャを使うとエラーになるため、回避策を試してみた

RSpecの change マッチャを使うと、処理前後における値の変化を検証できます。 https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/change/ 例えば # == Schema Information # # Table name: favorites # # id :integer not null, prim…

Rails + ActiveSupport::InheritableOptionsを使って、既存のハッシュをドットアクセスできるようにする

ハッシュに対してドットアクセスできる機能を追加しようと調べたところ、Rubyの標準ライブラリに OpenStruct がありました。 ためしに使ってみたところ、以下のようになりました。 require 'ostruct' o = OpenStruct.new({foo: 'bar'}) puts o.foo #=> bar …

Rails7.0系で、キャッシュストアとセッションストアをRedisにしてみた

以前、Railsのキャッシュストアとセッションストアとして memcached を使ったことがありました。 Rails6.1で、セッションをキャッシュとは別のmemcachedへ保存する - メモ的な思考的な そんな中、Redisを使って試してみたことから、メモを残します。 目次 環…

openapi-generatorのtypescript-axiosやtypescript-fetchで、OpenAPIスキーマのenumに対して生成されるTypeScriptコードが列挙型から変更になっていた

以前、OpenAPIスキーマからTypeScriptのクライアントを生成するために、 openapi-generator を使いました。 https://github.com/OpenAPITools/openapi-generator Rails + React + OpenAPI な環境で、クエリパラメータに配列を指定する時に調べたことをまとめ…

RailsのActiveRecordで、joinsメソッドやwhereメソッドで、ハッシュで条件を指定する

RailsのActiveRecordにて、SQLのJOIN句やWHERE句の条件を記載する場合、 JOIN句 joins() や eager_load() などのメソッド 13 テーブルを結合する | Active Record クエリインターフェイス - Railsガイド WHERE句 where() メソッド 3. 条件 | Active Record …

Rails + factory_botで、sub factoryやtrait・callbackを使って関連データを生成してみた

Rails + RSpec + factory_bot にて、あるモデルの関連データを生成する方法を調べたところ、factory_botのGETTING_STARTEDにいろいろな方法が記載されていました。 https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md そこで、GETTING…

Railsで、二重否定(!!) + ぼっち演算子(&.) が使われているソースコードの挙動を確認してみた

Railsを使ったソースコードを眺めていたところ、モデルのメソッドにて def foo !!bar&.baz end というコードがありました。 どのような挙動になるのか気になったので、試してみた時のメモを残します。 目次 環境 モデル構造 挙動確認 否定(!)や二重否定(!!)…

Railsで、DBから取得するデータに対し、order・sort_by・sortを使って、昇順・降順ソートする

RailsでActiveRecordを使ってDBからレコードを取得するときに、以下を考慮した昇順・降順ソートで迷ったことがあったため、メモを残します。 取得するタイミング データ取得時 (SQL発行時にソート) データ取得後 (Rubyのarrayになってからソート) ソートキー…

RailsのActiveRecordで、ある条件の関連先レコードがない場合にその関連元データを取得する

以前、RailsのActiveRecordにて、 eager_load を使って 子側が存在しない場合は結果に含めずに抽出する 子側が存在しなくても、結果に含めて抽出する をしました。 Railsで、eager_loadのLEFT OUTER JOINにて、WHERE句とON句のそれぞれで絞り込みしてみた - …

Railsにて、モデルのカスタムバリデーションメソッドの中で、標準のエラーメッセージを利用する

Railsでは、標準で用意されているモデルのバリデーションの他に、カスタムバリデーションメソッドを作成することで、独自のバリデーションを行えます。 6 カスタムバリデーションを実行する | Active Record バリデーション - Railsガイド そんな中、「カス…

React + DjangoなWebアプリに対して、PlaywrightでいろいろなE2Eのテストコードを書いてみた

前回の記事で、Playwrightを使ってDjango + ReactのE2Eテストができると分かりました。 WSL2 + Playwrightな環境にて、codegen機能によりReactアプリやDjango管理サイト向けのテストコードを自動生成してみた - メモ的な思考的な 前回は自動生成したテストコ…

WSL2 + Playwrightな環境にて、codegen機能によりReactアプリやDjango管理サイト向けのテストコードを自動生成してみた

前回の記事にて、WSL2上にPlaywrightをインストールして動作することを確認しました。 WSL2上にインストールしたPlaywrightを、Visual Studio Codeから動かしてみた - メモ的な思考的な これにより環境ができたため、次はPlaywrightのcodegen機能でテストコ…

WSL2上にインストールしたPlaywrightを、Visual Studio Codeから動かしてみた

以前、E2Eテスト用のツールとしてSeleniumやRobot Frameworkをさわっていました。 Selenium カテゴリーの記事一覧 - メモ的な思考的な そんな中、最近のメジャーなE2Eテスト用ツールは何だろうと思い調べてみたところ、CypressとPlaywrightがありました。 Cy…

2022年の振り返りと2023年の目標

例年通り、2022年の振り返りと2023年の目標っぽいものを書いてみます。 2022年の振り返り 2021年の振り返りと2022年の目標 - メモ的な思考的な で立てた目標っぽいものについて、ブログの記事を中心に振り返ってみます。 目次 2022年の振り返り 身近な技術の…

「単体テストの考え方/使い方」を読んだ

本屋へ出かけたところ、書籍「単体テストの考え方/使い方」を見かけました。 単体テストの考え方/使い方 | マイナビブックス 表紙に 書名に単体テストと書かれていたこと 原著がManning Publications社なこと とあったため、購入して読むことにしました。 最…

「手を動かしながら学ぶTypeScript」を写経しながら読んだ

ここしばらく仕事でTypeScriptも書いているものの、まだ雰囲気で書いている感がありました。 そのため、腰を据えて学ぼうと考え、手を動かしながら理解できるチュートリアル的な書籍を探したところ、「手を動かしながら学ぶTypeScript」に出会いました。 手…

drf-spectacularを使って、Django REST frameworkの実装からOpenAPI 3.0系のスキーマを生成する

これは Djangoのカレンダー | Advent Calendar 2022 - Qiita 12/13の記事です。 Django REST framework(DRF)でOpenAPI 3系のスキーマを生成しようと考えた時、DRFの公式ドキュメントでは DRFの機能を使う Schemas - Django REST framework サードパーティパ…