AWS Vaultを使ったスイッチロール設定手順

背景 AWS CLIやterraformでスイッチロール時にMFAを利用する際、コマンドを実行する都度MFAコードを入力するのは煩雑です。AWS Vaultを使うとスイッチロール後のプロファイルのシェルに入れるようになります。 構成 defaultプロファイルでIAM ユーザーによる…

AWS CLIでのスイッチロールの設定手順

概要 スイッチロールの設定手順にて、AWSコンソールでのスイッチロールの方法について記載しました。 開発中にスイッチロール先でAWS CLIを利用したい場面もあるかと思います。 その場合の設定内容について記載します。 状況定義 以下のようにアカウント設定…

ActiveSupportのto_jsonメソッドの注意点

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

コンテンツ執筆時のルール

ルールを設定する目的は、コンテンツ全体の統一感を出したり、定まったルールの元でコンテンツを書くことで、読者にとって読みやすいコンテンツにすることです。 しかし、コンテンツを書くためのハードルを上げたくもないので、ルールを多く管理したくもあり…

データ分析プロセス

この記事では、一般的に知られているデータ分析プロセスを簡単に紹介します。 データ分析における標準プロセス データ分析において、一般的に知られている標準プロセスには以下が存在します。 CRISP-DM(*1) KDD(*2) 以下、それぞれについて概要を紹介し…

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 …

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

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

ngrokの導入

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

HerokuのStackの設定

Stackとは Herokuで稼働するサーバーのベースとするOSのバージョンのようなものです。 公式サイトを見ると分かりますが、Ubuntu Linuxのバージョン番号とStack名が揃えられているようです。 Stack関連のコマンド 使用中のStackを確認 以下で、Stackの確認が…

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

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

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

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

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

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

RubyKaigi 2023 に現地参加しました

はじめに 5/11(木)~5/13(土)に、長野県松本市のまつもと市民芸術館にてRubyKaigi 2023が開催されました。 弊社からは4名のエンジニアが現地で参加しました。 この記事では、RubyKaigi 2023に参加したエンジニアの中で印象に残ったセッションをピックアップ…

Rails Migrationチートシート

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

Validated を直列に処理したい

概要 cats に含まれる Validated は、複数の入力値のバリデーションを一つにまとめて返すことができる大変便利な型です。 typelevel.org 業務において、入力値のバリデーションを行った値をさらに別の入力値として使いたいというケースがままあり、プロジェ…

Heroku Postgresの運用でよく使うコマンド集

すべて公式サイトに記載されている内容ですが、よく使うコマンドをすぐに参照できるように、一覧としてまとめます。 コマンド集 データベースのバックアップを保存する % heroku pg:backups:capture --app your-app-name データベースのバックアップ一覧を確…

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…

Scala 開発環境構築

この記事でインストールしているバージョンは古くなっている可能性もあります。最新バージョンに読み替えて利用するようにしてください。 想定環境 OS:Mac Scala:2.13.6 Java と sbt のインストール Scala を使うには Java と sbt が必要になります。バー…

Homebrew用語の意味

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

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

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

Raspberry Pi + PaSoRi + Python で、勤怠打刻マシンを作ってみた

前置き 最近、当社の勤怠システムが更改されるとともに、勤怠打刻のWeb APIも公開されました。 すると、エンジニア間で「わたしのかんがえたさいきょうのきんたい」ブームが起き、いろいろな勤怠打刻方法が生み出されました。 今回は、私の作成した Raspberr…

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

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

ActiveRecordのfind_or_initialize_byメソッドにブロックを渡したときの挙動

過去に書いたソースコードを読んでいて、仕様を理解するのに手間取ってハマったので、共有のために記事を書いておきます。 find_or_initialize_byメソッドの例 以下のようなコードを見かけたとします。 user = User.find_or_initialize_by(email: 'sample@pr…

スイッチロールの設定手順

概要 AWS上で稼働するアプリが増えてくると、アプリごとにOrganizationを作りたくなります。この際、スイッチロールという機能を使うとOrganizationごとにIAMユーザーを作る必要がなくなり、ユーザー管理をシンプルにできます。本記事ではスイッチロールの方…

Prettierを設定する

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

Slackの/remind コマンドの形式

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