Kaigi on Rails 2023 "管理機能アーキテクチャパターンの考察と実践" https://kaigionrails.org/2023/talks/ohbarye/ 管理機能という身近な題材で アーキテクチャについて考えてみよう、というテーマの資料です。B/43というプロダクトで実際に行った選択と運用の工夫も含みます。
自己紹介 はるなと言います🐰🍤 2021年4月から2022年5月までフィヨルドブートキャンプを受講していました。 現在は株式会社キャタルでエンジニアとして働いています。 前職は保育園の看護師をしていました。 好きなRubyのメソッドはobject_idです。 アプリについて www.vaccination-plan.com お子さんの予防接種の予定を自動で計算するサービスを作りました。 できること お子さんのお誕生日と接種履歴から予防接種の予定日を自動で割り出します。 予防接種の規定は国立感染症研究所や厚生労働省などで定義されていますが、 今回は小児科学会が推奨している規定日数を使っています。 https://www.jpeds.or.jp/uploads/files/vaccine_schedule.pdf 技術スタック Ruby 3.1.2 Ruby on Rails 6.1.5
David Bryant Copelandさんが書いた、Railsについてのこだわりの詰まった本。 takahasimさんも『Sustainable Web Development with Ruby on Rails』はRails使ってるなら絶対面白いと思うと言っていたように、面白い。これまでRailsを使ってきた中で、楽しいこともつらいことも沢山あったんだろう。そういうことが感じ取れるような話が展開されている。 幾つかの気になった話題を拾い上げて、自分の感想を述べていきたい。気になる話題は100個ぐらいあるが、がんばって10個ぐらいに留めたい。 Don’t Create Custom Actions, Create More Resources Railsが提供する7種類のアクション名以外使うな、必要なら新しくリソースをつくれ、という主張。つまりDHHはどのようにRailsのコントロー
導入経緯 当社は受注開発のIT企業である。2023年に長らくお世話になったVimの利用を辞め、VSCodeを使い始めた。 当社の実情 当社のエンジニアは2022年時点で全員がVimを使っていた。当時の案件はメインがRuby on Rails関連であったことも相まって、世に出回る便利なエディタ、IDEに関する情報感度が極めて低かった。 Rails案件ではVimを使うことに対して大きな問題はなかった。補完がある程度効けばバックエンドの実装に支障がないからである。エンジニアとしてそれでいいのかという葛藤は当然あったが、当社のエンジニアは日々の業務をこなすことに集中していた。 (設立当初から積み上げられた歴史としてのvimrc) 転機 ついにその時が来てしまった。 そう、Vue、Typescript案件が唐突に現れたのである。 当社のエンジニアは皆狼狽した。 Vimで培われた爆速タイピングは、es
freee人事労務の品質改善を専任で活動している keik です。 freeeではアプリケーションパフォーマンスモニタリング(APM)に Datadog を利用しています。 SRE チームが導入し、アプリケーション開発チームに利用提供する形で運用されています。 導入のきっかけについては以下の記事でも触れられています。 developers.freee.co.jp Datadog APM の画面は多機能かつ柔軟で、例えばウェブサーバーが受けたリクエスト処理の内訳を視覚的にドリルダウンできたり、リクエストや SQL クエリごとのレイテンシやエラー率を計測してダッシュボード化してくれたり、また全画面で共通的に「タグ」や日時を用いたフィルタリングができたりします。直感的なだけなく、見た目もオシャレで、適当に眺めているだけでもワクワクします。 しかし、私達は「ここに映っているもの」が何なのか、正直分
ステージング化 本番のVMについてはここでAMIを取って完了としましたが、ステージングは設定を変更しなければなりませんでした。本番へのアクセスが起こらないよう設定の洗い出しを行い、地道に一つ一つ変更していき、ステージングとして動作するように調整を行いました。地味な作業でしたが、システム間のつながりを把握するという点でとても効率的だったので思ったほど無意味な作業ではありませんでした。 データ移行(BLOB to S3) データ移行はリプレイスプロジェクトでも難易度が高い部分でした。 ニコニ立体は3Dモデルホスティングサービスですが、この3Dモデルのファイル容量が大きく、移行に非常に時間がかかりました。試算では移行に24時間かかると出たため、日々増えるデータをどのようにスムーズに移行するかについて悩みました。 立体の負債解消を手伝ってくれていたまさらっき氏が偶然ALBのRuby on Lamb
更新履歴 2019/11/27: 初版公開 2020/05/01: サブコマンド実行部分に追記 2021/04/14: dip 7.0に合わせて更新 2021/07/16: docker-composeコマンドをdocker composeに置き換え dipとは dipは、Rails開発会社のEvil Martiansのメンバーが作った、docker-composeでの作業を能率的に行えるツールです。dipはDocker Interaction Processの略だそうです。 dipはRubyで書かれているのでRuby実行環境が必要です。元々Rails向けに作られたツールのようですが、Evil MartiansのReactアプリにもdip.xmlがあることからわかるように、Railsに限らず一般のdocker-composeでも使えます。私の場合はローカル開発環境でのみ使っています。 追記
こんにちは、クックパッドで最近はモバイルアプリを離れもっぱらウェブアプリを作っている @morishin です。 先日、社内で「モダンウェブフロントエンド勉強会」と題して React, Next.js, Core Web Vitals, SSR, CSR, SSG, ISR, SSR Streaming, React Server Component といったキーワードに触れつつ、昨今のウェブ開発事情について話をしました。せっかくなのでその内容の共有と、勉強会を開催した動機などを紹介したいと思います。 この話は fukabori.fm でも取り上げていただいてお話ししたので、よければそちらもご視聴ください。 fukabori.fm 背景・動機 クックパッドのウェブアプリケーションは10年以上もの間 Ruby on Rails で開発されてきましたが、2020年から一部のページは Next.
こんにちは、freee会計でエンジニアをしている @sakakibara-setu です。 普段は債権債務に関する機能を担当するチームに所属して開発を行っていますが、この度freee会計のRailsアップデートを担当することになりました。 実はfreee会計は、先日2021年12月にRails 5系からRails 6系へとメジャーアップデートされました。 ありがたいことにこのメジャーアップデートによる問題は一件も発生しなかったため、皆様には特にお変わりなくご利用いただけたかと思います。 その上で社内の開発環境においては様々な恩恵を得ることができたので、結果は成功と言っていいと思います。 しかしながら、その道のりはお世辞にもうまくいったことばかりではなく、反省すべきことも多々ありました。 アップデート作業には壁とも言えるような問題がいくつもありましたが、それはfreee会計が8年以上開発され
はじめに 「Railsは関心の分離が不十分である」という批判をよく目にします。状況が深刻になったら、Railsに足りない別のピースを導入しなければならないというのです。しかし私たちはそうは思いません。 「素のRails(vanilla Rails1)ではここまでしかできない」みたいな批判を耳にすることがよくあります。Railsはアーキテクチャレベルで関心の分離が不十分なのだから、アプリはいずれメンテナンス不能になり、足りないピースを導入するという別のアプローチが必要になるというのです。 代表的なDDD(ドメイン駆動開発)書籍では、概念上の4つの層である「プレゼンテーション層」「アプリケーション層」「ドメイン層」「インフラストラクチャ層」について議論しています。 アプリケーション層は、ドメイン層と協調動作してビジネスタスクを実装します。しかし、Railsが提供しているのは「コントローラ」と「
概要 前置き この記事はRails Advent Calendar 2020の15日目の記事です。昨日はnegito6さんの忙しい人のための Rails デバッグ方法まとめでした。 動機 うなすけさんのRailsを主戦場としている自分が今後学ぶべき技術について(随筆)という記事と、それに対するmizchiさんのアンサーブログ、Re: Rails を主戦場としている自分が今後学ぶべき技術についてに触発されて書いています。 お断り この記事ではRailsの技術的な側面を意図的に重視していません。というのは、私がRails以外の技術についてそこまで詳しくないため比較するのが困難だからです。 また、ふわっとした話題を扱うということもあり、どうしても書き方が推測多めになってしまっています。これは私の知見と経験の少なさによるものです。 本編 アプリケーション開発のマトリックス いきなりですが、アプリケ
はじめに 今回はデータベース設計について学び直したので内容をまとめていきます。 自分は2021年に新卒でWeb系の開発会社にフロントエンジニアとして入社し2022年で2年目になります。 実務ではNext.js×TypeScriptを利用したフロントの開発をメインで行っています。 直近の開発案件でRailsを使ったサーバーサイドの開発を担当することになり、DB設計を触ったのですが体系的な理解をしていなかったので苦戦をしました。 実装はできたものの、データベース設計を「なんとなくの理解」で終わらせないように、体系的に学び直しました。 データベース設計の学習に関しては下記の書籍を参考に進めました。 スッキリわかるSQL入門 達人に学ぶDB設計 徹底指南書 対象者 データベース設計について基礎から学びたい人 何となくデータベースの設計をしている人 正規化について学びたい人 データベースとDBMS
こんにちは、タイミー開発プラットフォームチームで業務委託として働いている宮城です。 タイミーはリリースから4年が経過したプロダクトで、2022年の前半から一部領域でGraphQLを利用し始め現在導入を進めています。 本記事では、GraphQLをプロダクトに導入する上で判断に迷った箇所や課題に対して、タイミーでの意思決定とその理由を紹介します。参考にしていただければ幸いです。 GraphQLの選定理由についてはこの記事では触れませんが、CTOの@kameike が以下のイベントで詳しく紹介する予定です。まだ参加申し込みは可能ですので、興味がある方はぜひ合わせてご覧ください。 timeedev.connpass.com なお、本記事のタイトルはソウゾウさんの以下の記事にインスパイアされています。 engineering.mercari.com GraphQLの「Getting Startedの
ウオ!!DHH 今週末のFSWのWECエントリーしとるやんけ! https://t.co/nTjDhKcF2J— ガソリン車 (@polamjag) 2023年9月5日 DHHがルマンの24時間耐久でクラス優勝するほどの腕前の持ち主なのは、Rubyistのなかでは?それなりに?知られている?と思う。で、そのルマン24時間耐久のシリーズである世界耐久選手権 (World Endurance ChampionshipでWEC) は、日本の富士スピードウェイでもやっているのであった。富士スピードウェイとは御殿場と山中湖の間くらいにあるサーキット。都心から車で2時間くらいだと思うけど、東名高速の大渋滞エリアを必ず通過することになるので時間距離はたぶんもっと遠い! www.fiawec.com これを見る限り、DHHは2013, 2015, 2016, 2017, 2019年に同じ富士スピードウェイ
RailsのためのHTTP/2プロキシ「Thruster」がオープンソースで公開された。ほとんど設定不要で、導入によりRailsアプリをより高速かつセキュアにする。 Ruby on Rails(以下、Rails)の開発元である37signalsは、より高速でセキュアなRailsアプリケーションを実現するHTTP/2プロキシ「Thruster」をオープンソースとして公開しました。 We've released Thruster as open source! It's a tiny, no-config HTTP/2 enabling, asset caching, X-Sendfile sending proxy for Rails' default web server Puma. One of the secret sauce elements of ONCE, now availab
Hotwire https://hotwire.dev/ Turboを中心としたウェブアプリケーションのアーキテクチャの要素技術やコンセプトをPRするための名称 Hotwireというライブラリがあるわけではない 役割としてはMicro FrontendsとかReactのlearn once, write anywhereなどに似ている アプリケーション実装言語非依存だけど現状Railsアプリケーションしか実用できる基盤がない Hotwireの思想 アプリケーション開発者の生産性を上げることを目的にしていること サーバーサイド言語でフロントエンドを実装したいアレではなかった プログレッシブ(段階的に利用可能)であること 必要な技術だけを使い無駄なことをしないことで効率化する Hotwireが列挙する技術は1つづつ有効にできる クライアントサイドでViewを差分更新する現在の主流のシングルペー
こんにちは、メドピアCTO室 SREの侘美(たくみ)です。 普段はRails/Vue.js/terraform/Lambdaなどを書いています。 趣味は飼い猫と遊ぶことで、生傷が絶えません。 入社してから約半年間、Railsのプロジェクトで実装をしつつ、合間に開発環境の改善をいろいろとやってきました。けっこうな分量となったので、紹介したいと思います。 なお、本記事で扱う開発環境とは下記2つを指すこととします。 ソースコードの修正/テストの実行/静的解析の実行環境 サービスを起動し、ブラウザでデバッグする環境 特徴 主な改善対象である、「MedPeer」サービスの特徴をご紹介します。 Ruby on Rails製 社内では最も巨大なRailsプロジェクト モデル数693 認証サービス、旧サービス(PHP製)と連携している 開発環境はDocker for Macを利用 コンテナ数は旧システム、
S3 is a Key-Value store Amazon S3 は、一意のキー値を使用して、必要な数のオブジェクトを保存できるオブジェクトストアです。 Amazon S3 オブジェクトの概要 - Amazon Simple Storage Service Amazon S3の基礎技術は、単純なKVS(Key-Value型データストア)でしかありません。 Amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする | DevelopersIO Amazon S3の実体はKey-Value storeという事実は、既にご存知の方々にとっては何を今更というようなことではありますが、それでも初めて聞くときには驚かされたものです。 さて、Key-Value storeと聞いて一般的に馴染みが深いのはRedisでしょう。そして、RailsにおけるRedisの役割としてCac
12/23の朝方、DHHが以下のツイートを発信しました。 Hotwire aka NEW MAGIC is finally here: An alternative approach to building modern web applications without using much JavaScript by sending HTML instead of JSON over the wire. This includes our brand-new Turbo framework and pairs with Stimulus 2.0 😍🎉🥂 https://t.co/Pa4EG8Av5E — DHH (@dhh) December 22, 2020 取りあえず様子を知りたかったのでDHHのツイートを追ってみました。お気づきの点がありましたら@hachi8833までお知ら
技術部の外村(@hokaccha)です。Rails で webpack を使うためのシンプルな gem を作ったのでそれについて紹介します。 Webpacker Rails で webpack を利用した Web フロントエンドの環境を作る場合、最近では Webpacker が選択されることが多いでしょう。Rails 6 からは Webpacker が標準になることもあり、この流れはますます加速すると思われます。 私自身もこれまでいくつかのプロジェクトで Webpacker を利用してきました。Webpacker は webpack を Rails から簡単に利用でき非常に便利なのですが、使っているうちにいくつか不満な点がでてきました。 一番大きい問題として Webpacker が @rails/webpacker という npm パッケージに webpack の設定を隠蔽し、Webpac
(勤務先に投稿した社内ブログの焼き直しです) ある日同僚から ActiveJob の perform_later で Barbeque にキューした非同期ジョブの起動が遅いと言われた。が、非同期ジョブの使い所について個人的な考えを書いてみることにする。 相談は「非同期ジョブの結果をユーザーに返しているため、高速になって欲しい。現状、最大で数分の時間を要す旨のメッセージを表示している」という内容でした。具体的には {内部 API} が重く、一部の処理を非同期ジョブにしていてユーザー体験の悪化につながっているとのこと。 盲目的に非同期にしても嬉しいことはない 結論としては、非同期にするのであれば丁寧にやれば良いけど、そもそも同期的でよくない? と考えて欲しいと返した。 まず、個人的にはユーザーアクション起因かつユーザーへフィードバックする必要のある処理を非同期ジョブにするのは本当に長時間かかる
最近Rubyを学び直したり、アルゴリズムの基礎練をしたりしているのだが、debug.gemおよびvscode-rdbgが便利すぎるので紹介。 debug.gemやvscode-rdbgとは debug.gem( https://github.com/ruby/debug )とは最近のRubyのモダンなdebugger。これまでlib/debug.rbやbyebug、debaseなどがあったが、それらのいくつかの課題を解決したdebuggerとなっている。Ruby 3.1 の debug.gem を自慢したい - クックパッド開発者ブログ に背景や基本的な使い方が詳しく載っている。 またRubyKaigi 2022のruby/debug - The best investment for your productivity - RubyKaigi 2022でも紹介された。Scriptable
RubyGemsの運営元が「Ruby Shield」を発表。RubyとRailsへのサプライチェーン攻撃への対策としてShopifyが4年で100万ドル(約1億3000万円)を提供 Ruby言語用のパッケージであるGemのホスティングサービス「RubyGems.org」を運営するRuby Centralは、RubyやRailsに対するサプライチェーン攻撃への対応を行うプロジェクト「Ruby Shield」を開始すると発表しました。 Today we’re excited to announce Ruby Shield This new initiative in partnership with @ShopifyEng will support open-source and enable us to take on new security-focused projects to bet
転職・求人情報サイトのtype エンジニアtype スキル なぜソフトウエア後進国の日本で、Rubyは成功したのか? 生みの親・まつもとゆきひろが語った五つのポイント 2021.09.06 スキル Rubyまつもとゆきひろ 日本発で世界的に使われているソフトウエアは、残念ながらそう多くはない。その数少ない成功例の一つが、プログラミング言語「Ruby」だ。Rubyによって開発された有名Webサービスは、日本だけでなく世界中に数多くある。 では、なぜRubyは成功できて、他の多くの日本のソフトウエアは成功することができなかったのか。2021年9月4日に開催された「type エンジニア転職フェア ONLINE」では、Ruby開発者である、まつもとゆきひろさんに開発の背景や成功の要因を語ってもらった。 まつもとさんの経験に裏打ちされたメッセージは、新たなソフトウエアやサービスをつくろうとするエンジ
こんにちは。 クラシル開発部、バックエンドエンジニアの松嶋です。 delyに入社してから約3年間、私はSREチームに所属していましたが、昨年10月にバックエンドに転向しました。バックエンドに転向してからは、主にクラシルアプリの公式レシピおよびCGMコンテンツの検索機能に関する開発・改善に取り組んでいます。 クラシルは、2016年2月にサービスを開始してから、管理栄養士監修の「誰でも安全に・おいしい料理を作ることができるレシピ動画」を5万件以上提供してきました。 昨年12月には、クラシルのブランドリニューアルを行い、今後はシェフや料理研究家を中心としたクリエイターとともに多様化したユーザーの食の好みや課題解決に応えられるよう、幅広い食のコンテンツを提供するプラットフォームを目指しています。 ブランドリニューアルの詳細に関しては、こちらを御覧ください。 www.kurashiru.com この
というタイトルで先日 Kaigi on Rails 2021 で話してきました。 プレゼンで話せなかった内容なども含めてブログ記事にも書いておきます。 Intro Railsのことはけっこう知ってるけどNext.jsについて何も知らないという人をターゲットにしてNext.jsとは一体何なのか、いつどこで使えばいいのか、具体的にNext.jsのどういうところがいいのか、どういう機能があるのかという話をします。 最終的には普段Railsを書いているエンジニアが、Next.jsよさそうなんで使ってみようかな?と思ってもらえるといいかなと思っています。 Next.jsとは何か Next.jsのトップページを見てみましょう。 The React Framework for Production と書いてあります。これは読んで字のごとくですが、Next.jsというのはReactをベースにしたフレームワ
RubyのYJITコンパイラをShopifyが本番に投入、Railsアプリを高速化。Rubyも本格的にJITの時代へ ECサイト構築サービスを提供するShopifyは、Ruby 3.2に搭載されているYJITコンパイラを同社の本番環境に投入し、Railsベースで構築された同社サービスの性能改善を実現したと明らかにしました。 YJITコンパイラはShopifyが開発を進めてきたRubyのJITコンパイラで、大規模なRailsアプリケーションにおいてより高い性能向上を目指して開発されたものです。 一昨年末のRuby 3.1でメインラインにマージされ、昨年末に登場したRuby 3.2ではさらに改善が進められて本番環境にも耐えるようになったと説明されており、今回Shopify自身がそれを実証した形になりました。 If you’re a keen Rubyist, you may have hear
こんにちは、qsona (twitter) です。 マイクロサービスアーキテクチャを指向するとき、(主に社内向け)管理画面をそのままサービスごとに作っていくと、マイクロサービスの数だけ管理画面が乱立するという課題があります。FiNC においては、それにより実際に以下のような問題が発生しました。 ユーザの追加/削除や権限管理がとても大変ユーザ(CS対応者)がどこの管理画面を使えばわかりにくい本記事では、 FiNC においてこれらの問題に対してどう対処してきたか、歴史とともに紹介します。 tl;dr各マイクロサービスで管理画面を作ること自体はよい。統一管理画面は開発のコストがかかりワークしなかった認証を中央管理にする権限管理は各サービス固有のドメイン知識だが、中央で一覧/変更できる状態になっていると便利マイクロサービスの横断的関心事への対処は、「標準」を意識する黎明期から、問題が起こるまでFi
序文 昨年末くらいからRailsとフルスタックJavascriptの論争の記事がよくバズってましたね。主にORMとパフォーマンスやSPAが論点として多かった気がします。 Rails側のSPA作りづらい問題に対し、hotwireが一つの解として今後どういう受け入れ方をされて行くのか、どう発展していくのかは気になるところです。 未来のフルスタックフレームワークの代表争い さてこの論争、僕は「未来のフルスタックフレームワークの代表争い」だと思っているのですが、結構難しくって視点次第でどうとでもなっちゃうような気がしてます。 というのもこの手の技術選定の問題ってアプリケーション規模やチームの思考、求められるサイト特性などによって合う合わないがあるので、一概に正解がわからないんですよね。 例えば今勉強がてらブログを作ってみたい、という人には迷わず僕はblitz やNext/Gatsby+外部サービス
バックエンドエンジニアの徳富(@yannKazu1)です。先日、メドピアのメインサービスであるmedpeer.jpで使われているデータベースエンジンを、MySQLからAurora MySQLへと移行しました。今回はその移行のプロセスについて詳しくお話しします。 移行したデータベースの簡単なインフラ構成 移行方針 今回移行するデータベースは複数のアプリケーションから参照されており、ダウンタイムによるユーザー影響が大きいため、移行方針の検討の段階で重視したのは、ダウンタイムの最小化でした。これを達成するために、DNSのCNAMEレコードと、Auroraのリードレプリカを活用し、移行させることにしました。 DNSのCNAMEレコードの使用 データベースエンドポイントをアプリケーションに直接記述する代わりに、DNSのCNAMEレコードを利用して間接的に参照するようにしました。これにより、データベー
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: 53 Ruby on Rails Interview Questions and Answers - Better Programming - Medium 原文公開日: 2020/04/03 著者: GreekDataGuy -- データサイエンティスト、フルスタックエンジニア、起業家。トロント在住。 日本語タイトルは内容に即したものにしました。 私はこれまで100人を超えるRuby on Rails開発者と面接を重ね、私自身も職階に関する面談をいくつも受けました。本記事は、これまで私が受けたり尋ねたりした質疑応答をまとめたものです。 2020年現在、どれほど多くの大企業がRailsを利用していることを知ったら皆さんは驚くかも知れません。Shopify、Airbnb、GitHub、Dribble、Etsy、Kickstarter
みなさんは「保守・運用」と聞くとどのようなイメージをお持ちでしょうか? もしかしたら良いイメージをお持ちでない方もいらっしゃるかもしれません。 しかし、売り上げを生み出している既存コードの保守運用はビジネス上、新規機能開発と同等かそれ以上に重要な存在です。 保守運用は歴史あるサービスでは欠かせない作業ですが、STORESもその例外ではありません。 STORESの最初のコードが書かれてから、8年の歳月が経ちました。 今となってはコードの量も多く、今年(2020年)の8月に入社した私(@zakky)も全体を把握しきれてはいません。 STORESにジョインした最初の1ヶ月間、「商品の在庫数を一括で更新する機能」の開発に私は専念しており、その他の機能のコードを触る機会がほとんどありませんでした。 目の前のチケットを消化していくのに必死で、周りを見る余裕が無かったとも言えます。 「運用週」との出会い
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く