フリーの新人教育で使ったテキストを公開します。
こんにちわ。せじまです。 むかしむかし、社内勉強会で話した内容を公開させていただくということが何度かありました。 TIME_WAITに関する話 EthernetやCPUなどの話 CPUに関する話 先日、社内で「データベースを異なる環境や互換性のあるマネージドサービスなどに移行する際、どういうことを考えてるか、幅広い層に向けて話してください」といった要望がありまして。 久々に話をさせていただきましたので、そのときの資料を公開させていただくことにしました。(いちおう、Speaker DeckにもSlideshareにも両方アップロードしておきました。) 互換性のある(らしい)DBへの移行など考えるにあたってたいへんざっくりfrom Takanori Sejima ※このスライドの内容を全部話すと100〜120分くらいはかかりそうなので、社内ではかいつまんで話しました。 個人的に、データベースの
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Skip Validations in Specific Contexts with except_on - Andy Croll 原文公開日: 2025/09/07 原著者: Andy Croll 日本語タイトルは内容に即したものにしました。 Rails 8.0のActiveModel::Validations::ClassMethodsにある各種バリデーションメソッドにexcept_on:オプションが追加されました。これはon:オプションの逆で、特定コンテキストのバリデーションをスキップするのに使えます。 🔗 以下のように書くよりも コントローラですべてのバリデーションをオフにする。 class Admin::UsersController < ApplicationController def create @user
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Smooth Ruby and Rails upgrades | Arkency Blog 原文公開日: 2024/07/01 原著者: Posts by Piotr Jurewicz 日本語タイトルは内容に即したものにしました。 参考: Rails アップグレードガイド - Railsガイド 最近、私たちは年季の入ったさまざまなプロジェクトでコンサルティングやアップデート作業を行っていました。どのプロジェクトもproductionで運用されていてビジネスを回していますが、長年アップグレードされないまま放置されていました。 こうしたプロジェクトでの経験を活かして、アップグレード作業をスムーズにするための知見を本記事でいくつか共有したいと思います。 🔗 アップグレード前にやるべき作業 🔗 依存関係をできるだけ減らしておく 作業
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Gemfile of dreams: the libraries we use to build Rails apps—Martian Chronicles, Evil Martians’ team blog 原文更新日: 2024/05/28 原著者: Vladimir Dementyev(首席バックエンドエンジニア)、Travis Turner(技術記事編集者) サイト: Evil Martians -- ニューヨークやロシアを中心に拠点を構えるRuby on Rails開発会社です。良質のブログ記事を多数公開し、多くのgemのスポンサーでもあります。 日本語ブログ: 合同会社イービルマーシャンズ - Qiita 日本語タイトルは内容に即したものにしました。また、gemごとにGitHubリポジトリへのリンクカードも追加してあ
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Safely Remove a Column from an Active Record Model - Andy Croll 原文公開日: 2022/11/14 著者: Andy Croll 参考: Rails API ignored_columns= -- ActiveRecord::ModelSchema::ClassMethods 既存のActive Recordモデルに新しいカラムを追加してデプロイするのは、多くの場合問題なくできます。通常は、最初のデプロイでマイグレーションを実行し、それが終わってから、次にデータベースに追加されたカラムを利用する新しいコードをリリースするという手順になります。 しかし、カラムを削除する場合は問題が起きやすい傾向があります。Railsアプリケーションを起動すると、Active Reco
高校を卒業した後、コールセンターでの派遣業務や非正規の事務職といった経歴から、33歳でまったく異なるソフトウェア開発の世界に飛び込んだ塩井美咲(@coe401_)さん。短期間でプログラミングのスキルを学び職業プログラマーへの転身を果たしただけではなく、プログラミング言語Ruby自体の開発をテーマとする国際カンファレンスRubyKaigiでも4年続けて発表するほどになっています。 キャリアチェンジの経緯やプログラマーとしての歩みについて塩井さんに伺うと、むしろ技術コミュニティとの出会いと積極的な参加があったからこそ、エンジニアとして多くの成長があったことが分かります。その熱意のベースには、何のためにソフトウェア開発者を志すかという思いがありました。 ▲ 松本市で開催されたRubyKaigi 2023に登壇する塩井美咲さん ソケットライブラリの改善にRubyの開発助成で取り組む― RubyKa
私たちの救世主DHH™は最近の Full Stack Radioのインタビュー で、 Basecamp の最新版で彼がどのようにRailsのコントローラを書いたかを説明しています。下記は、彼のすばらしい話を書き取ったものです。 これまでに思うようになってきたのは、「RESTの原則に従うには、どのタイミングで新たなコントローラを作るべきかを一度決めたら、ほぼ異例なくその原則を遵守するべきだ」ということです。いつだってその方がうまくいくんです。自分の作ったコントローラの状態を悔やむのは決まって、作ったコントローラの数が少なすぎた時です。多くの処理を任せようとしすぎてしまうんです。 そこでBasecamp 3では、ある程度理にかなったサブリソースがあれば、毎回コントローラを分割していきます。フィルタなどの場合ですね。例えば画面があって、それがある状態になっているとします。もしこれにいくつかのフィ
こんにちは。メドピアのRuby(Rails)化をお手伝いしている@willnetです。最近はよくリファクタリングをしています。 今回は、最近僕がリファクタリングしている内容についてまとめようと思います。 メドピアではFat Model/Controllerを避けるために、rubocopの設定を利用しクラスの行数が300行以下になるよう制限しています*1。最近300行を超えるモデルが出てきたので、一部の処理を別のクラスに切り出し始めました。 このとき、Railsが提供している機能であるconcernsを利用すると楽に行数を減らすことができますが、それだとrubocopの指摘を回避できるという意味しかないので、なるべく委譲(composition)を利用して処理を別クラスに移していっています*2。 複数モデルにまたがる処理を切り出す Railsアプリケーションを書いていると、複数のモデルを一度
JS でブレークポイント毎に処理を分ける場合の方法を resize から matchMedia に移行したので、その際のメモ書きです。 昔ながらの方法 恥ずかしながら、最近まで JS でブレークポイント毎に JS 処理を切り替える場合、 以下のように昔ながらの resize イベントの監視を使っていました... /** * イベントリスナー */ const listener = () => { // リサイズ時に行う処理 if (window.innerWidth >= 768) { // 768px以上 console.log('PC用ブレークポイント用処理'); } else { // 768px未満 console.log('SP用ブレークポイント用処理'); } }; // リスナー登録 window.addEventListener('resize', listener); /
この記事は,ネットワークの学習の序盤につまずくポイントである 「MACアドレスとIPアドレスってどっちか片方だけじゃだめなの?」「レイヤ2と3って結局何が違うの?」 という疑問について,私なりの回答をまとめた記事です。世に不正確な記事が出回っているように見受けられるので,正確な回答をまとめたく、長文になってしまいました。とはいえ,初学者向けにかなり初歩的なところから書いたつもりですので是非読んでみてください。 この記事について この記事を読むと何が分かるか MACアドレスとIPアドレスの役割の差が分かる レイヤ2(=同一サブネットの通信)とレイヤ3(=サブネット間の通信)の仕組みが分かる ネットワーク設計時にレイヤ2・レイヤ3のいずれで設計すべきか判断できる なお,教科書的な説明ではなく,概念や捉え方の説明となっていますので,試験勉強には役立ちません。実務としてネットワーク設計を行う方の役
こんにちは。クラウド運用チームの飯塚です。 私たちは cybozu.com 本番環境の MySQL を昨年末から順次 8.0 系へアップグレードしており、前回の定期メンテナンスにおいて全てのインスタンスのアップグレードを完了しました。この記事では、私たちが MySQL 8.0 への移行に取り組んだ理由と必要になった対応について紹介します。 なぜ MySQL 8.0 へ移行したのか GTID-based レプリケーションにおける制限の緩和 再起動時に AUTO_INCREMENT のカウンタが巻き戻る問題の解消 実際に対応が必要だった MySQL 8.0 の変更点 utf8mb4 の照合順序のデフォルト値の変更 SQL_CALC_FOUND_ROWS と FOUND_ROWS() が deprecated に Connector/J のメタデータ取得処理の性能低下 sys.innodb_lo
先日、神速さんのエントリを見てあとで書こうと思ったもの。 表題ママだけれど、Ruby / Rails の企業として新卒氏が入社した後にウォッチするように伝えているもの。もちろん流量も結構なものなので実際にどの程度ウォッチしているかは本人に委ねている。自分も全部は見れていない。メールでのタイトルか送信者 (PR や Issue を出した人) で興味を引かれたものが基準。 Rails 研修での Rails Tutorial の流れで、upstream とそれに近い情報源を伝えている。特に y-yagi さんのブログは、子供の頃に読み始めた新聞と同じで最初は分からなくても読み続けているうちに分かることが増えてくるので継続するのが力になることと共に伝えている。 GitHub 上のリポジトリ https://github.com/rails/rails ... ruby/ruby のリポジトリと一緒
This year, the YJIT team has been working hard to improve and optimize YJIT. We’re proud to say that the version of YJIT to be included with Ruby 3.3 is leaps and bounds ahead of Ruby 3.2’s. It provides better performance across the board, while also warming up faster and using less memory. The 3.3 release is also more robust, including a number of bug fixes along with an improved test suite. In t
このエントリはSmartHR Advent Calendar 2021の23日目の記事です。 SmartHRでは毎週「Rubyist@SmartHR(仮)」という名の定例ミーティング*1が行われています。このミーティングはバックエンドエンジニアが集まり、チームをまたいだ情報共有や相談をすることを目的としています。その中では僕がTipsなどを共有する「willnetさんのありがたいお言葉」というコーナーが常設されています。 このエントリでは、そのコーナーで共有した内容をひとつ紹介します*2。 Thread#[]で取得できる値はファイバーローカル変数なのだった アプリケーションのコードではあまり見かけませんが、ライブラリ中でスレッドセーフを意識している設定を読むと Thread.current[:locale] = :ja のようになっているのをよく見かけます。それで僕はThread#[]はス
こんにちは、山口拓弥(@yamat47)です。 最近、いまさらながら Netflix の梨泰院クラス にハマっています。 勧善懲悪なストーリーはわかりやすく面白いし、見れば見るほどチャミスルが飲みたくなりますね 🍻 https://twitter.com/yamat47/status/1586206595842646016 さて本日は、最近業務で書いた ActiveRecord の scope の実装の話をします。 危うく重大な不具合を含んだままアプリをリリースしそうになったので... 自戒も込めて記事にします...! 不具合を含んでいたコードを早速紹介します サンプルで扱うモデルの説明 業務のコードをそのまま公開するのは文脈を伝えづらく難しかったので、この記事ではシンプルなまったく別の状況を扱います。 大まかな説明ですが、こんな感じの状況を想定してください: 不特定多数とオンライン対戦
Intro こういうタイトルを付けるのはあまり好きではないが、あえてこのようにした。 「ブラウザでキャッシュがヒットしない」 以下は、Web における Caching の FAQ だ。 サーバで Cache-Control を付与したのにキャッシュがヒットしない サーバで ETag を付与したのに If-None-Match が送られない サーバで Last-Modified を付与したのに If-Modified-Since が送られない 先日も、筆者が書いた MDN の Cache セクションで「記述が間違っているのでは?」と同様の質問を受けた。 Issue about the Age response header and the term "Reload" · Issue #29294 · mdn/content https://github.com/mdn/content/iss
製品 { this.openCategory = category; const productMenu = document.querySelector('.product-menu'); window.DD_RUM.onReady(function() { if (productMenu.classList.contains('show')) { window.DD_RUM.addAction(`Product Category ${category} Hover`) } }) }, 160); }, clearCategory() { clearTimeout(this.timeoutID); } }" x-init=" const menu = document.querySelector('.product-menu'); var observer = new MutationO
(2023.12.12追記) ClamAV 1.0 のリアルタイムスキャン設定について、新しい記事を書きました。 RHEL 9系での設定については、そちらを参照するとよいと思います。 ・ClamAVによるリアルタイムスキャンの設定(ClamAV 1.0版) https://inaba-serverdesign.jp/blog/20231122/clamav-realtime-scan-v10.html (2023.12.12追記ここまで) はじめに ClamAVのリアルタイムスキャン機能 ClamAVのインストール ウイルスデータベースの取得と更新設定 clamdの設定と動作確認 リアルタイムスキャンの設定と動作確認 リアルタイムスキャンの検知漏れ問題と対策 まとめ 1. はじめに サーバーのウイルス対策として、以前、ClamAVによる定期ウイルススキャンの設定という記事を書きました。 今
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く