ソフトウェア開発

PostgreSQLにおける、削除行に対するロック獲得時の挙動

環境 RDB PostgreSQL 13.3 トランザクション分離レベル read committed (デフォルト) 実験環境 IntelliJ IDEA 2024.3 (Ultimate Edition) TLDR PostgreSQLにおいて、トランザクション内で同一キーの行を delete - insert する場合、同時に実行される他のトラ…

GithubのプライベートリポジトリをGemfileで参照する方法

背景 当社では、社内で共通に使いたい機能をgemに切り出し、機能の利用側のGemfileでプライベートリポジトリを参照しています。 gem "some_internal_library", git: "https://github.com/precena-dev/some_internal_library.git", tag: "v1.0.0" ローカル端…

Railsのアプリケーションサーバーのプロセス数とスレッド数の設定方法

はじめに この記事では、Railsの本番環境におけるアプリケーションサーバー(pumaやunicornなど)のプロセス数とスレッド数のパラメータ設定に関する情報をまとめます。 プロセスとスレッドの特徴概要 アプリケーションサーバーのパラメータを設定する際に、…

ActiveSupportのto_jsonメソッドの注意点

to_jsonメソッドの注意点 ActiveSupportには、to_jsonという便利なメソッドがあります。 Railsで開発しているときに使う場面としては、DBから取得したレコードをAPIのレスポンスとして返す場合があります。 しかし、deviseを認証に使っているサービスなどで…

Storybookを利用したビジュアルリグレッションテスト

ビジュアルリグレッションテスト(Visual Regression Test)とは ビジュアルリグレッションテスト(以下、VRT)は、画像回帰テストとも呼ばれます。 VRTは、改修による予期せぬ UI のデザイン崩れを検出することを目的としています。 UIのスクリーンショット…

危険なJSON出力を禁止するRuboCopカスタムルールの作成方法

背景 userの情報を返すAPIを実装する際、render json: user とするとuserモデルのすべてのフィールドを含むJSONを返してしまい危険です。パスワードはハッシュ化されているものの、deviseが提供するフィールドlast_sign_in_ip などクライアントに返してはな…

AWS CLI

インストール 公式サイトでインストーラーをダウンロードしてインストールしてください。 docs.aws.amazon.com 設定 基本的に以下の公式サイトに従うだけです。 docs.aws.amazon.com 公式サイトにも載っている内容ですが、以下のコマンドを入力して、 % aws …

ngrokの導入

ngrokとは ngrok(エングロクと読む)は、httpのトンネリングサービスです。 ngrokでホストされるURL(例:http://xxxx.ngrok.io/ )へのアクセスをローカル環境のwebサーバー(http://localhost:3000 など)にトンネリングしてくれます。 例えば、stripeやL…

schema.rbで差分が発生する事例とその復旧について

Railsには、スキーマファイルと呼ばれる schema.rb があります。 Railsガイドには Active Recordはマイグレーションの時系列に沿ってスキーマを更新する方法を知っているので、履歴のどの時点からでも最新バージョンのスキーマに更新できます。Active Record…

GitHubのプライベートリポジトリをGemfileで参照する方法

背景 当社では、社内で共通に使いたい機能をgemに切り出し、機能の利用側のGemfileでプライベートリポジトリを参照しています。 gem "some_internal_library", git: "https://github.com/precena-dev/some_internal_library.git", tag: "v1.0.0" ローカル端…

tmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する

はじめに 当社のRailsシステム間連携では、各システムで公開しているWeb APIを使っています。 今までは各システムを bin/rails s で起動し、開発を行ってきました。 ただ、 連携するシステムが増えたり、各システムで使うジョブワーカーが増えたりした結果、…

M1 Macでの開発環境構築(rosetta 無し)

はじめに この記事では、M1 Macでの開発環境構築でハマったところを共有するために、記載して行きます。今後、随時新しいハマりどころが発生した場合は、情報を追加していきます。 環境構築の前提 筆者の環境では、環境構築の検証もかねているので、Rosetta …

Rails Migrationチートシート

Rails歴が長い人でも、意外とmigrationの追加用のコマンドを覚えていられず、毎回調べていているので、実装で使ったもの・使いそうなものを少しずつ追加しています。 この記事は定期的に内容が追加される予定です。 よく使うパターン 空のマイグレーションフ…

ngrokのアップグレード(v2 to v3)

ngrokが最近メジャーバージョンアップして、バージョン3がリリースされましたので、アップグレード手順を紹介します。 なお、設定ファイルは、下位互換性がなくなっているので、ngrok本体のアップグレード後には、設定ファイルのアップグレードが必要になり…

zsh-completion

zsh-completionとは zshを使うときに、補完用の情報を設定をしておくことで、例えば、git、aws-cli、dockerなどのコマンドやサブコマンドをTabキーで補完してくれるツールです。 公式サイトは、以下です。 github.com zsh-completionのインストール macOSを…

対面での相談を気軽にするためのSlack設定 - Slack emoji とGoogle meet を連携して使う

前置き 当社のエンジニアは全員フルリモートで働いているため、対面での相談は Google meet を使うことが多いです。 ただ、対面で相談するまでの準備に手間がかかると、気軽な相談はしづらくなりがちです。 そこで当社では、「Slackのカスタムレスポンスとem…

Homebrew用語の意味

この記事は、独特なネーミングがされていて、知っているようで知らないHomebrewの用語の意味を正しく理解するために書きました。 用語一覧 Homebrewは「自家醸造」の意味です。この「醸造」の世界観の元で、Homebrewで扱う一部の概念の名前がつけられていて…

Railsを6.1系から7.0系へアップグレードした時に調査したこと

先日、Rails6.1系で動いていたシステムをRails7.0系にアップグレードしました。 そのシステムは Rails製APIアプリケーション コード量・利用者ともに小規模 テストコードが充実している と比較的アップグレードしやすかったこともあり、無事に完了しました。…

OpenAPI 定義ファイル分割のすゝめ

OpenAPIとは RESTfulなWebサービスを記述、生成、利用、可視化するためのインターフェースファイルの仕様です。 以前はSwaggerフレームワークの一部でしたが、2016年にOpenAPI Initiativeが統括する独立プロジェクトとなりました。 Swaggerや他のいくつかの…

Slackの/remind コマンドの形式

当社の日常業務の中で、Slackのリマインダーを設定することは、頻繁にあります。 しかし、Slackのコマンドを使ってリマインダーを指定する際、とくに、日時の指定の仕方を中々覚えられず、公式ヘルプを見に行くことが多いです。 リマインダーを設定する | Sl…

Prettierを設定する

Prettierとは おもにJavaScriptなどのフロントエンド系のソースコードのフォーマッタです。プラグインを追加することでRubyなどの言語にも対応可能です。詳細は公式サイトを参照してください。 以下、開発プロジェクトへのインストール手順を説明します。 Pr…

Ruby環境構築

当社の開発で使うRubyのバージョンは、プロジェクトごとに異なることが多く、また、プロジェクトごとにRubyのアップデート状況も異なります。 したがって、プロジェクトごとにRubyのバージョンを切り替える仕組みとしてrbenvを導入して使います。 rbenvのイ…