週刊Railsウォッチ(20161125)Railsのデータベース・ベストプラクティス、SQLインジェクション解説ほか

※ 「Ruby/Rails界隈ウォッチ」は2016年12月より週刊Railsウォッチにタイトルを改めました。

こんにちは、hachi8833です。昨日のTechRachoでお知らせしたとおり、RailsチュートリアルがRails 5に完全対応しました。それでは今週のRailsウォッチです。

臨時ニュース

Ruby 2.3.3リリース

11月21日に2.3.3がリリースされました。

このリリースには Refinements と Module#prepend に関する不具合の修正が含まれています。 同じ Class に対して Module#refine と Module#prepend を併用すると意図しない NoMethodError が発生することがありました。 これは先日の Ruby 2.3.2 のリリースで入り込んだ不具合です。 詳しくは [Bug #12920] を参照してください。
ruby-lang.orgニュースより

Rails公式ニュース

CapybaraがRails 5.1での統合準備すすむ

統合後はRailsのテストフレームワークがActionSystemTestと呼ばれるようになるそうですが、また変わるかもしれませんね。最初Capybaraの名前が変わるのかと空目してしまいましたが、違いました。

なおBona fideはラテン語で「本物の」「真正の」といった意味です。

Ruby Weekly

RubyのC言語拡張機能を書く―2016年版

morimorihoge: サウンド関係など、リアルタイム処理やりたいときや特殊なドライバをRubyからつつきたいときは必要になるかもしれないですね。

KubernetesでRailsをデプロイする

Kubernetesは自前でクラウドを構築するレベルのソフトウェアなので、強烈に難しそうです。morimorihogeさんの解説では、live migrationひとつとっても膨大な問題をクリアする必要があるそうです。

morimorihoge: 今ならDocker SwarmがDocker Engineに統合されたし、AWS ECSやGCPなどにも類似コンテナサービスがあるはずなので、そっちを使いたいですね。

Kubernetesはギリシャ語由来だそうで、発音は「クーベルネイテス」が近そうですね。きぐしねいです。

WebPackとYarnでAsset Pipelineを置き換える

多くの人がSprocketsやAsset Pipelineを何とかしようとして頑張っていますね。早く決定打が登場して欲しいです。

Railsのデータベース・ベストプラクティス

  1. データベースに本来の仕事をさせよう
  2. 有効かつチェイン可能な(chainable)スコープを使おう
    1. スコープはActiveRecord::Relationを返そう
    2. フィルタはRubyではなくデータベース側で行おう
    3. ソートはRubyではなくデータベース側で行おう
    4. スコープで不必要なORDERを指定しないようにしよう
  3. データベース呼び出しの回数を減らそう
  4. インデックスを使おう
  5. クエリが複雑になったらQueryオブジェクトを使おう
  6. ScopeやQueryオブジェクトの外でその場限りのクエリを行わないようにしよう
  7. 型を正しく指定しよう
  8. データベースの全文検索機能の利用も検討してみよう
  9. ストアドプロシージャは最後の手段にとっておこう

morimorihoge: 7.について、PostgreSQLは型についてかなり厳格だけどMySQLは逆にユルいので、Active RecordでMySQLを使っている人ほど型を正しく指定することに気をつけることをおすすめします。

RubyistのためのO(n)記法

計算量のO(n)記法をRubyのコードで解説してくれているのがありがたいですね。

RubyFlow

160928_1638_XvIP4h

Rails 5でのSQLインジェクション問題解説サイト: rails-sqli.org

現時点では以下のSQLインジェクション例が紹介されています。再現用のGitHubリポジトリもあります。

  • Calculations#calculateメソッド
  • delete_allメソッド
  • destroy_allメソッド
  • exists?メソッド
  • find_byfind_by!メソッド
  • fromメソッド
  • groupメソッド
  • havingメソッド
  • joinsメソッド
  • lockメソッド、find:lockオプション
  • orderメソッド
  • pluckメソッド
  • reorderメソッド
  • selectメソッド
  • whereメソッド
  • update_allメソッド

提供元はBrakeman Proのスタッフです。すべてを網羅しているわけではないので、新しいパターンを見つけたらぜひ貢献して欲しいとのことです。

Hacker News

160928_1654_q6srdR

SpaceX社が低遅延のギガビット級衛星インターネットを計画

morimorihogeさんの解説によると、衛星経由のインターネット接続は広帯域ではあるが遅延(レイテンシ)が大きいという特性があるそうです。TCP 3-wayハンドシェイクとかいかにも苦しそうですね。

SpaceX社は、高度715〜823マイルの低軌道衛星を4,425機打ち上げ、現行のHugesNet衛星(高度22,000マイル)の600ms程度の遅延を25〜35msに短縮する計画であるとのことです。

なお715マイルは約1150km、22,000マイルは約35400kmなので、SpaceX社の衛星は低軌道とは言っても国際宇宙ステーションより高高度になりそうです。

Quick, Draw

Made with some friends from Google
Quick, Drawより(Quick, DrawはGoogleのサービスです)

指定の絵を20秒以内に描いてGoogleのニューラルネットワークに判定させるという遊びです。先週からBPSでも密かに流行っています。

これ本当に、子どもの英語学習教材として非常に強力なんじゃないでしょうか。

Googleが.NET Foundation加入を表明

Google公式ブログ(英語)でも、.NET FrameworkをGoogle Cloud Platform(GCP)で優先サポートすると発表されています。ついこの間のマイクロソフトのLinux Foundation加入に答えるかのようなタイミングです。

もしかするとGoogleは本気でJavaからC#に乗り換えるのかもしれません。ご存じのとおり、既に.NET FrameworkやC#などがオープンソース化され、Macでも開発・実行可能な環境が急速に整いつつありますが、それにしても動きが早くなってきました。

警告: Windowsのアプリやツールで(WSLの)Linuxファイルを絶対に変更しないでください

MSDNブログでの発表です。Windows側からLinuxファイルを変更するとデータが破損、最悪の場合ディストリの再インストールが必要になるかもしれないとのことです。

Github Trending

160928_1701_Q9dJIU

最近のGitHub Trendingは何とかAwesomeといった単なるまとめ情報が上位にあがってきて邪魔ですね。それも機械学習系のまとめ情報が目立っています。

devdocs

http://devdocs.io/は、複数のAPIドキュメントを串刺し検索できます。Dashのオンライン版のようなおもむきですね。私は一発で気に入ってしまいました。

使いたいドキュメントの[Enable]をクリックすることで、検索窓で検索できるようになります。

morimorihoge: GitHubでソースが公開されているのが良いですね。

Goの部屋

GDrive

Googleドライブのコマンドライン版クライアントです。ファイルリビジョンまで扱えます。これを使ってちょっとしたアプリケーションすら作れそうです。

無印枠

secureheaders gem

セキュリティ関連のヘッダーを集めたgemです。

今週は以上です。

関連記事

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