"Service層"が持つ危険性について考える

「Service層とは何か」を一言で説明できる人は少ないのではないだろうか Service層を定義しているプロジェクトは多いが、Model層のようにガッチリと責務が定義されている訳ではなく企業やプロジェクトによって、その責務はバラバラである事が多い。 今まで自…

生成AIが書く自動テストは複雑なコードに耐えられるのか

最近、生成AIネタばっかり書いてる気がする。 ふと、どれだけ複雑なコードに生成AIが耐えられるのか実験したくなりやってみた。 何をするのか 複雑なコードを書いて自動テストを生成AIに実装させる 自動生成されたテストケース数とテスト通過数を観察する モ…

FactoryBotを使ったrspecのテストをCopilotに書かせてみた

表題の通り、FactoryBotを使ったrspecのテストをCopilotに書かせてみた 使ったモデルは、GPT-4oである コンテキストが少ないコードに対してなら基本的にテストコードは生成しやすい。 しかし、コンテキストの量が増えてくると、Copilotが活躍しやすいコード…

Copilotが活躍しやすいコードを考える

最近、Copilotを使ってコードを書くことが多くなってきた。 自分が気づいたポイントについて書きたい。 単体テストの実装について 単体テストを自分で1ケース書いて、「こんな感じで他のテストケースも実装してくれ」ってCopilotに命令して使うことが多い な…

テストピラミッドにおける結合テストについて

テストピラミッドにおける結合テスト部分について 結合テストの種類 テストピラミッド内では、結合テストと一括りにされているが、結合テストの中にも種類があり異なる性質を持つ DBやファイルへのアクセス等の共有依存がない結合レイヤーに対する自動テスト…

テストコードを入り口としたリファクタリング

以下、登壇内容について書きたい. www.slideshare.net テストコードは、プロダクトコードの負債の影響をもろに受けるので、その性質を利用してやれないだろうかと考えているわけだ. プロダクトコードから負債の影響を受けるということは、アプリケーションア…

RailsのModelからレポジトリ層とドメイン層の責務を分割する設計を考える

前提 RailsはMVC構成になっている Model部分にDBを使ったデータ操作とドメインロジックの実装が入ってくるのでレポジトリ層とドメイン層の責務が両方入ってくる この状況だとテストをDBが依存する部分と依存しない部分に分離して実装できなくなる 集中的にテ…

The Design of Web APIsの読書感想文(7章まで)

www.manning.com The Design of Web APIsは我流でAPI設計をやってしまっていた自分にとって良書でした。 知らなかった事・気がついた事等を忘れないように箇条書きにしました。 7章以降も少しずつ読んでいこうと思います。 ch1: what is api design? APIの基…

「Rubyで実装するフルスクラッチ三目並べ」という名前でgitbook書いてみました

1 ~ 2年前に研修用に作ってWEB公開するのを忘れていたので、さっき公開してきました。 今見ると結構荒削りな所がある(変数名とか内容とか)ので気が向いたら直していこうと思います。 kashiwara.gitbook.io 対象は誰なのか プログラミングに興味があって基礎…

HaskellでLeetCodeのTwoSumを解いてみた

転職活動を終えて時間に余裕が出てきたので、最近Haskellで遊んでいます。 LeetCodeのTwoSumをHaskellで解いてみました。 TwoSum 今回トライした問題 leetcode.com レポジトリ Haskell勉強用に作ったレポジトリです。 docker-compose upで環境が立ち上がりテ…

プロダクトマネージャーのしごとを読んだ

背景 先日リファレンスチェックを実施していただき自分の弱みに触れる時間があった。 どうも自分は技術思考にかなり寄っているらしく 緊急対応然り何かトラブルが発生した場合に、人とコミュニケーションを取って解決するのではなく、技術で突破しようとする…

Rails7からDBレイヤーを剥がす

RailsからDBレイヤーを剥がす手法について記載します 環境 Rails 7.0.3 bin/setupファイルを修正 bin/setupファイルのdb:prepare部分を削除します # 以下2行を削除かコメント化 puts "\n== Preparing database ==" system! "bin/rails db:prepare" config/e…

getOrElse関数が便利

最近、fp-tsについて調べる機会がありました。 github.com TypeScriptで関数型言語っぽい事が出来るライブラリです。 プロジェクトに盛り込むことも考えましたが 現時点ではメリットが少なく導入には至りませんでした。 調べていく中でgetOrElse関数を見つけ…

