おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

15年ぶりにTOEICを受けた

前回のエントリはこちら(15年前!) TOEIC伸びない - おもしろwebサービス開発日記 n回目の英語勉強するぞ期の中で、英語学習のモチベーションを上げるためになにか試験でも受けてみようかなとなり、とりあえずやり方のわかっているTOEICから始めてみました。 …

ファイバーストレージの紹介と注意点

以前のエントリで、スレッドローカル変数とファイバーローカル変数について解説しました。このエントリはその続きになります。 ファイバーストレージとは スレッドローカル変数やファイバーローカル変数を使うと複数(スレッド|ファイバー)環境で固有の値を持…

ci_loggerのv0.9.0をリリースしました

Release v0.9.0 · willnet/ci_logger 次の二点の変更が入っています。 Rails6.0以上のサポートを終了して、Ruby3.3のサポートを追加しました Rails7.1で追加されたActiveSupport::BroadcastLoggerの対応を入れました ActiveSupport::BroadcastLoggerとは? A…

committee-rails v0.8.0をリリースしました

Release v0.8.0 · willnet/committee-rails Railsでinteragent/committee: A collection of Rack middleware to support JSON Schema.のテスト用ヘルパを簡単に使うためのgemとしてcommittee-railsというのを作りメンテしています。てっきりこのブログでも紹…

gimeiに型をつけた話

僕はRailsアプリケーション開発者としてはなるべく型は書きたくない派閥に属しています。でもライブラリ作者としては型をつけておくと利用者が嬉しいだろう、という気持ちがあります。 そんな折gimeiにPRがきたので、重い腰を上げて型を導入したときのメモを…

gimeiのv1.3.0をリリースしました

Release v1.3.0 · willnet/gimei 特に機能面の追加はありません。 @greendropさんのPRにより型を導入した Ruby3.3のサポート この2つがメインの修正です。型の導入は思ったより大変でしたが、お陰でRBSによる型づけについての理解が深まりました*1。 どうぞ…

Railsの設定をアップグレードしていく技術

このエントリは SmartHR Advent Calendar 2023の21日目の記事です。 Railsのバージョンを上げる作業は、単に新しいバージョンのgemをインストールするだけでは終わりません。Railsの新しいバージョンに沿った設定項目を確認し、適宜適用していく必要がありま…

wkhtmltopdf_binary_gemのdebian12対応をしました

wkhtmltopdfの次どうするか問題 の余談でwkhtmltopdf_binary_gemにM1 mac対応のPR出しましたという内容を書きましたが、現時点でまだマージされる気配はありません。 そんな中、debian12(bookworm)がリリースされてDocker Hubのruby公式イメージでも使われる…

Kaigi on Rails2023で例外について発表してきました

Kaigi on Rails初のオフライン開催であるKaigi on Rails 2023で登壇する機会をいただけました。 例外は遅い 資料と動画は こちら から辿れます。 ちょっと間が空いてしまいましたが、以下登壇に関連してつらつら思いついたことを書いています。 なんでこの題…

ci_loggerのv0.7.0をリリースしました

Release v0.7.0 · willnet/ci_logger これまではRails.loggerだけが対象だったのですが、v0.7.0からは次のように、任意のloggerをラップできるようになりました。 your_logger = CiLogger.new(your_logger) your_logger.debug('debug!') # これはテストが失…

大阪Ruby会議03でflaky testについて話してきました

前回の大阪RubyKaigi02に続き、大阪RubyKaigi03でも登壇機会をいただけました。 スライドはこちら。 感想 自分含めみんなflaky testで疲弊しているので、それを仕組みで解決したいぞ、みんなで仕組みを作っていこうぜという発表でした。10分の発表は思ってい…

ci_loggerのv0.6.0をリリースしました

失敗したテストのログだけを出力するぞ - おもしろwebサービス開発日記で 現時点(v0.3.0)ではRSpecのみに対応しています。minitestで使いたい人はPRお願いします :pray: と書きましたがv0.6.0ではminitest対応を入れました。minitest派の方もどうぞご利用く…

Active Recordで関連先を保存するときに気をつけること

先日、仕事でRails(Active Record)の難しい仕様に遭遇したので共有するためにエントリをしたためました。似たようなケースに遭遇した人の手助けになれば幸いです(\( ⁰⊖⁰)/) 対応Railsバージョンと設定 Rails6.1以上 config.active_record.has_many_inversing…

TokyuRuby会議14でmrskについてLTしました

TokyuRuby会議14に参加してLTしてきました。 スライドはこちら。 発表について mrskは個人的にかなり推しているプロダクトで、これの存在により仕事でも個人でも今より安いインフラを活用する選択肢を取りやすくなったと感じています。とりあえず僕が今運用…

Rails 7.0.5以降におけるcreate_associationメソッドの挙動変更についてまとめ

この件、関連するPRやIssueが複数あってコメントも分散しており、人に説明するのがややこしいのでブログとしてまとめたものになります。間違いや意見などあったらコメントください! 追記(2023/08/02) 7-0-stableブランチに今回の変更をrevertするコミットが…

gimei 1.2.0をリリースした

