ITANDI Engineer Blog
https://tech.itandi.co.jp/
ITANDI Engineer Blog
フィード
VScodeからNeovimに乗り換えた感想
ITANDI Engineer Blog
はじめに こんにちは! イタンジ株式会社物件チームの関雨菲(カン ユフィー)です。 半年前からVimというエディターに魅力を感じて始めました。以前まではVScodeを使っていましたが、Vimに慣れたらもうVScodeに戻れないぐらいVimが好きになりました。Vimはゼロから自分に合う設定をカスタマイズできて、自分だけのエディターを作り上げることができて、面白いです。 今回はVimについて勉強したことを共有しようと思います。 Vimのメリットとデメリット 私が感じる一番のメリットはマウスの操作が要らないことです。VScodeを使っていたころは開発の途中で何回も手をキーボードから離してしまていたた…
2ヶ月前
MySQLの非バイナリ文字列の比較での末尾の空白について
ITANDI Engineer Blog
はじめに イタンジ株式会社の磯谷です。不動産賃貸仲介業向けのSaaSであるノマドクラウドの開発をしています。 ノマドクラウドではRailsとMySQLを使用して開発を行っています。その中で、VARCHAR型のカラムに格納されている値の、比較時の末尾の空白の取り扱いについてつまづいたので、今回はその点について書いていこうと思います。 MySQLの環境は以下です。 MySQL 8.0 文字セット utf8mb4 照合順序 utf8mb4_general_ci つまづいたこと あるテーブルについてVARCHAR型のカラムに格納されている値を用いてレコードを検索するという要件がありました。このとき、そ…
3ヶ月前
同期エンジニアで勉強会始めました!
ITANDI Engineer Blog
はじめに はじめまして!イタンジ株式会社で、物件管理くんの開発をしている須田です! 23卒でイタンジに入社し、社会人・エンジニアともに2年目になります。物件管理くんでは、バックエンド(Rails)、最近はフロントエンド(Typescript, React)で開発をしています。少しずつできることの幅が増えてきていて、毎日楽しくエンジニアリングに向き合っています。 今回は、私の同期のエンジニアと勉強会を始めることになったので、この取り組みについて概要を紹介したいと思います。 なぜ勉強会? アウトプットする機会を増やしたい 業務でそれぞれインプットする機会があるものの、自分の言葉でアウトプットする機…
5ヶ月前
物件基盤システムで使うgemに型をつける
ITANDI Engineer Blog
こんにちは! イタンジ株式会社で物件基盤システムの開発をしている藤崎 (https://x.com/aki19035vc) です。 つい先日、弊社オフィスにて Roppongi.rb が開催されました。 roppongirb.connpass.com 「最近追加した型の紹介とその振り返り」というタイトルでLTをさせていただいたのですが、その内容をブログ用に再編し、公開しようと思います。 speakerdeck.com Rubyの型とは Rubyは動的型付け言語であるため、変数やメソッドの型は実行時に決定されます。しかし、型注釈を追加することで、静的型解析を行い、コードの品質や保守性を向上させる…
5ヶ月前
物件基盤システムをRuby 3.3にアップデートし、YJITを有効にした結果
ITANDI Engineer Blog
こんにちは! イタンジ株式会社でバックエンドエンジニアをしている藤崎 (https://x.com/aki19035vc) です。 イタンジの各種サービスの要である物件基盤システムを開発をしています。 私がメインで見ているRailsアプリケーションのRubyバージョンを3.3系にアップデートしましたので、その結果についてご紹介いたします。 前提 今回アップデートしたRailsアプリケーションの特徴は下記の通りです。 Ruby 3.2.1 Rails 7.0.6 YJITは有効になっていない APIモードで動作しており、レスポンスはJSONしか返さない テストのラインカバレッジは100% 型の記…
5ヶ月前
物件基盤システムをRails 7.1にアップデートしました & ハマりポイントを共有します!
ITANDI Engineer Blog
こんにちは! イタンジ株式会社でバックエンドエンジニアをしている藤崎 (https://x.com/aki19035vc) です。 イタンジの各種サービスの要である物件基盤システムを開発をしています。 Rails 7.2が今にも出そうな気配がしていたので、置いていかれないように私がメインで見ているRailsアプリケーションは7.1に上げました。 その際、いくつか気をつけるべきポイントとハマりポイントがあったのでその共有も兼ねて記事を書こうと思います。 前提 今回アップデートしたRailsアプリケーションの特性は下記の通りです。 Ruby 3.3.3 Rails 7.0.6 APIモードで動作し…
6ヶ月前
Playwright による E2E テスト
ITANDI Engineer Blog
はじめに イタンジ株式会社の加藤です。精算管理くんというプロダクトの開発をしています。 先月は週1でサバゲーにいっていたのでずっと筋肉痛が続いていました... 精算管理くんでは機能優先で実装を進めてきたため、利便性向上の画面改修を行うことが増えてきました。そのため、変更後にも既存の機能が動作することを保証するために最近 Playwright による E2E テストを導入しました。 今回はその Playwright の紹介をしていきます。 E2E テストとは フロントエンドの E2E(end-to-end) E2E テストとは、主にブラウザ上での動作を検証するテストです。 例えば以下の項目などが…
6ヶ月前
Pydanticには暗黙的な型変換があると知った話
ITANDI Engineer Blog
はじめに こんにちは、データコネクタチームの韓です。 業務ではPythonを主に利用してデータ基盤の開発を行っています。PythonのデータバリデーションにおいてはPydanticというライブラリが有名で、私の業務でもよく利用しています。今回の記事では、実際にPydanticを使用してバリデーションを実装する際に直面した問題を再現しながら話したいと思います。 環境 Python 3.11.6 Pydantic 1.10.14 問題 サンプルコードは以下になります、バリデーションはmakerのidを0より大きい数字であることを保証しています。 from typing import Any fro…
8ヶ月前
CircleCIでMinitestを並列にして実行時間を1/3に短縮した話
ITANDI Engineer Blog
はじめに イタンジ株式会社の小林です。ノマドクラウドという不動産仲介向けのSaaSを開発しています。 ノマドクラウドではバックエンド開発にはRuby on Railsを採用し、CIツールとしてCircleCIを利用しています。これまでCIの高速化について真剣に取り組んだことはあまりなかったため、CIでのテストの実行に最大10分~15分程度要していました。ちょっとしたlintの修正や文言修正のコミットにも15分程度かかっており、「コード上にコメント残しておきたいけど面倒だな」「こちらの文言の方が良い気もするけど15分かかるの面倒だな」など心理的負荷をあげている状態でした。 修正前のテスト実行時間…
9ヶ月前
新卒1年目がRailsのバージョンアップをやってみた
ITANDI Engineer Blog
# はじめに イタンジ株式会社でITANDI BBの開発をしているVO HUU DUC(ボ ヒュ ドゥック)です。 背景 ITANDI BBプロダクトは主にRailsを使って開発しています。ITANDI BBはRails 6.0でしたが、バージョンのEOLに伴ってRails 6.1まで上げました。 やったこと やったRailsバージョンアップの手順 テストのカバレッジを確認しました。カバレッジが約94%で、必要なテストはあると判断できたため、バージョンアップに際してはテストを追加しませんでした。 developmentグループとtestグループのgemのバージョンを先に更新しました。 その後、…
10ヶ月前
エンジニアが気をつけたい思考のクセと育児の共通点を考えてみた
ITANDI Engineer Blog
はじめに イタンジ株式会社の兼田です。 現在更新退去くんというプロダクトの開発をしていますが、イタンジにjoinしてから早4年半程経ちました。 私自身は2014年の新卒ですので、エンジニアになってからでいうともう間も無く10年が経とうとしています。 イタンジのメンバーは20代のメンバーがかなり多いので、 弊社の中で見ると(エンジニアに限らずとも)私はもはや古参の分類に該当しているかもしれません。 ということで、今回は10年程エンジニアとして働いてきた感想を述べたいと思います!! ・・・と言っても、感想だけ書くと抽象度の高い内容になってしまいそうなので、 自身の体験も踏まえて私が個人的に思うエン…
1年前
Amazon RDS for MySQLのメジャーバージョンを5.7から8.0にアップグレードした
ITANDI Engineer Blog
はじめに イタンジ株式会社の李です。SREとしてイタンジプロダクトの信頼性を高めたり開発の効率を向上させるなどの活動をしています。 直近Amazon RDS for MySQLのメジャーバージョンをアップグレードする機会があったので、今回はその手順と工夫したことなどをまとめてみました。 背景 弊社のプロダクトで利用するデータベースは主にMySQL 5.7を採用していました。(Auroraを使用するかRDSを使用するかに関しては、プロダクトのユースケースに合わせて対応しています) RDSのMySQL 5.7の標準サポートの終了が今年12月中と予定されていたため、MySQL5.7使用中のDBインス…
1年前
ApplicationMailerのdeliver_nowメソッドが返す例外をRSpec Mocksでテスト
ITANDI Engineer Blog
はじめに こんにちは! イタンジ株式会社で更新退去くんというプロダクトを開発している沈です。 新卒一年目で学ぶことが多く、フロントエンド(Next.js)とバックエンド(Rails)両方の開発に携わり、システムがどのように動作するか、総合的に理解しています。直近は、Amazon SES(aws-sdk-ruby)が返すエラーに対して、エラーハンドリングを行いました。今回は、このエラーハンドリングを行った際のことを、ブログで発信していきたいと思います。 背景 メールの送信に失敗した場合に、エンドユーザーに原因が記載されたエラーメッセージを表示するため 仕様 SESから返されるエラーをApplic…
1年前
Open APIとCommitteeを利用したRSpecによるAPIテスト
ITANDI Engineer Blog
はじめに イタンジ株式会社で物件管理くんの開発をしている三島です。 物件管理くんでは、RailsによるAPIサーバを採用しており、テストにはRSpecを利用しています。 本記事ではOpen APIとCommitteeを使用し、RSpecでAPIテストを行う方法について記載します。 Committee Committeeは、OpenAPIで定義したスキーマに基づいて、アプリケーションのリクエストとレスポンスの検証を行うミドルウェアを提供してくれます。 Committee::RailsはCommitteeのラッパーライブラリでrailsへの導入を容易にし、OpenAPIの仕様の保証、開発の整合性と…
1年前
私の考える良いRSpecの書き方
ITANDI Engineer Blog
はじめに イタンジ株式会社の安倍です。今年7キロのダイエットに成功しました。 精算管理くん、家主管理くんの開発を行っています。 私は学生時代のインターンとイタンジにきて4つのプロダクトの開発に携わりました。その過程で自分のRailsのRSpecのコードの書き方に変化があり、昔と比べると読みやすくなった & テストの質も良くなったと感じたのでどんなRSpecを書いてきたのか、今考える良いRSpecの書き方はどのようなものかを今回紹介します。 ユーザー作成のapiのテストをするサンプルコードを元に紹介していきます。作成されたユーザーの情報を返すAPIです。 学生時代 学生時代のインターンではスター…
1年前
AWS RDSのデータベースエンジンをMySQLからAurora MySQLに変更したログ
ITANDI Engineer Blog
はじめに イタンジ株式会社の稲垣です。ノマドクラウドという不動産仲介向けのSaaSを開発しています。 最近はACVIにハマっており、本当はACVIの記事を書こうと思ったのですが、先日表題のようなネタになることをしてしまったのでそれについて書きます。 弊社サービスのノマドクラウドでは、DBとしてAWS RDSを採用しています。 RDSのデータベースエンジンとして、以前はMySQL 5.7 (以下MySQLと記載)を使用していました。 このデータベースエンジンをAurora MySQL(以下Auroraと記載)に変更したので、備忘録としてその手順と注意点をブログに残していきます。 モチベーション …
1年前
immersedで仮想作業空間にdiveしてみた
ITANDI Engineer Blog
はじめに 150cmくらいの高さがあるフェイクグリーンを買いました、ぶっかくん開発チームの阿部です。 最近引越しして部屋が広くなったのでインテリアやIoTの沼にハマりかけています。 今回はVRアプリ immersedを紹介しようと思います。 immersedとは VR空間にワーキングスペースを作成するアプリで、多種多様な景色にマルチモニターを展開できます。 また複数人でのコラボレーションも可能で、オフィスのような空間に各人のアバターを投影したり画面共有などもできます。 どうなる? 早速ですが導入するとこんな感じになります。 ※業務に関係するものが映らない様にグレーで塗りつぶしています モニター…
1年前
RBSとSteepに入門してみた
ITANDI Engineer Blog
はじめに イタンジ株式会社で物件管理くんの開発をしている河合です。最近、ミニシアターで「怪物」という映画を観てきました。作品の世界観と映画館の雰囲気が相まって、映画に没入できとてもいい体験になりました。 物件管理くんでは、フロントはTypeScript、バックエンドはRubyで開発を行なっています。最近チーム内でRubyにも型を導入しようという話になり、RBSとSteepを触ってみたため、今回はそれを記事にしようと思います。 型を導入するメリット エラーの機械的検出 静的型検査によって、開発者が意図していない操作(型に関するエラー)を機械的に検出することができます。加えて型定義を変更すれば、静…
1年前
Vimのグローバルコマンドでコード編集を高速化
ITANDI Engineer Blog
はじめに こんにちは! イタンジ株式会社で更新退去くんというプロダクトを開発している佐藤です。 最近Vimの魅力に取り憑かれてしまった一人です。 約3ヶ月前にVimに手を出して、もう後戻りできないくらい夢中になっています🤩 (VScode1年、RubyMine1年を経て、Vimに辿り着きました🎉) Vimは毎日新しい発見があり、とても面白いです! 特に、最近「グローバルコマンド(global command)」なるものを発見! 少し触ってみたところ、勉強しがいがあるかもと思いました! 今日はこのグローバルコマンドを一緒に勉強して行けたらなと思います。 グローバルコマンドって何? Vimにはたく…
1年前
AWS JumpStart 2023 設計編に参加してきました!
ITANDI Engineer Blog
はじめに ITANDI BBの開発をしている渡邉です。 8/8, 8/9に開催された「AWS JumpStart 2023 設計編」に参加したので体験レポートを書きたいと思います! aws.amazon.com イベント概要 大まかな流れは以下のとおりです。 事前学習 はじめてのアーキテクティング - YouTube AWS Solution Architect Associate資格勉強会(講義パート) - YouTube 1日目 講義 ハンズオン1 ハンズオン2 2日目 設計課題を個人で設計 設計課題をチームでまとめる fig1. スケジュール 1日目 講義 インフラ構築には絶対的な正…
1年前
TypeScriptのstrict オプションは最初から有効にしたほうが良いという話
ITANDI Engineer Blog
はじめに はじめまして、イタンジ株式会社で内装工事くんというプロダクトを開発している櫻井です。 最近見たおすすめの映画は「キャッチ・ミー・イフ・ユー・キャン」です。 早速ですが皆さん、TypeScriptは使っていますか? TypeScriptには型に関するいくつかのオプションがあり、その全てのオプションを有効化するstrict オプションがあります。 strict オプションを有効化すると、TypeScript のコンパイラによる型チェックを厳しくして、より安全なコードを書くことができます。 私が所属しているプロダクトではTypeScriptを使っているのですが、一部オプションを無効化してい…
2年前
AWS JumpStart 2023 運用編に参加してきました!
ITANDI Engineer Blog
はじめに 5/17に開催された「AWS JumpStart 2023 運用編」に、新卒2年目エンジニアの佐藤と小山が参加したので、体験レポートを書きたいと思います! イベント概要 このプログラムは、AWS初学者のエンジニアを対象としており、AWSサービスの学習だけでなく、運用時に直面する具体的なユースケースや課題に対する対応を自身で検討・実施できるようになることを目的に構成されています。今回は、AWS 運用時のIaC やCI /CD 、トラブルシュートについて講義形式で学んで頂いた後に、ハンズオンでそれぞれ体験してみるという内容でした。 IaC編 IaC編では、そもそもIaCとはから始まり、I…
2年前
CircleCIのダイナミックコンフィグでできないこと
ITANDI Engineer Blog
1. はじめに イタンジ株式会社の藤崎です。現在は、物件データ基盤の開発を担当しています。 先日、私達のチームが管理している4つのプロダクトのリポジトリを、コミット履歴を保持したま1つのリポジトリに統合する作業を行いました。 それぞれのプロダクトのCI/CDにはCircleCIを利用していたため、統合後のリポジトリのCI/CDも引き続きCircleCIを利用したのですが、 各アプリケーションのディレクトリ配下に差分がある時など、状況によって実行するワークフローを制御するために、 CircleCIのダイナミックコンフィグ を使用した構成にしました。 その際、ダイナミックコンフィグについて色々と調…
2年前
MySQLのALTER TABLEを監視するgemを作った話
ITANDI Engineer Blog
1. はじめに イタンジ株式会社の藤崎です。現在は、物件データ基盤の開発を担当しています。 今回は、弊社のとあるRailsプロダクトで使用するために作った「MySQLのALTER TABLEを監視するgem」を紹介しようと思います。 ※ MySQL/MariaDBでのみ使用できます RubyGems: https://rubygems.org/gems/mysql_alter_monitoring ソースコード: https://github.com/akito-fujisaki/mysql_alter_monitoring 2. 背景 弊社では、「リアルタイム」不動産業者間サイト ITAND…
2年前
Pydanticでフィールド間の値を検証する
ITANDI Engineer Blog
はじめに こんにちは、物件連動チームのコヤマです。 私たちのシステムでは、物件データのETL処理にPydanticを活用しています。物件情報には多様な条件や規則が存在するため、単一項目の型定義だけでは表現しきれない場合があります。そのような場合に、@validatorデコレータを使用してカスタムバリデーションを実装することで、複雑な制約を表現できます。本記事では、フィールド間のバリデーションについて紹介します。 キーワード @validator @validatorは、Pydanticのデコレータで、データモデルのフィールドに対してカスタムバリデーションを適用するために使用されます。このデコレ…
2年前
asyncioの非同期処理を試す
ITANDI Engineer Blog
こんにちは、物件連動チームのコヤマです。 本記事では、Pythonが提供する非同期処理ライブラリのasyncioを学習します。非同期処理を理解して使用できるようになることが目標です! 同期処理と非同期処理 同期処理 同期処理は、プログラムがある処理を実行している間、その処理が終わるまで次の処理を開始ません。 処理が完了するまで待ってから次の処理を実行するので、処理の完了までに時間がかかる場合は待ち時間があります。 非同期処理 非同期処理は、処理の完了を待たずに次の処理を開始する方式です。 非同期処理は待機時間を他の処理の実行に割り当てることができるので、複数の処理を同時に実行しているようになり…
2年前
Headless CMS + Next.js + Vercel で2年間サイトを運用した感想
ITANDI Engineer Blog
はじめに はじめまして、イタンジ株式会社で執行役員COOをしております永嶋です。 私は日頃から弊社エンジニアメンバーに「自分のプロダクトはいいぞ!楽しいぞ!」と言っており、私も個人で「Craft Beer Hunt」というクラフトビールのレビューサイトを運営しております。 このサイトは「Headless CMS + Next.js + Vercel 」で運営しているのですが、意外とこの構成でのサイト運営の知見がWeb上にないので、ここで紹介してみようと思います。 Headless CMSとは HeadlessのHeadは見た目のことで、そのHeadを除いたコンテンツ管理に特化したCMSのことで…
2年前
acts_as_paranoidで論理削除しているモデルを物理削除に戻す
ITANDI Engineer Blog
はじめに イタンジ株式会社の磯谷です。不動産賃貸仲介業向けのSaaSであるノマドクラウドの開発をしています。 今回は、Railsアプリケーションでacts_as_paranoidによって論理削除しているモデルを物理削除に戻すといったことを行ったので、それについて書いていこうと思います。 前提について 対象のモデルは、gemのparanoiaが提供するacts_as_paranoidを利用して論理削除を行っていました。ただ、このモデルについて論理削除されたレコードを後から利用していないことと、持っている情報の内容として物理削除の方が好ましいと考えられることから、論理削除をやめて物理削除に戻したい…
2年前
UMPC のすすめ
ITANDI Engineer Blog
はじめに はじめまして、イタンジ株式会社で ITANDI BB の開発をしている加藤です。 休日は個人サービスの開発をしたり、ジムで筋トレしたり前職のエンジニアと Discord でボイスチャットをしながらゲームをしていることが多いです。 今回は最近はまっている UMPC のことについて書いていこうと思います。 UMPC とは? まず、UMPC は Ultra-Mobile PC のことでノート PC とスマートフォンの中間くらいに位置するタブレット PC のことです。 画面が 9 インチほどで、重量も 1kg 以下のため持ち運びが楽なのが特徴ですね。 昔はノート PC ですら排熱と性能のトレ…
2年前
Embulk入門!Filterプラグインのサンプルコードを見てみる
ITANDI Engineer Blog
どうもこんにちは、イタンジ開発のコヤマです。物件連動チームに所属しています。 テックブログデビュー戦です。一発どうぞよろしくお願いいたします🤜🏻🤛🏻 背景 物件連動チームにはEmbulkを利用したプロダクトがあります。 私がチーム異動したのが最近であること、元々Embulkを知らなかったことから設定ファイルを見たり処理の流れなどを追ったりするのに苦労しました。 苦労したんですがなんとなくそのままになってたので、この機会によく見てみようと思います! 特に初見でよくわからなかったFilterプラグインにフォーカスします。 Embulkとは Embulkとはプラグインを利用して、データを効率的に転送…
2年前