タグ

seiunskyのブックマーク (8,627)

  • 自作のRubyの動的解析ツールを使って、モジュラーモノリスの境界を試行錯誤している話 - SmartHR Tech Blog

    DPE(Developer Productivity Engineering)ユニットに所属している、alpaca-tcです。 最近モジュラーモノリス化を進めるためにRuby動的解析ツールを作ったので、その話をします。 📝 私事ですが、新潟の佐渡島に移住しました。新潟や佐渡島のRubyistの方がいらっしゃいましたら、ぜひRubyKaigiでお友達になってください! SmartHRではRailsのモジュラーモノリス化を検討をしているよ Railsにおける「モジュラーモノリス」は、アプリケーションを拡張性のある構造にするために、単一プロセスでモノリスアプリケーションを区分されたサブセット(モジュール)に分割するアーキテクチャのことです。 SmartHRでは、コード量が多いプロダクトでモジュラーモノリス化を進めています。 すでに新規機能の開発では導入されていますが、既存コードのモジュラーモノ

    自作のRubyの動的解析ツールを使って、モジュラーモノリスの境界を試行錯誤している話 - SmartHR Tech Blog
    seiunsky
    seiunsky 2024/05/01
  • 7チームで作っていた大きなプロダクトを分割再編しました - SmartHR Tech Blog

    こんにちは。SmartHRの労務領域でプロダクトマネージャーをしている塚です。 この記事は「SmartHRのプロダクトマネージャー全員でブログ書く2024」への参加記事です。25人が持ち回りで毎週記事を投稿します。ぜひご覧ください! 2023年下期に労務プロダクトとしての担当機能を再定義し、今期から運用を始めたので、その背景やどのように変えたのかを紹介します。 マルチプロダクトの会社で担当領域の棲み分けについて、課題をお持ちの方の参考になれば幸いです。 労務領域の再定義をしたかった理由 私は2019年に入社以降、労務領域の「基機能」のプロダクトオーナーをしていました。 下の図の青線で囲った部分が「基機能」の担当領域です。 この「基機能」という分類が曲者で、プロダクトマネジメントをするうえではやりづらさを感じていました。そもそも機能が多岐にわたるうえ、近年ではタレントマネジメント領域

    7チームで作っていた大きなプロダクトを分割再編しました - SmartHR Tech Blog
    seiunsky
    seiunsky 2024/02/29
    昨年の半年間「大きくてつらい」に対して取り組んでいたものです😆
  • ActiveRecord::Base.transaction(joinable: false)を使ってはいけない - SmartHR Tech Blog

    注意喚起の記事になります。タイトルが結論です。 既にこの問題に言及している記事はいくつかあるのですが*1、私は気付かずに踏んでしまったので、タイトルで「おっと、うちは大丈夫かな」と思ってもらえるようにこの記事を書いています。 joinableとは何か 問題として挙げているjoinableオプションですが、これはネストしたトランザクションの挙動に影響を与えます。少しややこしいので、サンプルコードを見せながら説明します。 # frozen_string_literal: true require "bundler/inline" gemfile(true) do source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem "activerecord", "7.

    ActiveRecord::Base.transaction(joinable: false)を使ってはいけない - SmartHR Tech Blog
  • YAPC::Hiroshima にスポンサーとして協賛するのでお好み焼きを食べに行ってきました。 - SmartHR Tech Blog

    こんにちは。タレントマネジメントプロダクト開発部の yoshinarl です。 SmartHR は 2024年2月10日に開催される YAPC::Hiroshima 2024 にスポンサーとして協賛し、ブースも出展することとなりました。 スポンサー特典として公式サイトにバナーを掲載できることになったのですが、掲載サイズの既存バナーがないことや、どうせ作るならイベントの趣旨に沿ったものにしたいと考えていました。 そして採用広報の方や DevRel の方と相談した結果、今回の YAPC のイメージは「お好み焼き」ということで「お好み焼きにマヨネーズでロゴを書こう」となりました(?)。 なりましたというか、私がネタのつもりで Slack に書いたものが採用されてしまったというわけです! ということで、今回の記事はバナー作成記となっております。最後にイベントブースでお配りするノベルティについても

    YAPC::Hiroshima にスポンサーとして協賛するのでお好み焼きを食べに行ってきました。 - SmartHR Tech Blog
    seiunsky
    seiunsky 2024/02/02
    地球の自転すごい
  • 型キャストの場所のせいで、秒で終わっていたクエリに1時間超かかるようになってしまった話 - SmartHR Tech Blog

    SmartHRで届出書類という機能を担当しているプロダクトエンジニアのsato-sと申します。 今日は、以前私が調査にとても苦労したパフォーマンス上の問題の話を紹介したいと思います。 TL;DR PostgreSQLのアップグレードを実施した アップグレード後、今までは問題のなかった特定のクエリの実行に1時間超かかり、DBCPU使用率がピッタリ100%に張り付くようになった 色々調査した結果、PostgreSQL上の型キャストの場所のせいで、良くないクエリプランが選択されることが原因だった 型キャストの場所には気をつけよう PostgreSQLのアップグレードと挫折 SmartHRでは基的にWebアプリケーションのデータベースとしてGoogle CloudのCloudSQLによって提供されるPostgreSQLを利用しています。 私の担当している届出書類機能では、利用中のPostgre

    型キャストの場所のせいで、秒で終わっていたクエリに1時間超かかるようになってしまった話 - SmartHR Tech Blog
  • 0063 号 巻頭言

    DDD を理解したいあなたのための DDD 入門以前 Rubyist Magazine 63 号をお届けする。 突然のお知らせで恐縮だが、日 Ruby の会の主たる事務所が東京から北海道に移転した。それもあってあまりまとまった時間がとれず、11 月のうちに書くはずだったのが気がつくと 12 月も半ばを過ぎていたので、今回は以前書きかけていた文章を発掘してお茶を濁したい。 Ruby とは直接関係がなくて恐縮だが、Ruby に限らずソフトウェア開発では現在でもちょくちょく話題になることがある、DDD についての話である。 ドメイン駆動設計こと DDD は 2020 年代のソフトウェア開発でもよく話題にされるが、率直に言うとストレートにポジティブな評価が行われているとは言い難い。 どちらかというと、ある種マニアックで、対象分野が制限されており、また初心者にはとっつきにくいところがある手法と思わ

  • 外部インターフェイスとしてのデータベースの拡張性と後方互換性

    これは SmartHR Advent Calendar 2023 シリーズ1の11日目の記事です。 はじめに この記事ではサービスが外にデータベースのテーブルを公開インターフェイスとして提供する場合について、一般的な REST の Web API と比較しながらどのようにインターフェイス自体と内部の実装との成長を実現するかをまとめています。 前提として一つのデータベースを複数のサービスから依存される状態は「共有データベース」と呼ばれてマイクロサービスの文脈で避けられています。サービス間の依存関係の増加、スキーマ変更の影響範囲も広く、サービスの自律性を失うことにつながることが避けられる理由として挙げられます。 しかし、データの統合において共有データベースを限定的に利用することは、メリットやリスクを慎重に評すればサービス間でデータの統合を行う有効なアプローチの一つになると考えます。 データベー

    外部インターフェイスとしてのデータベースの拡張性と後方互換性
    seiunsky
    seiunsky 2023/12/11
  • 決戦は火曜日! 私の開発チームの教訓 - SmartHR Tech Blog

    この記事はSmartHR Advent Calendar 2023 シリーズ2の5日目です こんにちは! SmartHRのプロダクトエンジニアの @diescakeです! この記事では、私たち「ペーパーレス年末調整(以降、年末調整機能)」のチームでの開発や運用から得た ”教訓” をいくつかご紹介します! 教訓ってなに? 私たちはチームの振り返り(レトロスペクティブ)で度々取り上げられたKeepやTry、また「これは心に刻んでおかなければならない」と共通認識になったものを教訓としてストックしています。 2021年9月に最初の教訓が生まれ、2023年12月時点で以下16件の教訓があります。 平和は当たり前にあるものではない 他メンバーがインシデント対応中でも、手が空いている人は平和を噛み締めて生きる! やみくもに仕組みを増やして解決した気にならない 通信で怪しい動きを発見したら、まずは物理層を

    決戦は火曜日! 私の開発チームの教訓 - SmartHR Tech Blog
    seiunsky
    seiunsky 2023/12/05
  • test_profを用いたRailsの自動テストの高速化の実践例 - SmartHR Tech Blog

    このエントリは、SmartHR Advent Calendar 2023 シリーズ1の5日目の記事です。 こんにちは!SmartHRでプロダクトエンジニアをしている大澤(@qwyngg)です。 最近Railsの自動テストの高速化について調べていたので、その内容をまとめてみました。 主にtest_profというgemを用いた解析と、その結果を元にした改善方法について書いています。 test_profとは https://github.com/test-prof/test-prof テストのパフォーマンスを分析する様々なツールを提供するgemです。 色々機能があるのですが、今回は以下の機能を使って発見した問題とその解決方法を紹介します。 factory_botプロファイラ テストに対してstackprofを(面倒な設定無しで)実行できる 詳しい使い方はTestProf: Ruby tests

    test_profを用いたRailsの自動テストの高速化の実践例 - SmartHR Tech Blog
    seiunsky
    seiunsky 2023/12/05
  • SmartHRにDevRelを立ち上げます - SmartHR Tech Blog

    こんにちは、SmartHRで一人目のDevRelのinaoです。 SmartHRにDevRelを立ち上げる際に、社内に向けて書いた文章を公開します。 次の座談会もあわせてあわせてご覧ください! 教えて先輩! DevRelの立ち上げ方(前編)活動の成果と計測、体制、予算 - SmartHR Tech Blog 教えて先輩! DevRelの立ち上げ方(後編)社内の関係づくり、社内イベント、最も大切なこと - SmartHR Tech Blog DevRelを立ち上げます DevRelとはなにか DevRel(Developer Relations)は、「開発者をつなぐこと」を目的とします。 開発者をつなぐことには、次の3つが含まれます。 SmartHRの開発者と外部の開発者をつなげる SmartHRの開発者どうしをつなげる SmartHRのプロダクトと内外の開発者をつなげる なんのためにやるの

    SmartHRにDevRelを立ち上げます - SmartHR Tech Blog
  • Javaを中心に偏見ベースでプログラミング言語の関係をまとめた - きしだのHatena

    オブジェクト指向言語の話をするときに便利なように、Javaを中心にプログラミング言語をまとめてみました。 Javaに影響与えるか、Javaから影響を受けるか、という感じですね。 Simula オブジェクト指向はここから始まったと言われています。 クラス、オブジェクト、継承、仮想関数(多態)といった、オブジェクト指向の基要素が備わっていました。 ただし、「オブジェクト指向」という言葉は生まれていません。 Smalltalk Simulaから発想を得て「オブジェクト指向」という言葉を生んだのはアラン・ケイでした。 しかし、モデルとしてはSimulaとは異なりメッセージングを主体としたものでした。また、アラン・ケイの「オブジェクト指向」はプログラミングのパラダイムだけではなく、人がコンピュータをどのように扱うかというメタファであり、ダイナブックというハードウェアやそのユーザーインタフェースを含

    Javaを中心に偏見ベースでプログラミング言語の関係をまとめた - きしだのHatena
  • なぜ学習することへ投資するのか - エス・エム・エス エンジニア テックブログ

    技術責任者の@sunaotです。エス・エム・エスのプロダクト組織では、カンファレンス参加や専門書籍による学習などを強く推奨して、金銭的・時間的な支援も広く行なっています。 取組み自体はとくに最近の Web の会社では珍しいものではありません。ただ、位置付けや考え方を表明しているのはやや珍しいらしく、入社してきた人やカジュアル面談の場などで説明すると面白がってもらえることがあります。そこで、今回はその背景や考え方を説明してみます。便宜上ソフトウェアエンジニアを例に説明をしますが、基的にはプロダクトマネージャーやデザイナーなど他の職種においても同じことが言えると考えています。 学習への投資は責任を果たしてもらうための必要経費 エス・エム・エスのプロダクト組織では、カンファレンス参加や書籍の購入といったものに会社のお金や業務時間が使えることを福利厚生として位置付けていません。では、報酬ではない

    なぜ学習することへ投資するのか - エス・エム・エス エンジニア テックブログ
  • ActiveRecord::Bitemporalとの歩み方 - SmartHR Tech Blog

    こんにちは!SmartHR機能でプロダクトエンジニアをしているdooorです。 SmartHRでは履歴を表すデータモデルにBitemporal Data Modelを採用していて、Active Recordで扱うために ActiveRecord::Bitemporal を開発しています。 BiTemporal Data Modelとは、データを「有効時間(データが現実世界で有効である期間)」と「システム時間(データがデータベースに格納された時間)」の2つの時間軸で管理する方法です。変遷するデータの履歴を残すことができ、ある時点のデータを一覧することや過去の情報を更新することが可能になります。BiTemporal Data Modelが気になる方は 操作履歴/時点指定アクセスの実現 - BiTemporal Data Model の実践 をご一読ください。 ActiveRecord::B

    ActiveRecord::Bitemporalとの歩み方 - SmartHR Tech Blog
  • New RelicのSLOモニタリング+バーンレートアラートをCDK for Terraform(cdktf)でIaC管理する - Uzabase for Engineers

    こんにちは、ソーシャル経済メディア「NewsPicks」でSREをしている飯野です。 今回はSREで行ったNew RelicをCDK for TerraformでIaC管理する話を紹介したいと思います。 SLOモニタリングをSREチームだけで行うのは難しい CDK for Terraformとcdktf-newrelic-provider 追記 IaCで作成する内容 CDK for Terraformで実装していく -1. cdktf init 0. @cdktf/newrelic-provicerの初期化 1.DataNewrelicEntityの作成 2.ServiceLevelの作成 3.AlertPolicyの作成 4.AlertCondition(バーンレートアラート)の作成 5. NotificationDestinationの作成 6. NotificationChannel

    New RelicのSLOモニタリング+バーンレートアラートをCDK for Terraform(cdktf)でIaC管理する - Uzabase for Engineers
  • rbs collectionの基本と構成要素 - Money Forward Developers Blog

    こんにちは。 id:Pocke です。マネーフォワードでは、クラウド会計Plus の開発と、今回お話する RBS のメンテナンスを行っています。 最近、福井県は若狭にある年縞博物館に行って楽しんできました。1 さてこの記事では rbs collection の基と構成要素を解説します。 この記事を読むことで rbs collection がどのようなもので何をしているのかが理解できるようになるでしょう。 この記事では記事執筆時点での最新の、rbs v3.2.1 を対象としています。 rbs collection の基的な使い方 rbs collection の基的な使い方は簡単です。 設定ファイルの生成 まず、rbs collection initコマンドで設定ファイルを生成します。この生成は rbs collection を使い始める初回にのみ行います。 $ rbs collect

    rbs collectionの基本と構成要素 - Money Forward Developers Blog
  • 近況報告:無職になりました - IT戦記

    みなさんお元気ですか?僕は少しだけ元気ではありません。じんわりとした夏の暑さを感じながらブログを書いています。 実は、数ヶ月前にスマートニュースという会社を退職しました。 しばらく無職 しばらくは就職せずに無職でいようかなと思っています。 すぐに再就職した方がいいんだろうな〜。とは思うのですが少し疲れたかも。 いい時代になったものだ 最近は AI の進化も素晴らしく、昔ソフトウェアで出来なかったことがどんどんできるようになってるなって感じます。 Rust とか、ちょうど欲しかった感じのプログラミング言語もあるし、 ChatGPT は完璧ではないけど何か新しいことを始めるときに素晴らしい洞察を与えてくれる。 時代は確実に良くなってる。そんな時代に「自分は働いていないくていいのか」と少し不安になるけれど、自由気ままにコードを書く、そんな時間が今あってのもいいのかなって思ってます。 オフトピック

    近況報告:無職になりました - IT戦記
    seiunsky
    seiunsky 2023/08/21
    おつかれさまでした!ステートレスという考えかた、良いなあ
  • 開発チームのマネージャーとして意識しているチームのCapability - LayerX エンジニアブログ

    こんにちは。バクラク申請・経費精算チームでエンジニアリングマネージャーをしているsh_komineです。 7月はLayerXエンジニアブログを活発にしよう月間 ということで、今日は最近自分が「開発チームのマネージャーとして意識しているチームのCapability 」について話をしようと思います。LayerXのテックブログでは数少ないマネジメント系の話です。 私自身、エンジニアリングマネージャー歴自体は1年ほどなので、まだまだ足りない面もあると思いますが、誰かの参考になればと思います。 開発チームとCapabilityの定義 開発チームの単位もいろいろとありますが、基的にはチームとして意思決定し、開発活動を続ける最小単位のチームを想定しています。開発エンジニアにプロダクトマネージャー、チームによってはデザイナーやQAなども含みます。自分の場合は職能横断型のプロダクト・顧客に向き合うチームを

    開発チームのマネージャーとして意識しているチームのCapability - LayerX エンジニアブログ
  • 8年の歴史を持つRailsアプリのRuby 3.1への道 〜そしてOSSコントリビュートへ〜 - SmartHR Tech Blog

    こんにちは。プロダクトエンジニアのkitazawaとqwyngです。 先日SmartHR機能のRubyバージョンを3.0から3.1にアップデートしました! SmartHR機能では開発をLeSSで行っていますが、Rubyのアップデートは開発チーム内の有志のメンバーで実施しています。 その際にいくつかあった問題とその解決方法について紹介しようと思います。 Ruby 3.1へのアップデートを開始 まずはじめにRuby 3.1でCIを実行してみました。キーワード引数の対応などが大変だった3.0のアップデートに比べると失敗しているテストは少なく、修正の時間はあまりかかりませんでした。 そのため、すべてのテストが成功するようになるまでは苦労することなくすんなりと進めることが出来ました。 最初の問題 CIは通るようになったので動作確認をするため、staging環境にデプロイしようとしました。が、

    8年の歴史を持つRailsアプリのRuby 3.1への道 〜そしてOSSコントリビュートへ〜 - SmartHR Tech Blog
    seiunsky
    seiunsky 2023/07/13
    めちゃ良い〜〜〜
  • Railsのモデル名をすべて変更した話 - SmartHR Tech Blog

    SmartHRでは開発にRuby on Railsを広く採用しています。 今日は負債解消のために、開発しているサービスでRailsのモデル名をすべて変更した話を紹介します。 既存のモデル構造のつらみ 私達が開発しているサービスでは、モデルの親子構造が分かりやすいということで、モデルをネストした構造にしていました。 例えば、 User に紐づくプロフィール画像 User::ProfileImage は、 app/models/user/profile_image.rb に配置する具合です。 パッと見の構造が分かりやすいのですが、時が経つにつれて次のようなつらさが顕在化してきました。 Railsの規約(推奨ルールのようなもの)に則っていないので、関連定義が冗長になる テーブル名が長くなる。 外部キーや関連名が長くなる。 関連名と外部キー名が一致せず、カラムを呼び出したいときにDB定義を見ないと

    Railsのモデル名をすべて変更した話 - SmartHR Tech Blog
    seiunsky
    seiunsky 2023/06/30
    めちゃ良すぎる……!!
  • Ruby 3の静的解析機能のRBS、TypeProf、Steep、Sorbetの関係についてのノート - クックパッド開発者ブログ

    こんにちは、フルタイムRubyコミッタとして働いてる遠藤(@mametter)です。 Ruby 3 は「静的型解析」を備えることが目標の 1 つになっています。遠藤が開発してる TypeProf は Ruby 3 の静的型解析エコシステムの中の 1 ツールです。しかし Ruby 3 の静的解析というと、RBS、TypeProf、Steep、Sorbet などいろいろなツール名が出てきてよくわからない、という声を何回か聞いたので、かんたんにまとめておきます。 3 行まとめ RBS:Ruby の型情報を扱う言語。Ruby 3 にバンドルされる。 TypeProf:型注釈のない Ruby コードを型解析するツール。Ruby 3 にバンドルされる。 Steep/Sorbet:Ruby で静的型付けのプログラミングができるツール。 詳しくはそれぞれ以下で解説します。 RBS とは RBS は、Rub

    Ruby 3の静的解析機能のRBS、TypeProf、Steep、Sorbetの関係についてのノート - クックパッド開発者ブログ