久しぶりに新しいPRがきたので、確認ついでにGitHub Actionsなどの設定も見直して1.2.0としてリリースしました。やっぱり長く運用しているリポジトリだと定期的に見直しが必要ですね…。

株式会社ウィルネットは設立6周年を迎えました

2月21日は弊社の設立記念日です。6周年あっという間ですね。 今日は弊社の設立記念日なのでケーキでも食べたいな、と思ってコンビニに来たがいい感じのものがなかった。来年はケーキ屋で予約でもしようかなあ— willnet (@netwillnet) February 21, 2023 おお…

miucheeをサービス終了します

10年ほど前にサービス開始したmiucheeですが、この度Twitter API有料化を受けてサービス終了することにしました。 10年前はぼくの両親の携帯電話はガラケーでしたが、今となっては二人ともスマホを使うようになり、みてね 経由で孫の写真を共有したり、facet…

wkhtmltopdfの次どうするか問題

wkhtmltopdfというライブラリは、HTMLからPDFを生成してくれるライブラリです。Rubyからだとwicked_pdfや pdfkit 経由で使われることが多いです。 さてそんなwkhtmltopdfですが、GitHubリポジトリ を見るとわかるようにアーカイブされてしまっています。公式…

失敗したテストのログだけを出力するぞ

表題の通りのことができるgem、CiLoggerが便利ですよという話です。 私達は大量のテストをCI上で実行しています。テスト結果を見れば失敗理由が自明なものもありますが、E2Eテストなどでよく起きる「たまに失敗するテスト」の調査はログやスクリーンショット…

iCARE Dev Meetup #34で登壇しました

【iCARE Dev Meetup #34】10年続くRailsアプリ開発のために大事なこと - connpass 所感 長期間アプリケーションを無理なく運用していくには内部品質を一定以上に保つ必要があり、それに注力するためには発表で話した「ふつうのこと」に対するエンジニアをは…

`Thread.current[:hoge]`はスレッドローカル変数を参照していると思いきや実際はファイバーローカル変数だった

このエントリはSmartHR Advent Calendar 2021の23日目の記事です。 SmartHRでは毎週「Rubyist@SmartHR(仮)」という名の定例ミーティング*1が行われています。このミーティングはバックエンドエンジニアが集まり、チームをまたいだ情報共有や相談をすること…

Rack::RuntimeがRailsのデフォルトRackミドルウェアから削除された

Rack::RuntimeというRackミドルウェアがあります。これはリクエストを処理するのにかかった時間を"X-Runtime"というレスポンスヘッダに含める、というものです。コードはこれ↓ rack/runtime.rb at master · rack/rack これはRailsのデフォルトのRackミドルウ…

Gimeiのバージョン1.0.0をリリースした

古いRubyのサポートを切り捨てたこと(Ruby2.2以上サポートになった) 最初にリリースしてから8年近くたっていること から、そろそろ1.0.0にしてもいいんじゃないかな、という気持ちになり1.0.0のリリースに踏み切りました。 ランダムで名前を返す、というコア…

iCARE Dev MeetupでHotwireについて話した

僕がお手伝いしているiCAREさん主催のミートアップ、iCARE Dev Meetupで、最近発表されたBasecamp社製jsフレームワークであるHotwireについて話しました。 【iCARE Dev Meetup #18】技術顧問が語る、Ruby on Rails実践開発 - connpass 動画も公開されている…

TurbolinksからTurboへの移行

弊社サービスである savanna.io はずっとTurbolinksとStimulusで開発してきたのですが、この度 Hotwireがリリースされた*1のでTurbolinks部分をTurboに置き換えてみました。その際のやったことやハマったことのメモを残しておきます。メモ書きなので雑なのは…

Railsアプリケーションのテストが失敗したときにどうしたらいいのか

本エントリはiCARE Advent Calendar 2020の25日目です。 僕はiCARE社内で技術顧問としていろんなことをやっていますが、そのうちの一つとしてRailsアプリケーションのテスト改善があります。具体的には「たまに失敗するテスト」で難しいものがあったときに調…

APIに利用制限をかけるとしたらどういうやりかたがあるのか

この記事はSmartHR Advent Calendar 2020 11日目の記事です。 僕のお手伝いしているSmartHRでは、毎週バックエンドエンジニアが集まり、技術的なトピックについて共有、相談しあうミーティングを開催しています。そのミーティングでは僕がTipsなどを共有する…

iCARE Dev Meetup #12 で登壇した

顧問先のiCAREさん主催のミートアップで登壇しました。技術顧問に対するインタビューを受けてから、Rails 6.1の新機能の話をするという構成。 技術顧問が語る最新Ruby on Rails/Vue.js iCARE Dev Meetup #12 - connpass スライドはこちら。 speakerdeckだとP…

パーフェクト Ruby on Rails改訂2版のサンプルコードについて

パーフェクト Ruby on Railsの改訂2版を書きました - おもしろwebサービス開発日記の続き。 いよいよ明日発売日ですね。前のエントリで書き忘れてたことがあったので追記です。 本書の6章からは、Railsのサンプルアプリケーションを作っていきます。技術評論…