Rails Developers Meetup 2019 の講演「毎日の開発に役立つRailsプラグインづくりの秘訣」のスライド https://railsdm.github.io/ #RailsDM
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
by Shishir Kakaraddi, Srinivas Raghunathan, Adam Gross and Ryan Johnston We are pleased to announce the open source release of the Fast JSON API gem geared towards Ruby on Rails applications. Introduction Fast JSONAPI is aimed at providing all the major functionality that Active Model Serializer (AMS) provides, along with an emphasis on speed and performance by meeting a benchmark requirement of b
はじめに テストを書くことは、特にRubyやRailsのコミュニティにおいて開発の重要なプロセスですが、テストの完了に長時間を要するようにならないと、テストスイートのパフォーマンスを気にしない傾向があります。身に覚えがありませんか? 専用のテストプロファイラであるTestProfを用いて、Railsテストのパフォーマンスボトルネックを特定して修正する方法を学びましょう。 私はEvil Martiansに入社した最初の年から、さまざまなタイプのRailsアプリケーション(モノリス、モジュリス(モジュラー+モノリス)、APIのみ、Hotwireなど)に取り組んできました。これらのアプリケーションは、どれもテストスイートの速度面に改善の余地がまだまだ残されていました。 私はテスト高速化のヒントやノウハウを集めるようになり、最終的にそのノウハウをすべてTestProfという名のメタgemに盛り込み
Posted by usa on 29 Aug 2017 Ruby の標準添付ライブラリである RubyGems に、複数の脆弱性が発見されました。 RubyGems の公式ブログにて報告されています。 詳細 以下の脆弱性が報告されています。 a DNS request hijacking vulnerability. (CVE-2017-0902) an ANSI escape sequence vulnerability. (CVE-2017-0899) a DoS vulnerability in the query command. (CVE-2017-0900) a vulnerability in the gem installer that allowed a malicious gem to overwrite arbitrary files. (CVE-2017-0901
ピクスタ開発部で毎日ヒィヒィ言いながらエンジニアをやっております @muramurasan です。 今回はPIXTAのとあるリポジトリにおいて、未使用のメソッドを削除しようとした際、gemを組み合わせることで、効率的かつ安全に削除することができたという話をしたいと思います。 よくやる方式 外部の勉強会などで、「未使用のメソッドを削除する際にどうしているか?」ということを聞いた際、よく聞くのが「未使用らしきコードを見つけ次第、ロギングを行うメソッド呼び出しを挟み込んでいく」というものでした。 この方式は、動的なメソッド呼び出しにも当然対応できますし、お手軽なので、一般的に好まれているようです。 問題点 ただし、この方式では以下の問題点があると私は考えています。 そもそも、未使用らしいメソッドを見つけるのが大変 プロダクションコードを汚してしまう これらの問題を解決するために、PIXTAでは
自戒です tl;dr 発端 間違った対処法 だがしかし sonots先生曰く 検証結果 所感 Rubyのバージョンによる分岐を全部Gemfileに寄せた結果 謝辞 tl;dr gemspecの中でRubyのバージョンによってインストールしたいgemのバージョンを変えたい時は、gemspecではなくGemfileでif文書くのがおそらく正解 発端 先月くらいのFacebook内のちょっとした会話がきっかけでした *1 activesupportやactiverecord 5系以降ではRuby 2.2.2以降必須になった https://github.com/rails/rails/blob/v5.0.0/activesupport/activesupport.gemspec#L10 自分のgemがactivesupport (activerecord)に依存していた場合、そのままだとRuby
Railsで404や500といったエラーページを動的に表示するrexceptionというGemを公開しました。 インストール方法 Gemfileに以下を書いてbundleするだけで使えます。 gem 'rexception' 使い方 最もシンプルな使い方は、app/views/errors/application.html.erbにビューを配置するだけです。 これで、(捕捉可能な)すべての種類のエラー発生時に、対応するステータスコードとともにビューをレンダリングします。 not_found.html.erbやinternal_server_error.html.erbなど、ステータスに対応するビューを配置した場合、そのビューがapplication.html.erbよりも優先して表示されます(ファイル名はこの辺りの実装に準じています)。 また、レイアウトやエラーファイル配置ディレクトリ、独
日々、bundle updateしてますか! circleci-bundle-updateとcircleci-bundle-update-prを使って、bundle updateの Pull Requestを自動化する手順をまとめてみます。作者の記事を読めばいいっちゃいいんですが、地味に抜けていた手順と各ステップは何のために必要かを整理してみました。 このgemは、Pull Requestに各gemの差分リンクを貼ってくれるのが便利だな!って思って採用してます。素敵なgemをありがとうございます。 github.com github.com ステップは CircleCI経由でbotからgithubにpush出来るようにしておく CircleCI経由でbotからgithubにPR作れるようにしておく 外部からCircleCIへbuild指示できるようにする 外部からcronでCircleCI
rack-user_agent を作った rack-user_agentという、User-Agentに応じていろいろな判定ができるメソッドを生やすRack::Request拡張を作った。 tagomorisさんのWootheeを使ってRack middlewareでUser-Agentをパースしておいて、 その結果に応じてrequestから簡単にいろいろな情報を得られるようにしてある。 たとえばRailsだとGemfileにgem "rack-user_agent"と書くだけで以下のように使うことができる。 class ApplicationController < ActionController::Base before_action :set_request_variant def index # example request.user_agent #=> "Mozilla/5.0
『presidentbeef/brakeman - GitHub』は、 Railsのセキュリティの問題点等をコマンド1つでチェックしてくれるGemです。 企業等のサイト開発などでも気軽に使えるのでぜひ試してみてください。 bundle exec brakeman +BRAKEMAN REPORT+ Application path: /path/to/rails_app Rails version: 4.2.5 Brakeman version: 3.1.4 Started at 2016-01-18 23:46:28 +0900 Duration: 0.805318 seconds Checks run: BasicAuth, ContentTag, CreateWith, CrossSiteScripting, DefaultRoutes, Deserialize, DetailedE
こんにちは、金子です。 普段はRailsを書いたりしています。 今回は2016/4/6に発表された、RubyGems.orgの脆弱性についてまとめました。 脆弱性について RubyGems.org gem replacement vulnerability and mitigation をざっと読んでみると、 特定の状況で、RubyGems.orgにupdateされているファイルの内容が不正に書き換えられる可能性があった 特定の状況とは、2014-6-11から2016-4-2までの間に登録されたgemのうち、'blank-blank'のように名前に'-' (dash)が入っているもの ただし2015-2-8以降に登録されたgemはRubyGems.orgがsha256 checksumを計算しており、それと実際のファイルの突合をして、書き換えられていないことを確認ずみ つまり、2014-6
本記事はRubyについて書かれたものではありますが、Python、JavaScript、Javaなど、全ての言語コミュニティに当てはまる事実を述べたものです。依存関係が引き起こす負の連鎖は誰のためにもなりません。 上の図は、私がこれまでに使用した全てのRailsアプリの依存関係を可視化したものです。以下の例はいずれも、どこかで聞いたことのあるものではないでしょうか。 何百ものエントリを含むGemfile 本番環境で読み込まれるテスト用Gem 数百メガバイトもRAMを食うRailsのプロセス Rubygemsシステムは、それを再利用する誰もが容易にRubyのパッケージを作ることができるという点で、賞賛に値するものです。しかし、その便利さが意味するところは、そうしたGemと他のGemを非常に安易に結び付け、さらにそれが、「インターネットでダウンロード」され、数百もの依存関係を持つRailsアプ
今月2つ目のgemです activerecord-simple_index_name (0.1.0): Shorten index name https://t.co/vh4zzSYAMj— RubyGems (@rubygems) November 29, 2015 activerecord-simple_index_name について 例 使い方 作った経緯 追記 追記2 activerecord-simple_index_name について activerecordのデフォルトのindex名を短くするgemです github.com 例 こんなmigrationがあった場合 create_table :user_stocks do |t| t.integer :user_id, null: false t.integer :article_id, null: false t.time
unicornのwokerのbusy数とidle数の比率がわからなくて、うっかりworkerが枯渇して大変なことになったので、workerの状況を返すエンドポイントを追加するrackミドルウェアを書いています。 github.com ぶっちゃけkazeburoさんのPlack-Middleware-ServerStatus-Liteのruby版です。 github.com この中で使っているkazuhoさん製のParallel-Scoreboardも移植しました。(まだREADMEがない。。。) github.com 元は下記です。 github.com Kazuho@Cybozu Labs: Parallel::Scoreboard でワーカープロセスをモニタリングする方法 使い方 config.ruに下記の用に書く。 # In config.ru use Rack::ServerSta
こんにちは。新規広告開発部所属エンジニアのレオ(@lchin)です。普段は広告配信関係のシステムを開発していますが、ここ最近「データサイエンス」に興味を持ち始めました。雑に説明すると、データサイエンスは統計学や機械学習などを用いて莫大のデータから価値を引っ張り出す分野です。今回のtechlifeは、そのデータサイエンスを学ぶ過程で知ったツールJupyter NotebookをRuby on Railsの開発に役に立つ使い方を紹介します。 Jupyter Notebookとは何か Jupyter Notebook*1は科学者の「実験ノート」にインスパイアされたウェブ上のインタラクティブシェル環境です。ただのインタラクティブシェル環境ではなく、ソースコード、その実行結果、解説する文書、数式、画像などをまとめて1つの「ノートブック」ドキュメントとして扱えることが特徴です。 Jupyter Not
■ [ruby] gemを作るときに実行ファイルをbin/以下ではなくexe/以下に置くことについて 例えばあなたがコマンドラインからピザを注文するようなRubyGemsを書いているとすると、今まではbin/order_pizzaに実行用のファイルを置いていたと思うけど、それがexe/order_pizzaに変わるかもしれない、という話。 仕様変更なの? 実行ファイルをどこに置くかというのは完全に慣習の話で、.gemspecの仕様上は好きなところに置けるようになっている。なので既存のgemが動かなくなるという話ではない。 ただbundle gemコマンドでgemを新規生成したときに、以前のBundlerでは.gemspecが以下のようになっていたのに対し、 spec.bindir = "bin" spec.executables = spec.files.grep(%r{^bin/}) {
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く