自動テスト実行結果の目的を整理する / Organizing objectives of automated test results
Railsのプロジェクトがそこそこ大きくなり、ServiceやSerializerなどのカスタムレイヤーを追加してコードを細分化しているものの、レイヤーの役割やインターフェイスのルールが明確に決まっておらずふわふわとしていることを課題と感じていました。課題を解決するヒントを探すため、Railsの超巨大OSSプロジェクトであるGitLabの設計ドキュメントを読んでみました。 ガイドラインの必要性 まず初めにガイドラインの必要性が語られています。レイヤーの抽象化ができたとしても、それを正しく使えないと、あっという間にメンテナンスしにくいコードができてしまうということが説明されています。 例として、あるFinder(Finderはデータベースからデータを検索する抽象)の中で別のFinderを呼び出してはいけないということが挙げられています。もしそうしたなら、Finderにどんどんオプションが追加
Rails 6.0の複数DBのレビューしてるときに気づいたことなんですけど、たぶんリードレプリカからデータを読むテストをするのたぶん大変だと思われます。 うちの業務のアプリでActive Recordが更新を検知できない方法でデータが更新されるとテストがコケるという問題が以前にあり、これと同じ構造の問題がマスターのコネクションで更新したときマスターのコネクションのクエリキャッシュはクリアされるけどリードレプリカのコネクションのクエリキャッシュは残ったままというのがあるよね、というのをテストコードで示そうと思ったときのことである。 github.com 通常RailsアプリでDBつかったテストをするとき、テストの中で変更されたデータを毎回初期状態に戻すのにフィクスチャーをロードし直すのは時間がかかって効率がわるいので、テストケースに入る前にトランザクションを開始しといてテストケース終わったら
こんにちは、サーバーグループの市川です。モバイルクライアントグループに所属していましたが、バックエンドの開発を担当することが多くなったので、サーバーグループ異動にしました。 最近、Studyplusブックというサービスをリリースしました。Studyplusアプリ内で、200冊以上の参考書が読み放題で使えるサービスです。 このサービスの開発にあたって、社内向けの管理画面を新規に構築したのですが、Rails 7から標準でインストールされるHotwireを利用することにしました。 今回はHotwireを実際に利用する上で、どういったUIを作ればいいか試作しましたので、その話を書きます。 作った画面 書いたソースコード 使った技術 解説 Turboを理解する Turbo Frameでフレーム分割する 追加フォーム (Turbo Frame) 追加処理 (Turbo Stream) 編集フォームと更
株式会社モバイルファクトリーの100%子会社である株式会社ビットファクトリーは、ブロックチェーン×位置情報連動型ゲームであり、「ステーションメモリーズ!」(略称:駅メモ!)の最新シリーズとなる、「駅メモ! Our Rails」を2020年8月3日(月)よりWebブラウザ向けに配信開始します。 「駅メモ! Our Rails」概要 「駅メモ! Our Rails」(略称:アワメモ!)では、ユーザーがプレイヤーとしてプレイするだけではない、さまざまな体験が可能になります。 駅メモ!の既存機能にユーザー自ら駅を盛り上げることができる「フェア機能」、トークン化された駅(以下、駅トークン)を購入して、ユーザー自身が駅のオーナーになれる「ステーションオーナー機能」の2つの新機能が加わります。ユーザーが主体となって、ゲームに参加することで実際の駅を盛り上げることや収入を得ることができ、ゲーム内での働きか
こんにちは。WEARリプレイスチームの id:takanamito です。 先日、社内で初めてAWS Fargate上でRailsを動かす環境をつくったので、その事例報告をしようと思います。 Fargate導入のきっかけ コンテナ環境で動かすにあたって考慮したこと assets配信 ログ出力 秘匿情報の注入 リソース監視 苦労した点 まとめ Fargate導入のきっかけ WEARでは先日RubyKaigi 2019のスポンサーセッションでお話したように、Ruby on Railsへのシステムリプレイス作業を進めています。 そんな中、手作業で行っている運用を管理画面上でツール化したいという要望が上がってきました。リプレイス作業中であるため、できれば新機能はRailsで実装をしたいところです。しかし管理画面に相当するアプリケーションをデプロイするインフラはまだありませんでした。 WEARリプレ
Rubyist Hotlinksにインスパイアされて始まったRubyistめぐり。第1回は高橋征義さんをゲストに迎えて、お話を聞きました。こちらは後編です。前編はこちら。 Rubyが他の言語に与えた影響 藤村:第2部、高橋さんについて聞いてみようと思います。今更ながらRubyについて聞きたいんですけど、好きな機能とかありますか? 高橋:好きな機能ですか?あんまり機能としてこれというのなくて、全体的に使い勝手がいいですね。まあでも、そういう意味でいえばオープンクラスの方がいいんじゃないの?みたいな感じがしますね。オープンクラスじゃないRubyはつらそうだって。 藤村:確かに。 高橋:つらそうというかつまらなさそうですね。オープンクラスが原因でつらいことになるのはわかるんですけど、でもあれがないんだったら他の言語でもいいよね、って。 藤村:Rubyがああじゃなかったら他の言語は今のようになって
シニアソフトウェアエンジニアのusadamasaです。 マネーフォワード クラウド会計とそれに関連するマイクロサービス群の開発運用を担当しています。 本記事では、クラウド会計という10年もののRailsアプリの持続可能性をいかにして確保していくかの取り組みをご紹介します。 TL;DR 私が所属するチームでは、クラウド会計の開発運用における課題を整理し、それぞれの課題に対して解決策を検討し、実行するための取り組みを進めています。 最初にクラウド会計の全体の構造を明らかにし、課題を可視化、組織の共通認識としました。 その上で銀の弾丸を求めるのではなく、有期かつ漸進的な改善のプロジェクトとして計画することが成果に繋がります。 クラウド会計の現状 クラウド会計はマネーフォワード クラウドの代表的なプロダクトの一つです。 2013年にリリースされてから10年、多くの機能追加や改善を重ね、現在では沢山
なんとなくパターン・ランゲージ(パターンカタログ)のスタイルが懐かしくなったので、あのスタイルを思い出しながら書いてみます。 目的 特定のアプリと完全に同期していますが、機能的には独立したライブラリをアプリ内のgemとして提供するものです。 動機 アプリで使いたい機能として、ある程度の独立した機能を実装したい 単独のクラスやモジュールとして実装できるものではなく、複数のクラス等が関連して動く程度の粒度を想定する(ので、個別のファイル単位よりはもう少し大きい粒度になる) 独立した機能とアプリが渾然一体となり、気がつくと境界を侵食したり侵食されたりしてしまうことは避けたい 適用可能性 いくつかのclassやmoduleがアプリケーションに依存せず、独立した機能になっている場合 特定のRailsアプリからしか使われる予定がない(共有する必要・予定がない)場合 一定期間しか利用せず、どこかのタイミ
私たちは Ruby on Rails の主要なマルチテナントライブラリ apartment を使ってサービスを提供しています。 Ruby のバージョンを 3.1 系から 3.2 系に上げたときに CSV ファイルを処理する部分でこのテナントの切り替えが意図通りに動作しませんでした。 この事象が興味深かったので共有します。 現在はこの事象に対応済で、私たちの環境は Ruby3.2 系で動作しています。 apartment ではマルチテナント対応部分をほとんど吸収してくれるので、アプリケーションのコードのほうにはあまりマルチテナント特有の処理が出てこず、個別処理のコードに集中できるメリットがあります。 事象が発生したコードは以下のような形式でした。 CSV.parse(filename, headers: true, header_converters: ->(header) { curren
コンテナイメージビルドが遅いなら、Kaniko使うと幸せになれる(全部入りRails Dockerfileを参考に) 結論 BuildKit対応してないCI/CD(サービス)使ってるならKaniko使えば早くなるよ Google Cloud Build使ってるなら迷わず使っておくべき Amazon Elastic Container Registry(ECR)でも問題なく使用できる この記事の例でいうと未キャッシュからフルキャッシュなら 288秒→132秒に短縮(約2倍) 御託はいいのでどう書くか教えて ここに書いてますので、自分の使ってるCI/CDサービスに当てはまるのを選んで参考にどうぞ https://github.com/chimame/kaniko-example 本題 長いうんちくや説明を知りたい人向けです。 この記事で記載するのはAmazon Elastic Containe
はじめに先日ワークビザを取得し、自分の中でカナダに来てからの最低限の目標をクリアできたと感じたので、これまでのことを記録し、これからの目標を改めて確認したいと思い筆を取ります。今回の僕のように、ある程度日本でエンジニアとしての経験を積んだ後、移住を目的にトロントで働いている、という記事は僕がまだ移住を模索していた2018年当時見かけなかったこともあり、この記事が今後誰かしらの参考になればと思います。とりあえずはStay Home中の暇つぶしにでもなれば幸いです。 尚、この記事ではカナダやトロントがいかに住む場所としていいか(気候含む)などについての言及はしません。 誰?@tooooooooomy です。GitHub上では@kazu9su です。アカウント取得当時インターネットに疎くてアカウント名を統一しなかったことは未だに心残りです。 新卒でマーケティング・リサーチ事業の会社で4年ほど働い
こんにちは、タイミーデリバリー開発チームの宮城です。 今回は弊社のOpenAPI3ベースのスキーマ駆動開発の運用方法を紹介します。 TL;DR 技術スタックは OpenAPI3, Swagger UI, Committee, ActiveModelSerializers Committeeを利用してOpenAPI準拠のRequest Specを行う OpenAPI3のrequiredキーワードに注意する 背景 タイミーデリバリーでは、RailsによるAPIサーバーと、Web管理画面としてVue.jsによるSPA、ユーザー向けiOSアプリとしてSwiftを採用しています。 1つのモノリスなRailsで利用者別にネームスペースを区切り、それぞれエンドポイントを提供しています。 サーバーサイドとクライアントサイドを分離し並行して開発を進めるためにスキーマ駆動開発を導入しました。スキーマ駆動開発の
皆さんこんにちは、とらのあなラボのY.Fです。 先日、弊社エンジニアが開発で関わっているCreatiaで、以下のお知らせが投稿されました。 【新機能のご案内】#クリエイティア にて、『パスワードレスログイン』機能をリリースいたしました。 パスワードの代わりに指紋や顔認証、PINコードを使って、スムーズかつ安全にクリエイティアにログインできるようになりました! ▶詳細は下記記事をご参照くださいhttps://t.co/FzsVIAl7Sp— クリエイティア[Creatia]@ファンクラブ開設費無料! (@creatia_cc) 2023年6月8日 弊社のサービスは、とらのあな通販やサークルポータル除いて、ほぼRuby on Railsを利用しています。 speakerdeck.com 今回の記事では、Ruby on Rails + WebAuthnについて、調べたことなどをまとめてみたいと思
Rails 6.1の目玉機能として以下のように書けるwhere拡張を入れてたんですが、いろいろあって6.1からはrevertされてしまいました🥲 posts = Post.order(:id) posts.where("id >": 9).pluck(:id) # => [10, 11] posts.where("id >=": 9).pluck(:id) # => [9, 10, 11] posts.where("id <": 3).pluck(:id) # => [1, 2] posts.where("id <=": 3).pluck(:id) # => [1, 2, 3] github.com github.com なんですが、そんなことで引き下がる僕ではないので、6.1ではpredicate生成に干渉できる拡張ポイントを用意しており、以下のようなコードを適当に読み込まれるところに
3.インフラ(全体構成)について ここから技術的なことについて話していきます。 まず大前提として、プロジェクトの全体構成は、Happiness Chain の卒業課題の条件に基づいて決めれらていました。これらの条件には以下が含まれます Rails APIモード / Reactで完全SPAのポートフォリオを作る。 本番環境と開発環境にDockerを使う。 本番環境にはECS Fargateを使う。 GitHub Actionsを使ってAWSに自動デプロイする。 Terraformでインフラをコード化する。 なので、これに倣って実装しています。 アーキテクチャの全体像 フロントエンドはVercelにデプロイして、バックエンドはAWSのECSにデプロイしています。 ブランチ運用は、GitHub flowを採用しています。 プルリク時にテストが走り、mainブランチにマージされるとデプロイされる感
どうもこんにちはせせりです 最近Rails歴10年になりましたパチパチパチ 世間的には全く知られていないモブ深海魚みたいな存在でしたが質問箱というTwitter連携のサービスが流行った事で少し知名度があがりましたいぇいいぇい さて、僕は28歳となりますが幸いなことに学生時代から始まり今に至るまで大きなつまづきも無く自分のサービスをほそぼそ作って生きて来ることが出来ましたいぇいいぇい そう……一度も就職をしたことがないのです 一度も就職をしたことがないということは 俗に言うチーム経験というものがほぼなし 誰かのrailsプロジェクトのソースコードを読んだ経験もほぼなし 誰かにプログラムを教えてもらった事もほぼなし と完全にソロプレイヤーをキメて来たわけですこの広い世界で 漠然とした”ヤバイ”今後も一生ソロプレイヤーを続けて行くというのはかなりピーキーな生き方なのでそのうち起業したりチームに所
Googleは、同社がクラウドサービスとして提供しているCloud SpannerをRailsのActive Recordに対応させるアダプタ「activerecord-spanner-adapter」が正式版となったことを発表しました。 Cloud Spannerは、Googleの多数のデータセンターにまたがる地球規模で大規模分散処理を行うリレーショナルデータベースです。事実上無制限とされる高いスケーラビリティと99.999%の高可用性を備えつつ、強い一貫性とトランザクション処理、SQLによるクエリなどを実装しています。 メルカリの決済サービスであるメルペイがバックエンドデータベースにCloud Spannerを採用し、数百万ユーザーの処理を行っているとされています。 このCloud SpannerをRailsのActive Recordのバックエンドデータベースとして使えるようにするア
メドピアマッスル部上腕二頭筋担当、CTO室 kenzo0107 です。 今回はメドピアの直近のプロジェクトで採用している Rails × ECS Fargate についてです。 直近プロジェクト 直近プロジェクトでは AWS ECS を採用しています。 2018年10月にリリースした スギサポ deli は、メドピアで Fargate 初採用となったプロジェクトです。 スギサポ deli とは? sugisapo.ws 病気で食事制限が必要な方やシニアの方々、より健康な食生活を目指す方など、誰もが美味しく召し上がれるお食事をお届けするサービスです。 「食事制限」 と聞くと、簡素な食事をイメージされる方もいらっしゃると思いますが 一度見て頂くとお分かりの通り、かなりバラエティに富んだ内容となっており、目にも美味しい品々が並んでおります。 是非一度お試しいただければ幸いです♪ 今回お話ししたい
本日はコンシューマチームのブログリレー2日目です。 エムスリーエンジニアリングG コンシューマチームの松原(@ma2ge)です。 今回は以前筆者が M3 Tech Talk で話した AWS Lambda での Web アプリ開発に Rails を使う内容について、 若干内容を変えつつ Tech Blog の方でも紹介をしたいと思います。 最近使っているキーボードの様子 現在のチームで担当している主要なアプリは Rails で書かれていて、ほとんどがコンテナ化され Amazon ECS(ECS) と Fargate を使って運用されています。 そんな中今年の初めに AWS Lambda(Lambda) に適したプロジェクトが話にあがりました。ただ Rails で Lambda しかも Web アプリとなるとあまり採用事例を耳にしません。 とはいえ使い慣れている Rails をそのまま生かし
はじめに サービス構成 レポジトリ一覧 サーバー側Railsアプリ クライアント側Railsアプリ 開発の流れ 利用ツール swagger-cli committee-rails 不具合1: ファイルの分割 不具合2: $refとnullableの同時使用 json-schema openapiの記法に合わせた機能拡張 openapi-generator-cli (Ruby client) 不具合1: 中途半端な型チェック 不具合2: oneOf/anyOfに非対応 factory_bot 終わりに We are hiring! はじめに 前回の記事では、OpenAPIで新しいウェブAPIを定義する際に、yamlのままで読みやすいようにファイル構成等を工夫した話をしました。 今回はそのAPIスキーマを使って、Railsでスキーマ駆動開発を実現するにあたって利用しているツール類についてお話し
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Security Best Practices for Your Rails Application | AppSignal Blog 原文公開日: 2022/10/05 原著者: Paweł Dąbrowski サイト: AppSignal Blog 参考: 週刊Railsウォッチ20221011 Railsのセキュリティベストプラクティス 日本語タイトルは内容に即したものにしました。原文の章インデントは訳文で一部を変更しています。 以下のRailsセキュリティガイドも合わせてお読みください。 参考: Rails セキュリティガイド - Railsガイド Webアプリケーションを構築するときは、パフォーマンスや使い勝手を重視するのはもちろんですが、セキュリティにも注目する必要があります。ハッキング手法は、技術の進化と変わらない
はじめに (背景) 昨年のクリスマスにRuby 2.7.0がリリースされました。 Ruby 2.7は今年リリース予定のRuby 3への移行を見据えたバージョンであり、多くの新機能や変更点があります。そこで、弊社が企画制作する『Babyプラス』のRailsアプリをRuby 2.6.5 -> 2.7.0に上げて動かしてみたところ、約1,000件のテストケース実行に対して6件のエラーと2,700件ほどのワーニングが発生しました。この結果の分析によりRuby 2.7移行について傾向と対策が見えてきたので、現時点 (2020/01/08) で分かったことを共有します。 結論 (Ruby2.7移行についての傾向と対策) 傾向として、多くのgemがRuby 2.7.0からワーニングとなる言語仕様変更の影響を受ける 具体的には、ブロック無しProc.new/proc/lambdaおよびキーワード引数 (k
これは「フィヨルドブートキャンプ Part 1 Advent Calendar 2020」の4日目の記事です。 フィヨルドブートキャンプ Part 1 Advent Calendar 2020 - Adventar 昨日は hogucc さんの Rubyでリファクタリングをやってみよう でした。 Part2 もあります。 フィヨルドブートキャンプ Part 2 Advent Calendar 2020 - Adventar また、この記事は2020年ふりかえりアドベントカレンダー 4日目です。昨日の記事は 「数学ガールの秘密ノート/学ぶための対話」感想 です。 今日はフィヨルドブートキャンプで最も苦しんだプラクティス、Ruby on Rails についての思い出を書こうと思います。随分長くなってしまいましたが、ふわっとした話なので暇なときにでもどうぞ.. フィヨルドブートキャンプで Rub
まずは Ruby on Rails の公式チュートリアルに沿って Rails アプリケーションを作るところから始めます。 チュートリアルをざっとみた感じ、Rails アプリケーションを作成するためには rails コマンドだけではなく node や yarn など様々なソフトウェアを実行環境にインストールする必要がありそうです。 突然ですが、僕はローカル環境にいろいろインストールしたくない勢です。AWS Cloud9 のようなクラウド IDE サービスを使う方法もありますが、理由は特にないけどローカル環境で完結させたいんです、そんな思いを持つ方も多くいらっしゃるかと思います。そこで連載の第 1 回となる本記事では、以下をゴールに進めていきます。 Rails チュートリアルで必要と書かれている依存ソフトウェア (rails, node, yarn など)をローカル環境にインストールせずに R
r7kamuraと言います。2020年9月頃からANDPADの開発に参画しています。 2021年2月、ANDPADで利用しているWebアプリケーションフレームワーク Ruby on Rails (以下Rails) のバージョンを5.2から6.0にアップグレードしました。今後アップグレードを行う方が同様の作業を行えるよう、今回の変更に伴い必要となった作業について、あらためて言語化してこの記事で共有できればと思います。 全体の流れ 大まかに分けると、今回は次のような手順で作業を進めていきました。 Rails 5.2系の最新のバージョンに上げる Rails 6.0版のブランチを用意してテストを通す Rails 5.2と6.0に両対応したコードに変更する Rails 6.0で検証を進める Rails 6.0に本番環境を切り替える Rails 5.2向けの対応を取り除く Gemのバージョン変更 Ra
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: System of a test: Proper browser testing in Ruby on Rails — Martian Chronicles, Evil Martians’ team blog 原文公開日: 2020/07/14 著者: Vladimir Dementyev サイト: Evil Martians — ニューヨークやロシアを中心に拠点を構えるRuby on Rails開発会社です。良質のブログ記事を多数公開し、多くのgemのスポンサーでもあります。 日本語タイトルは内容に即したものにしました。画像は原文からの引用です。 本記事で、Ruby on Railsアプリケーションにおけるエンドツーエンドのブラウザテストのベストプラクティス集を学び、自分たちのプロジェクトに採用しましょう。JavaベースのSel
ネイト・ベルコペック (@nateberkopec) SpeedShop(詳細),Railsパフォーマンス・コンサルタンシー 要約:Rails開発者の多くが、ActiveRecordがSQLクエリを実際に実行する条件を理解していません。よくある3つのケースを見てみましょう:countメソッドの誤使用と、サブセットをセレクトするためのwhereの使用、そしてpresent?です。 断言しましょう。あなたはこの3つのメソッドを使い過ぎていて、無駄なQueryとN+1を発生させているでしょう。 (字幕:なんて奇妙な謎だ、バットマン!) "いつActiveRecordがクエリを実行するかって?知るか!" ActiveRecordは素晴らしいです。本当に。しかし抽象化されているので、データ・ベース上で実行されている実際のSQLクエリに無頓着になりがちです。ActiveRecordがどのように動作す
2019年7月6日、株式会社サイバーエージェントが主催するイベント「Battle Conference U30」が開催されました。30歳以下のエンジニアによる30歳以下のエンジニアのための技術カンファレンスである本イベントには、さまざまな領域で活躍する若手が登壇。企業の枠を超えて、自身の技術・事業・キャリアに関する知見を発表しました。「システムリプレイスで事業を変える開発戦略」に登壇したのは、株式会社エイチームライフスタイル・鈴木就斗氏。 社内共通システムをリプレイス 鈴木就斗 氏:それでは「システムリプレイスで事業を変える開発戦略」ということでお話させていただきます。エイチームのグループ会社である株式会社エイチームフィナジーの鈴木就斗です。ちなみにみなさん、エイチームという会社を知っていますか? 聞いたことある方は手を挙げてほしいんですけど……。 (会場挙手) ありがとうございます。パラ
著者の1人である すがわらまさのりさん から恵贈賜りました『パーフェクト Ruby on Rails 【増補改訂版】』、とても読みたかった本なので嬉しいです。ありがとうございます! パーフェクトRuby on Rails【増補改訂版】 2020/7/25日発売ですが、店頭に並んでいるところもあるようです。 Railsの基本から実戦レベルの応用、最近のナウいRails環境も書かれており、パーフェクトな内容で、初心者から上級者にもオススメの書籍です:) 「パーフェクト Ruby on Rails」の初版は、2014年7月10日とあるので、約6年ぶりの増補改訂版ですね(Railsのバージョンは、初版で4.0-4.1でしたが増補改訂版では6.0です。月日の流れを感じますね)。 表紙Rubyを乗せた列車のCG、初版の列車と比べるとだいぶテクノロジーが進化した感じの列車になっていて速そうです。下の方
STORES 予約 でwebアプリケーションエンジニアをやっております。ykpythemindです。 Rails開発で、どのようなアプリケーションでも抑えておくとチーム開発が少し楽になるポイントがあります。今回はいくつか実例を載せながら紹介します。 アプリケーションの設計的な部分や実装には踏み込まず、すぐに導入できます。 あくまでRailsアプリケーションについての記事ですが、他言語やフレームワークを用いていても同様のことができます。 1. シードデータが壊れないようにCIで担保する 新しいメンバーが入って環境構築をしてもらう度にシードデータが壊れており、 db/seeds.rb *1 を直すという作業を何回か経験しています。db/seeds.rbで実行する内容をテスト中に実行しておくとメンテされるようになります。 # db/seeds.rb # 定数データが必要であればここで呼ぶ req
こんにちは。技術部クックパッドサービス基盤グループの青沼です。当グループではクックパッドのレシピサービスを支える web アプリケーションの改善を進めています。今回はフロントエンドの改善の一環として、 Babel と Rollup を Rails のアセットパイプラインに組み込み、レガシーな CoffeeScript ファイルを ES2015+ の JavaScript に移行した話をします。 レシピサービスと CoffeeScript の歴史 クックパッドは10年以上の歴史を持つサービスです。中でもレシピサービスの web アプリケーションは初期に作られた Rails 2 アプリケーションがアップグレードを重ねながら今も動いています。2018年には Rails 3 から4へ、つい最近では4から5へのアップグレードを完了しました。 Ruby のコードはそれに伴って新しい書き方へと徐々に移行
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く