カレーの恩返し

おいしいのでオススメ。

ISUCON13 で rbs-inline 使ってみた

ISUCON で型がパチパチっとハマった開発ができるとかなり開発体験変わってくるのでは?と思い、 ISUCON の過去問に型をつけていくのをやってみています。 モチベーションに対してもう少し詳しい記事はこちら euglena1215.hatenablog.jp まずは、初期実装の状…

Ruby の静的型チェック × ISUCON という夢

RubyKaigi 2024 お疲れさまでした。楽しかったですね。 みなさん RubyKaigi で持ち帰ったものは色々あるんじゃないかと思いますが、自分が持ち帰ったものは Ruby の静的型チェック × ISUCON でした、という話を書こうと思います。ポエムです。 ISUCON の説明…

RubyKaigi2024 に参加してきました

那覇空港にあったポスター 2024/05/15~17で RubyKaigi2024 があったので行ってきました。開催場所は沖縄です。 会社の業務として参加させてもらったので宿泊費・交通費・チケット代は会社から出してもらい、勤務扱いということもしてもらってます。大変あり…

Rails7.1からcolumn,enum名に使えない名前が増える可能性が高いので注意

3行まとめ Rails 7.1 から dup, freeze, hash, object_id, class, clone, frozen は column 名や enum の種類として使えなくなる可能性が高い 該当 column を持つ Model の initialize で ActiveRecord::DangerousAttributeError が発生する 各位そういった…

Rails の has many through 経由でモデルを削除すると destroy callback が呼び出されない

has many through の挙動についてずっと勘違いしていたところがあったので忘れないように書き留めておきます。 3行まとめ has many through のデフォルトの挙動では削除時に delete_all を実行したのと同じ挙動になり、callback が発火しない has many throu…

マイクロサービスアーキテクチャ 第2版では2週間で作り直せるサイズが良いという記述が削除されている

社内でマイクロサービスのサイズについての議論になり、ふと気になってマイクロサービスアーキテクチャ 第2版を確認すると削除されていたことに気付いたよ、というのがこの記事で最も言いたかったことです。*1 以下蛇足です。 マイクロサービスアーキテクチ…

rubocop-ast.wasm を作った

便利そうなツールを作ったという紹介です。 Ruby 30th LT に出したのですが落ちたので供養として書きました。 解決しようと思った課題 Ruby には RuboCop という linter 兼 formatter があります。 RuboCop に元々入っているルール(Cop と呼ばれます)だけ…

marginalia(ActiveRecord::QueryLogs) を使うと ActiveRecord::Relation#explain が空文字を返す問題

困っている人向けまとめ marginalia(ActiveRecord::QueryLogs) を prepend_comment = true の設定で使うと ActiveRecord::Relation#explain が空文字を返す問題がある marginalia に issue が立っていて修正は既に rails/rails に取り込まれている Merge pul…

新卒で入社した会社を退職しました

この記事は 呉高専 Advent Calendar 2022 - Adventar の21日目の記事です。 新卒で Wantedly という会社に就職し、その会社を今年いっぱいで退職することになりました。 なので、数年後自分がお酒を飲みながらエモい気持ちになるための振り返りとして書き残…

ActiveModel::Dirty を使うときに気をつけること

最近ハマってしまったのでメモとして残しておく。 TL;DR 自身のmodel と association を同時に save する場合は dirty attribute が上書きされる可能性があるので注意する必要がある。 本編 雑なサンプルを提示する。 User : ユーザー作成時に新規ユーザー向…

sorbet は production で使えるのか [2020/03/29 時点]

sorbet は少し前に話題になっていた Ruby の type annotaion gem。 sorbet.org 以下のようなコードを書くと静的型チェック、動的型チェックの両方をやってくれる。 # typed: true require 'sorbet-runtime' class A extend T::Sig sig {params(x: Integer).r…

grpc_required_annotator gem つくった

rubygems.org TL;DR 会社で grpc ruby を使っていて、同じような実装何回もやってんなと思ったので共通化して gem にした request message を required チェックを簡単にできる DSL を提供してくれる いつも書いていた required をチェックするだけの冗長な…

ModelとConcernに記述したcallbackの実行順

