https://kaigionrails.org/2023/talks/kubo/
![やさしいActiveRecordのDB接続のしくみ](https://cdn-ak-scissors.b.st-hatena.com/image/square/2a1f302e1014e4bd43e39ef86a6ec95532bcb095/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F4b455a54b9eb4d6bb6259bb788913cd1%2Fslide_0.jpg%3F27587461)
技術部の笹田です。今日で退職するので、バタバタと返却などの準備をしています。 本記事では、Rubyの並行並列処理の改善についての私の取り組みについて、おもに RubyKaigi 2022 と 2023 で発表した内容をもとにご紹介します。 並行と並列はよく似た言葉ですが、本記事では次のような意味で使います。 並行処理(concurrent processing)は、「複数の独立した実行単位が、待っていればいつか終わる(もしくは、処理が進む)」という論理的な概念で、古典的にはタイムシェアリングシステムなどが挙げられます。 並列処理(parallel processing)は、「複数の独立した実行単位のうちのいくつかが、あるタイミングで同時に動いている」という物理的な概念で、古典的には複数のCPU上で同時に実行させる、というものです。最近では、1つのCPU上で複数コアが同時に動いている、という
Runa という Ruby で Gem を使ったり複数ファイルで構成された中規模のアプリケーションを簡単に書くためのフレームワークを作っています。 Runa を作った経緯 Ruby は単独のスクリプトファイルとして実行するときは取り回しも簡単で大変使いやすい(小規模アプリケーション) が、特定の gem に依存したり複数ファイルで構成されるようなアプリケーションを作ろうとするとスタンダードな方法が用意されておらず(特に配布や共有のことを考えると)敷居が高くなってしまう(中規模アプリケーション) これが今まで余り問題にならなかったのは、Web アプリであれば Rails がその辺りも面倒をみてくれたり、コンソールアプリケーションなら gem で配布するみたいな方法でやりくりしてきた経緯がある。しかし gem で配布するには RubyGems のアカウントが必要だったり、昨今のセキュリティ問題
こんにちは、TaKO8Kiです。 この記事では、本日、2021年9月17日にRust.Tokyo 2021で「Rustでrbenvよりも7秒速いRubyのバージョンマネージャーを作った」というタイトルで発表した内容についてまとめています。 スライドは、こちらにあります。 作ったもの frumというRust製Rubyバージョンマネージャーを作りました。 きっかけは、具体的に何か課題があったというよりは、rbenv installを10秒くらい高速化できたら面白そうだなという軽い気持ちです。 rbenvを使ったことある方は分かると思いますが、普通にrbenvと同じような感じで使えます。 ベンチマーク タイトルには「rbenvよりもinitが6倍速い」とありますが、ベンチマークを見てみましょう。 まず、eval "$(rbenv init)" → rbenv install → rbenv lo
はじめに class << self って? class << self に出会うとき クラスメソッドの定義の仕方 class << self の仕組みを順に理解する 特異メソッドの定義の仕方 def object.method_name 形式 class << object 形式 class << self を解釈してみる まとめ 著者について たなべすなお (Sunao Tanabe / @sunaot) 書いた人: sunaot はじめに この記事は「最近 Ruby を始めたばかりで言語仕様についてよく知らない」という初級者や、「一通り記法は知っていて Ruby でプログラミングはできるが、その仕組みはよくわからない」という中級者へ向けて書いています。 Ruby を始めるならどんな本を読めばいいの? とたびたび聞かれます。そんなときは決まって、「他の言語が使えるなら『はじめての Ru
こんにちは、鈴木です。 Rails でリクエストごとにロケールを変更するには、リクエストごとに (before_action などで) I18n.locale に :ja や :en などを代入します。 I18n ってスレッドセーフ? 先日、「Rails4 のロケールってスレッドセーフだよね?」「デフォルトでスレッドセーフになったから大丈夫なはずだよね?」という話がありました。 結論から言うと、I18n はスレッドセーフに作られています。 スレッドセーフにするには? そもそも Ruby でスレッドセーフなコードを書くときにやるべきことを振り返っておきましょう。 スレッドセーフにするには、以下のいずれかの方法をとります。 複数スレッドで共有するリソースに対して Mutex で保護する。 スレッドローカル変数を用いて、スレッド間でリソースを共有しないようにする。 I18n のスレッドセーフな
なんとなくパターン・ランゲージ(パターンカタログ)のスタイルが懐かしくなったので、あのスタイルを思い出しながら書いてみます。 目的 特定のアプリと完全に同期していますが、機能的には独立したライブラリをアプリ内のgemとして提供するものです。 動機 アプリで使いたい機能として、ある程度の独立した機能を実装したい 単独のクラスやモジュールとして実装できるものではなく、複数のクラス等が関連して動く程度の粒度を想定する(ので、個別のファイル単位よりはもう少し大きい粒度になる) 独立した機能とアプリが渾然一体となり、気がつくと境界を侵食したり侵食されたりしてしまうことは避けたい 適用可能性 いくつかのclassやmoduleがアプリケーションに依存せず、独立した機能になっている場合 特定のRailsアプリからしか使われる予定がない(共有する必要・予定がない)場合 一定期間しか利用せず、どこかのタイミ
紙書籍をお届けします(PDFがついてきます) PDFのみ必要な場合は、こちらからPDF単体をご購入ください 通常はご注文から2~3営業日で発送します。 年末年始や大型連休など、1週間から10日程度、配送のお休みをいただく場合があります。詳しくはお知らせをご覧ください。 Rubyインタプリタを自作してプログラミングを始めよう! 遠藤侑介 著、hirekoke イラスト 144ページ A5判 ISBN:978-4-908686-01-6 2017年7月7日 第1版第2刷 発行 正誤表 プログラミングを始めるなら、プログラミング言語を自分でつくってみるのがいちばん! 最低限の機能なら、こんなに簡単にインタプリタを作れます。よくわからなかったプログラミングも、裏側の仕組みから分かってしまえば怖くない! 2016年9月から2017年1月にかけてアスキーjpの「プログラミング+」コーナーで連載された大
railsを起動するとgemはどのように読み込まれてんのか rails new new_application をした後、 bundle install のようにrailsアプリを動かすのに必要なgemをインストールするわけだけど、 インストールした後、 rails server で起動した後にどのように gemをインストールされるかを追ってみる。 1. bin/rails railsコマンドが実行されると、config/applicationが呼ばれる。 #!/usr/bin/env ruby APP_PATH = File.expand_path('../../config/application', __FILE__) require_relative '../config/boot' require 'rails/commands' 2. config/application 一行
最近Modular Monolith(モジュラーモノリス)というアーキテクチャについての記事を色々と読んでいます。 個人的に面白いアーキテクチャかなと思っているのでメモがてらまとめてみたいと思います。 目次 Modular Monolithとは 記事 Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity The Modular Monolith: Rails Architecture Shopifyはいかにしてモジュラモノリスへ移行したか Modular Monoliths — A Gateway to Microservices モジュラモノリスで表現する複雑なドメイン領域と境界 【2020/10/25追記】 終わりに Modular Monolithとは そもそもMod
user = User.new(4) # 初期化, idの指定 user.name = 'piyo' # nameの指定 user.display # => 'id: 4, name: piyo' ソースコード 今回動作させたコードはこちらのリポジトリに置いた。 https://github.com/koyopro/ruby_object_with_rust READMEにビルドやテストの実行コマンドも記載しているので、動作を見ながら確認できると思う。 連携周りのソースコード 上の項で記載したsrc/user.rs(struct Userの定義)以外で特筆すべきファイルは以下の3つ。 他言語からRustの実装を呼ぶ為のインターフェース定義(src/lib.rs) Ruby-FFIを利用したブリッジの実装(lib/ruby_object_with_rust.rb) Ruby側のUserクラス
今日 Ruby Hacking Challenge in Hamada.rb に参加したときに ruby_jard という Ruby のデバッグツールを教えてもらいました。 これがかなり凄まじくすごかったのでちょっとまとめてみます。 ruby_jard とは ruby_jard とは Ruby のコードをデバッグするツールになります。 ruby_jard | Just another ruby debugger. Provide a better experience while debugging Ruby rubyjard.org 立ち位置としては byebug のようなデバッグツールになっており、コード上で jard というメソッドを呼び出すとそのタイミングでプロセスが停止して、コンソール上から Ruby のコードを実行できるような形になっています。 実際にどういう形でデバッグするの
$Id: index.html,v 1.6 2004/07/20 23:08:12 aamine Exp $ この文書は書籍『Rubyソースコード完全解説』のHTML版です。 ただし初校段階の原稿をベースにしているため、 書籍では修正されている間違いが残っている場合があります。 予め御了承ください。 2004-02-16 に全章を公開しました。 目次 まえがき 序章 第 1 部「オブジェクト」 第 1 章「Ruby言語ミニマム」 第 2 章「オブジェクト」 第 3 章「名前と名前表」 第 4 章「クラス」 第 5 章「ガーベージコレクション」 第 6 章「変数と定数」 第 7 章「セキュリティ」 第 2 部「構文解析」 第 8 章「Ruby言語の詳細」 第 9 章「速習yacc」 第 10 章「パーサ」 第 11 章「状態付きスキャナ」 第 12 章「構文木の構築」 第 3 部「評価」 第
コンピュータサイエンスが気になるプログラマに勧める書籍リスト Rubyist Magazine 第 61 号をお届けします。 (今回は内容に合わせて文体を変えております。ご了承ください。) さて、コンピュータサイエンス(以下「CS」)は知らないけど日々プログラミングしている、というプログラマの方はたくさんいらっしゃるかと思います。 そんな方でも、ふとCSを知ってる方がいいのかなとか、CSも知らないとまずいのかな……などと思い、改めて勉強してみたいけどとっつきが悪いとか、うっかり手にとったCSの教科書が何を言ってるかさっぱりで10秒で閉じた、という方もいらっしゃるかと思います。 それでもCSが気になるので、「本腰を入れて勉強をする前に、どういうことをやってるのか眺めてみたい」くらいの温度感の方向けに、CSに隣接するジャンルで、職業プログラマや趣味プログラマの人なら読めそうな書籍のリストを作っ
この記事は Akatsuki Advent Calendar 2019 1日目の記事です。 はじめに アカツキでは Ruby on Rails を使ったゲームサーバを開発・運用しています。ゲームの体験を向上するために、レスポンスタイムは一つの重要な要素となるため、種々のパフォーマンスチューニングを行なっています。今回はその一例として、環境変数を1つ設定するだけで、あるAPIのレスポンスタイムが10%も改善した例をご紹介します。 TL;DR 多数の時刻を含むレコードを扱う Ruby on Rails サーバでは、 TZ 環境変数を設定することで、デフォルトタイムゾーン設定ファイル /etc/localtime へのアクセスが減り、高速化が図れるかもしれません。 効果は Time オブジェクト1個あたり数μsの短縮といったオーダーですが、チリも積もれば山となり、数千個のレコードを処理するAPI
より快適なVim × Ruby環境を目指して構築したvim環境について。 0からでも構築できるように整理した。 やること 最初にRuby、Vim、その他必要なパッケージをガシガシインストールする。 その後、設定した下記機能について実際の操作例を見ていく。 自動コード補完ができるようにする(Rsense/neocomplete) Vim上で静的解析ができるようにする(Rubocop/syntastic) Vimからリファレンスを閲覧できるようにする(vim-ref/vim-ref-ri) メソッド定義元へのジャンプができるようにする(ctags/vim-tags) 構文終わりのキーワードを自動入力できるようにする(vim-endwise) OSはLinux(CentOS6.5)を想定。検証環境は以下のとおり。 $ uname -a Linux vagrant-centos65.vagrant
Spice Lifeの五十嵐邦明さんの一橋大学のRuby概論スライドがかなりすばらしかったのでまとめてみました。こんなキャッチーな資料がネットで手に入るというのは本当にありがたい限りです! (05-02 07:45) MATSUOKA Koheiさんの2014年度の講義資料を追加 ちなみに、スライドがたくさんあるので3部作ですw (1)『Ruby概論のスライドがすばらしかったのでまとめてみた(第一部)』<= 今ここ< strong> (2)『Ruby 概論のスライドが素晴らしかったのでまとめてみた(第2部)』 (3)『Ruby 概論のスライドが素晴らしかったのでまとめてみた(第3部)』 🗻 2014年ブログ一橋大学でRubyの非常勤講師をはじめました MATSUOKA Koheiさんが講師をされている2014年に現在開催中のRuby講義の資料です。勉強になります! Ruby講義第1回:
例えばberkshelfひとつ入れるのに、膨大な知識がいる。 もしあなたが単にPHPサーバを作りたいだけだったとしても、berkshelfをちゃんとしたモダンなやり方でいれるには膨大な知識がいる。 例えばruby, rbenv, ruby-build, gem, bundlerなどだ。 まあ、rbenvとruby-buildで最新のrubyを入れること自体はそんなに難しくない。Ruby言語の知識も必要ない。 運よくgem install berkshelfが一発で成功したら、別に問題はない。おめでとう。 そういう人はここから下は読む必要はないです。 ところがである。 ひとたびgem installが失敗したら、そこからは茨の道である。 インフラの問題 gem installしたら "ERROR: Could not find a valid gem 'chef-solo' (>= 0) i
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く