こんにちは、2022年4月にフォースタートアップスにジョインしたエンジニアの八巻(@hachimaki37)です。入社から早半年間が経ちました。引き続き、社内向けプロダクト「タレントエージェンシー支援システム(SFA/CRM)」のシステム開発を担当しております。 はじめに 百聞は一見にしかず!ということで、まずはどんなモノか動画をご覧ください(34秒) ご視聴ありがとうございました。今回のTech Blogは 、「Figma APIを使用し、svg形式のアイコンを/figma/images配下にインポートするrake taskを実装してみる」です。開発の背景や目的、苦労話などを交えながら執筆し…
実例 クォートで囲まないと NG。 $ bundle exec rails foo_task:barbar[hoge,fuga] zsh: no matches found: foo_task:barbar[hoge,fuga] クォートで囲むと OK。 $ bundle exec rails "foo_task:barbar[hoge,fuga]" (正常処理)
今回は記事投稿アプリにバッチ処理の実装をしてみます。 最終的にはこんなことをやりたいです。 やりたいこと 記事の状態が「下書き」「公開」「公開待ち」と3種類あります。 例えば記事の公開日を1日後にすると記事の状態は「公開待ち」になります。 時間が経って公開日を過ぎたら自動で記事が公開されるようにしたいです。 必要なもの ・Rakeタスク ・cron ・whenever これらを使って自動で記事が公開される仕組みを作っていきます。 具体的に言うと1時間毎に記事の公開日時が現在時刻を過ぎているか判定し、過ぎていれば記事の状態を「公開」に変更します。 このように一定の間隔で処理を行うことをバッチ処理…
こんにちは。バックエンドエンジニアの須貝(@sugaishun)です。 今回はタイミーが本番運用しているRailsアプリケーションに対してRuby3.3.0へのアップデートを行った(YJITは引き続き有効なまま)のでその結果をご紹介したいと思います。 昨年弊社のid:euglena1215が書いたエントリーのRuby3.3.0版です。 tech.timee.co.jp 前提 タイミーのWebアプリケーションとしての特性は基本的には昨年と変わりありません。ですので、昨年の内容をそのまま引用させてもらいます。 タイミーを支えるバックエンドの Web API は多くのケースで Ruby の実行よりも…
こんにちは、YOUTRUST Webエンジニアの寺井(YOUTRUST/X)です。 YOUTRUSTではユーザーや募集において職種を設定することができます。 しかし、実はユーザーで設定できる職種(ユーザー職種)と募集で設定できる職種(募集職種)では、これまで全く別のマスタテーブルを参照していました。 別々のマスタテーブルを参照しているユーザー職種と募集職種 そのため、それぞれで設定できる職種が微妙に異なっていたり、ユーザー職種をもとにして同じ職種の募集をレコメンドするなどができない状態となっていました。 今回は、Webアプリとネイテイブアプリの両方でダウンタイムを発生させずに、2つのマスタテー…
こんにちわ。 Baseconnectバックエンドエンジニアの河野です。 今回は弊社営業支援ツール「Musubu」で提供している機能の一つに活動履歴という、営業案件に対してユーザーが行なったアプローチをログとして残すものがありますが、その活動履歴について新しいDBに対して非同期でレプリケーションを行うパイプラインの整備&技術検証などを行なったのでシェアできればと思っております。 プロジェクト背景 この活動履歴という概念がサービスの要件として登場したのは創業初期の段階で、詳しい事情は知らないのですが現状DynamoDBをマスターDBとして利用しています。 NoSQLでスキーマレスなデータ構造に強く…
こんにちは。サーバーグループ エンジニアの山田です。 今回はRails7.0からRails7.1へのアップグレードを行なった際に、ActiveRecord Encryptionで発生したエラーとその対応について紹介します。 同様のエラーに遭遇した方の参考になれば幸いです。 ActiveRecord Encryptionによる属性の暗号化 決定論的暗号化と非決定論的暗号化 発生した事象 エラーの原因 SHA256に変わった経緯 対応方法 hash_digest_class support_sha1_for_non_deterministic_encryption 採用した方法 まとめ Activ…
Railsを使っている中で、「トランザクションの中だとモデルのid列はいつ設定されるのか」が気になったことから、確認してみたときのメモを残します。 目次 環境 動作確認 余談:Railsのバージョンにより、トランザクション内での return 等の挙動が変わる ソースコード 環境 Rails 7.1.3 DBはデフォルトのSQLite3 また、今回は以下のモデルとマイグレーションを用意します。 apple.rb class Apple < ApplicationRecord end モデルに対するマイグレーションファイルはこちら。 class CreateApples < ActiveReco…
はじめまして。開発部の深野です。 今回は飲食店ドットコムの中のスカウト対象者検索という、サービス内でも一番DB負荷の高かった機能にOpenSearchを導入したので、導入時に検討したことと導入結果を紹介します。 シンクロ・フードのエンジニアブログでは、以前にも求人飲食店ドットコムの求人検索という機能にOpenSearchという全文検索エンジンを導入したことを紹介したことがあります。そのため、OpenSearchについて詳しく知りたい方は是非こちらの記事を先にお読みください。 OpenSearch の導入による検索システム改善のための認証・認可設計と負荷検証結果 求人飲食店ドットコムの求人検索に…
イベント概要 2023年11月15日に「GENBA #1 〜RubyとRails開発の現場〜」と題してRuby/Railsでの開発に関するトピックでタイミーとエンペイ社合同で勉強会を開催しました。 その中でタイミーバックエンドエンジニアの正徳さん a.k.a 神速さん(@sinsoku_listy)の発表「Railsアプリと型検査」をイベントレポート形式でお届けします。 登壇者情報 Railsアプリと型検査 RBSの基本 RBSとは RBS(Ruby Signature)は、Ruby 3.0から導入された言語機能で、Rubyのコードに型情報を追加し、型検査と入力補完を可能にするための言語です。…
Kamal で、コンテナ作業をしたいとき kamal app exec -i --reuse "bin/rails console" などと入力するのは大変です。 以下のような rake タスクを作っておくと、rails kamal:console などで実現できて便利かと思います。 lib/tasks/kamal.rake namespace :kamal do task :ssh do sh 'kamal app exec -i --reuse bash' end task :console do sh 'kamal app exec -i --reuse "bin/rails conso…
この記事では、Fly.ioのcronを設定してRailsアプリのrakeタスクを定期実行する方法を解説します。 1. 開発環境 2. 手順 2-1. サンプルアプリを作成 2-2. rakeタスクを作成 2-3. Fly.ioにデプロイ 2-4. cronの設定を追加 2-5. eventsテーブルにデータを追加 2-6. rakeタスクの定期実行を確認 1. 開発環境 Ruby:3.3.0 Rails:7.1.2 PostgreSQL:15.3 MacBook Pro (13-inch, 2020) macOS Sonoma 14.2.1 2. 手順 2-1. サンプルアプリを作成 まずはサ…
これは Livesense Advent Calendar 2023 DAY 15 の記事です。 はじめに 転職ドラフト事業部でエンジニアをしている冨田です。 今回は転職ドラフトでバッチ処理を管理するために使っているecscheduleに v0.10.0 から追加されたpruneオプションを使おうとしてハマっていることについて書きたいと思います。 バッチ処理の運用(現状) 転職ドラフトは、Ruby on Railsを使ったシンプルなモノリス構成であり、AWS上(ECS on Fargete)で動いています。日々の運用で必要な定期的に実行したい処理、いわゆるバッチ処理はRakeタスクで定義してお…
こんにちは!サーバーサイドエンジニアの mitani です。 B/43のサービスの裏側では機械学習を使っている箇所があり、機械学習用のパイプラインとAPIに全てSageMakerを利用しています。今回はなぜSageMakerを採用したのかと、構築時に意識したことについて紹介したいと思います。
こちらはTimee Advent Calendar 2023シリーズ1の5日目の記事になります。 昨日は @redshoga による Vercel REST APIを用いたステージング環境反映botについて で明日は @yama_sitter による フロントエンドアプリケーションの認知負荷とテスタビリティに立ち向かう です。 タイミーでバックエンドエンジニアをしている id:euglena1215 です。 タイミーはユーザー向け・企業向け・社内向けの機能を1つの Rails アプリケーション上で動かしています。 10/5に Rails 7.1 がリリースされ、タイミーも11/1に 7.1.1…
コード整形 docker compose run --rm web bundle exec rubocop -A docker compose run --rm web bin/htmlbeautifier binding.pry docker attach rails_ec-web-1 DBリセット&seed追加 docker compose run --rm web bundle exec rails db:migrate:reset docker compose run --rm web bundle exec rails db:seed # rake taskの実行 docker co…
こんにちは、プロダクト開発部の藤田です。 今回は Amazon ECS(以下、ECS) と AWS Step Functions(以下、Step Functions) を組み合わせた「ワンショットタスクの実行基盤」についてご紹介します。 「ワンショットタスク」とは、指定されたコマンドやスクリプトを1度だけ実行して、終了するタスクのことです。 このようなワンショットタスクは「プライベートネットワークの内側にあるリソースへのアクセスが必要な、非定型的な操作」を実行する際などに用いられます。 例えば、プライベートネットワークの内側にある DB に対して、以下のような作業をエンジニアが実施する際に、s…
今日は主に拡張ライブラリ io/console のバージョン更新などがありました。 [c49adfab5d] Hiroya Fujinami 2023-11-09 16:24:15 UTC doc/regexp.rdoc の正規表現ドキュメントに Optimization というセクションを追加してメモ化による最適化についての紹介とそれが効くようなパターンの説明などを追記しています。なお一番大事なのは "However, an untrusted source may not be safe" ってところで任意入力を Regexp にコンパイルするのはやめましょうということですね。 https…