結論 Concern に記述された callback が先に実行される。 既存の callback を Model もしくは Concern に移すときは気をつける必要がある。 以下確認コード class Hoge < ApplicationRecord include HogeConcern before_validation -> { puts "before_valida…

マイクロサービス他社事例

マイクロサービスの事例を調べた。 多少まとめた方がいいんだろうけど、一覧があるだけでも一定の価値はあると思ったので載せておく。 Cookpad https://logmi.jp/tech/articles/320715 https://techlife.cookpad.com/entry/2016/03/16/100043 Technical Succ…

更新系 Web API response 再考

更新系の Web API response をどうすればいいのか毎回悩むので良い感じのデザインパターンをパッと調べたけど見当たらなかったので友達と議論した。 どんな場合はどんな response を返すべき、という結論には至らなかったけど一通りのパターンは洗い出せたと…

DB共有しているRailsアプリケーションのテストを書くときに気をつけること

これで2時間くらい潰れたので供養のために書いておく。 TL;DR DatabaseCleanerのstrategyがtransactionになってると、もう一方のRailsアプリケーションに反映されないから気をつけよう 遭遇したこと 2つのRailsアプリケーションで1つのDBを共有しているサー…

新卒ISUCONで優勝しました

新卒ISUCON(SHISUCON)とは 弊社ではwebアプリケーション開発の基礎となる知識を実践的に吸収するため、新人研修の一環として新卒メンバー+CTOでISUCONを行うことが恒例になっています。 このISUCONをSHISUCON(SHinsotsu ga Iikanjini Speed Up Contest)と呼…

心理的安全性について

バイト先の人に「うちで働く可能性ってある?可能性が低いとしたら何があれば高くなる?」という質問をされて考えたことを書きます。 人は皆「心理的安全性」の高いところで働きたい 心理的安全性を「自分がそこに所属していてもよいと思えるかどうか」と定…

引っ越し備忘録

筑波大学に3年次編入してからもうすぐ2年になります。 卒業に必要な単位は取得し、卒業論文も提出し、あとは卒業研究の発表と細々した課題を出せばOKという状態になりました。 ありがたいことに就職先も決まっています。 オフィスは都内なのでつくばからは通…

プログラミング以外の趣味を探した話

年末なのでポエムを書いてみようと思った。 プログラミングという趣味は一般社会に対してウケが悪く、属性が異なる初対面の人との話題に超困ったので他の趣味を探してみたよ、という話。 「プログラミングが趣味で何が悪い、ウケを気にして趣味を探すことが…

Slackにアップしたスライドをいい感じに見れるやつ作った

これは呉高専 Advent Calendar 2018の23日目の記事です。 先日、kosen12sというコミュニティで発表した内容をつらつらと書いていきます。 スライドはこちら ↓ speakerdeck.com なぜ作ったのか 自分が所属している研究室では毎週交代で最近読んだ論文をスライ…

RailsのCookieStoreをnodeで復号する

背景 既に動いているRailsアプリケーションとfrontendの間にBFF用のnodeサーバを立てて、認証情報(currentUserIdの取得)はBFFで吸収させたい。 ※ Session管理にCookie Storeを使っているRailsアプリケーションを想定しています。 書いた RubyのMarshal.load…

ISUCON8で予選敗退してきました

昨日、ISUCON8のオンライン予選があり予選敗退してきたのでその様子を報告します。 牛久大仏「う〜ん、顔採用w!」 というチーム名で筑波に編入した同期の@k5342, @chigichan24とISUCON8オンライン予選に参加してきました。 ↓↓チームメンバーの記事はこちら↓…

【ISUCON用】Redis Cheat Sheet

ISUCON予選が明日に迫ってきました。 Redisの操作が全く覚えられないのでまとめておきます。 セッティング インストール qiita.com この辺とか見たらいい感じにできるのではないでしょうか(未確認) 使い方 # デフォルトは127.0.0.1:6379で繋がるはずなのでと…

雑にaxiosの便利ラッパー書いた

フロント書くときにaxiosが便利なのでよく使うんだけどHTTPメソッドごとで引数の型が若干違うので毎回忘れてググってる。 なので引数が同じになるようなラッパーに雑に書いてgistにあげておくことにした。 特に変なことはしてないのでコピペで使えるはず。 ※…

RubyKaigi 2018に行ってきた【Day1】

まだ途中ですが、公開してから考えようと思います。 Keynote ことわざの話 「名は体を表す」= 名前重要 ソフトウェアの世界には物理的制約がなく、概念で構成されているため名前はとても重要。 なのでソフトウェアエンジニアは概念に名前をつける必要がある…

RailsのService層とうまく付き合うにはどうすればいいのか調べてみた

「RailsのService層ってどう使っていくのがいいんだろうね?」って聞かれたときにすぐ答えられなかったのでまとめておきたいと思います。 ※ Fat Modelの解決策としてTrailblazerが最近よく話題に上がりますが、私がまだ使ったことがないので触れない方向で行…

呉高専HPをスクレイピングしてワードクラウドを作った

これは呉高専エンジニア勉強会Advent Calendar 2017の15日目の記事です。 こんにちは。呉高専OB1年目の@euglena1215です。 AdventCalendar 4記事目になります。 あと6,7記事書かないと埋まらないだろうと思っていたのですが、色々な人に手伝ってもらって気付…

Podcast配信機能をRailsに組み込んでみた

これは呉高専エンジニア勉強会 Advent Calendar 2017の9日目の記事です。 呉高専OB1年目の@euglena1215です。 今年の12月はすごい勢いで記事書いてます。 とあるラジオのサイトでPodcastを配信したくなったのでどう実現するべきなのかを考えた過程を書いてい…

筑波大学に編入して半年経ったのでまとめてみる

呉高専エンジニア勉強会 Advent Calendar 2017の6日目の記事です。 呉高専OB1年目の@euglena1215です。 Advent Calendar 2記事目になります。全埋めの先は長そうです。 筑波大学 情報科学類へ編入して半年とちょっとが過ぎたので編入してからいままでやった…