週刊Railsウォッチ(20170317)Railsパフォーマンスチューニング本、DBレコード存在チェックの最速メソッド、RubyのUnicode正規化ほか|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。週刊Railsウォッチ(20170317)Railsパフォーマンスチューニング本、DBレコード存在チェックの最速メソッド、RubyのUnicode正規化ほか開発2017.03.17週刊Railsウォッチ(20170317)Railsパフォーマンスチューニング本、DBレコード存在チェックの最速メソッド、RubyのUnicode正規化ほかhachi8833&シェアツイートブックマークLINEこんにちは、hachi8833です。「HackerNewsのランキングアルゴリズムをリバース・エンジニアリングした記事がHackerNewsから削除されたという記事」が昨日までHackerNewsでトップでした。IPAが自ら脆弱性を報告した無料ゲーム「安全なウェブサイト運営入門」は書籍の名前かと思ってしまいました。それでは今週もいってみましょう。Performanceより元記事は「私はいかにしてRails本で7万ドル稼いだか」的な記事ですが、その書籍の方をピックアップしました。読んでみないと何とも言えませんが、よさそうです。AC::Parameters改修箇所は以下です。end#mergeと#merge!のパラメータ順序をRubyのHash#mergeで確認すると以下のようになっていました。parametersにデフォルト値を設定したいときにいいかも」という声がありました。parametersの#permitは、paramsに入ってないkeyを#permitした場合にParameterオブジェクトの当該keyがnilになってしまいます。従来であればデフォルト値を与えたいときには自力でkeyに与える必要がありましたが、#reverse_merge!を使ってparamsのkeyにデフォルト値を与えられます。モデル側で余計なことをしたくない(ビューの都合だけでデフォルト値を設定したいなど)場合に、モデルではなくコントローラ側でデフォルト値を与えられるのがよいかもという意見もありました。個人的にはコントローラでparamsをそれ以上いじるのは避けたい気がしました。screenshotImprovementに分類されてましたが、バグ修正ですね。修正もごくわずかでした。Migrator.schema_migrations_table_nameSchemaMigrationモデルが切り出されたことによる変更です。変更自体はアプリ開発者には直接関連しませんが、schema_migrationsという名前のテーブルが話題になりました。Railsのデータベースにはschema_migrationsテーブルがあり、versionカラムにはそれまでマイグレーションに使ったファイル(db/migrate/以下)のバージョン番号がすべて保存されています。マイグレーションが思うようにいかなくて、思い余ってマイグレーションファイルのバージョン番号を変更してしまう人がいるらしいのですが、「schema_migrationsテーブルの一貫性が損なわれるから絶対やめた方がいいよ」という話を聞きました。マイグレーションには恥ずかしい履歴が残りがちなので、気持ちはわかります。throwing改修箇所はわずかでしたが、見終わってからRackとWardenの役割の違いについて話題になりました。手短にまとめると、Wardenは認証用フレームワークであり、RackとRailsアプリの間の層で認証やセッション管理をつかさどります。Rackはmorimorihogeさんいわく「薄いWebサーバー」であり、Rackの上でRailsやSinatraなどのアプリケーションが動作します。知るが良い」がそれぞれ参考になります。db:migrateを実行できるのですが、「何が起きるかわからないからコマンドはプロジェクトのルートディレクトリでしか実行しない」という意見がありました。ActionController::Rendererasset_urlが不完全だった(’https://’が含まれないことがあった)問題の修正です。#28250ではやや緊張感のあるやりとりが繰り広げられていました。こんな写真が貼られてたり。お茶目でやっていると思います。https://github.com/rails/rails/pull/28250より最終的にPRのrebaseに手違いが見つかり、それを修正して無事commitされました。associationkamipoさんによる1行修正で完了しました。apostrophes改修箇所は、正規表現への\w(語の区切りを表す)の追加で終わりました。Support::Inflectorの便利な活用形メソッド群」でお見かけしていました。その後お変わりありましたね。ちなみに私はtitlelizeという造語のスペルを一発で入力できたことがありません。#titlelizeのサンプルに使われている映画のタイトルが趣味全開ですね。さりげに新旧取り混ぜているのはコミッターの層の厚さゆえかシニアコミッターに気を遣ったのかはわかりませんが。arrayこれもkamipoさんによる修正で、PostgreSQLのみが対象です。kamipoさんのコミットが膨大なので、昨年既に七福神入りしていたんですね。Code#attr_readerで初期化を簡潔に書く、ブロックをprocオブジェクトに置き換えるなどの方法などが紹介されています。それほど短い記事ではありませんが、込み入ってはいないので読んでおくとよさそうです。2つある程度複雑な初期化を楽に書くgemとして、morimorihogeさんが以下の2つを教えてくれました。Support」記事のリベンジです。normalization.一転してUnicode正規化を熱心に調べています。短くもよくまとまった良記事です。後でじっくり読んでみます。「RubyやRailsのコミュニティがUnicode正規化に思ったほど関心を寄せていないのに少しだけ驚いた」としめくくっています。ASCIIだけで事足りる英語圏ではある程度仕方がないかなとも思いますが、私としては、絵文字のおかげで近年こうした問題に以前よりも関心が高まっているような気はしています。最適化の主題となっているsigprocmaskって何だろうと思って一同で検索したところ、プロセスが応答するシグナルを変更するシステムコールでした。VMには符合しなさそうです。1.8なのか以下は、同記事のRubyバージョンがえらく古い点についての私の推測です。全文がHTMLで公開されている「Rubyソースコード完全解説」は2004年に公開されましたが、英語化されたのはかなり最近です。1.7.xをベースにしている(前書きには1.8でもほとんど同じだろうと書かれている)ので、2.xではこうしたローレベルの最適化を追求しづらかったのではないかと思いました。morimorihogeさんが「それぞれのメソッドがどんなSQLを吐いているかを知っておくことが重要」と指摘していました。1が含まれているのが効いているようです。著者は「いつもexists?でおk」と結論づけていますが、こうした速度はさまざまな条件によって影響される可能性があるので、参考として頭の隅に置いておこうと思います。oneはクエリの結果がいらない場合の定番のSQLであることを今さら知りました。gimite/google-drive-ruby表計算を何とかするgemです。OAuth認証と組み合わせることで、RubyからGoogleスプレッドシートにアクセスして読み取りや更新を行えます。記事やリポジトリには記載されていませんが、Railsでも使えると思います。スプレッドシートを正しく運用できるのであれば、案件によっては合うかもしれません。この種のgemを導入するときは、頻繁に更新されている(=放置されていない)ものを選ぶのが重要ですね。機会があれば使ってみたいですが、データをシートから取ってくるだけにしておきたいと思いました。RubyRubyはオープンクラスなのでモンキーパッチを簡単に当てられますが、よく切れるナイフと同様、自分の身を傷つけないように注意が必要と説いています。アプリケーションにおけるモンキーパッチの当て方」を挙げました。APPLICATIONS?RubyFlowのリンクが壊れていたので、直接元記事にリンクしました。開発ツールの再利用が利く開発者に優しい英語に近い感覚タイトルと本文の量がほぼ同じぐらいですね。Usを見るとインドのアフマダーバードの会社でした。EuRuKo「〜する理由」記事が続きます。EuRuKoはヨーロッパで開催される大きなRubyセッションです。2016年度はブルガリアのソフィアでの開催、そして今年は9月にハンガリーの首都ブダペストでの開催となります。Golfも大いに盛り上がったそうです。morimorihogeさんによると「会場が空港や駅から遠い」「宿がスムーズに取れない」「会場の周辺に居酒屋などがまったくない」カンファレンスはやっぱりつらいそうです。日本であれば多少不便でも旅情を味わえたりしますが、海外(特にヨーロッパ)だと都市部であってもコンビニが少なかったりレストランも土日閉まってたりすることが多いので、参加にあたってはそのあたりをチェックしたいですね。週刊Railsウォッチ(20160913)MySQLの脆弱性ほか今週の主なニュースソースソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。enno.jpを運営。実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。