今年採用してよかったドキュメント類

今年からプロジェクト内で属人化を防ぐために ドキュメントの運用文化をプロジェクトに取り入れてきました。 採用してよかったドキュメント類をまとめていきます。 ユーザストーリー 取り入れた理由 何のために存在しているのかが理解できない機能が増えてき…

Railsで組んでるシステムにCQRSのQを入れてみた

Railsで組んでるシステムにCQRSのQ層を導入しました。 その事について記載します。 問題点 Q層を導入する前に発生していた問題点について記載します。 戻り値の中身がコード上で判別できない 例えば以下のようなコードです。 class PostRepository class << …

システムの権限処理を改善する

「プロジェクト内の権限管理が扱いづらいので改善したい」という要望が上がり"簡単な権限処理"に関して改善しました。 その時のことを備忘録として記載します。 簡単な権限処理と難しい権限処理 冒頭で"簡単な権限処理"について対応したと記載しました。 本…

docker-composeを使ってマイクロサービスをやってる時に便利だったデバッグ手法

現在のプロジェクトで便利なデバッグ手法出てきたので備忘録として記載します。 今回例に挙げるフォルダ構成とdocker-composeファイルを下記に記載します。 フォルダ構成 workフォルダがrootでその下に、それぞれのマイクロサービスのdocker-compose.ymlがあ…

MUI dataGridのfiled部分を型チェックする方法

MUI x Ts x Reactで最近開発を進めています データの出力部分にMUIのDataGridを使っているのですがfiledに型が効かないので拡張して対応しました mui.com MUI DataGrid DataGridは便利で素晴らしいコンポーネントなのですがfiledに型が効きません。 ※ MUI da…

goのWebFrameWork "gin" を使ってみた

概要 goのWebFrameWork "gin" を使ってみた。 github.com DB(MySQL)からデータを取ってきてJSON化させて返却するところまで実装。 ソースコード 以下のサンプルが実装されています。 gormの設定 sql-migrateの設定 migrationコード seedコード gormを使った…

canvas.getContext('2d')をjestする

概要 canvas.getContext('2d')が使われているファイルをjestする方法を下記に記載します。 下記のようなコードをjest実行時に動かせるようにします。 this.canvas = document.getElementById('gray-scot-model-canvas') as HTMLCanvasElement const ctx = th…

Jestを使ってClassのメソッドを一部Mock化する方法

概要 Jestを使ってClassのメソッドを一部Mockにしてテストを回す方法を記載します 結論 prototypeを使い該当メソッドを対象のテストファイルにてjest.fnで更新します // prototypeを使用してメソッドをmockに更新 Class.prototype.method = jest.fn() // 戻…

Nimのiteratorの使い方

概要 Nimのiteratorの使い方を下記にまとめる ソースコード github.com 1行目~3行目 type Animal = object name: string age: int Animalを定義。 要素は2つで、nameとageのみ。 5行目~6行目 type AnimalBox = object animals: seq[Animal] AnimalBoxを定…

NimでFactoryパターンを実装する

概要 以前からfactory(又はstrategy)をNimで実装できないかということを、ちょこちょこ調べていた。 今回、実装に成功したので、そのことを以下に記載する。 環境 Nim Compiler Version 1.4.0 [Linux: amd64] ソースコード github.com ソースコードの説明 …

Rubyでspecifiactionパターンを実装

概要 Rubyでspecifiactionパターンを実装した。内容をいかにまとめる。 ソースコード github.com specificationパターンとは specificationパターンとは、「複雑な仕様部分を外に切り出す事が出来る」ソフトウェアデザインパターン。 オブジェクトに対する「…

Railsのapp以下のファイルで自動読み込みが効かない時

概要 このトラブルは、Service層などの新たな設計をappディレクトリ配下に実装する際によく直面する 自動読み込みが効いていない時に確認する項目を下記に記述する ActiveSupport::Dependencies.autoload_pathsの確認 自動で読み込んでくれるファイルパスが…

Capybaraの不安定なシステムテストの症状とその対策

概要 Capybaraを使った時の不安定なシステムテストの症状とその対策について下記にまとめます。 環境 rails: 6.0 capybara ランダムなテストデータによって落ちるテスト 症状 ランダムにテストデータが作成されている時に発生します。 例えば、テストユーザ…