週刊Railsウォッチ(20161027)LinuxカーネルのDirty COW脆弱性、DeviseはWikiを読めほか

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

こんにちは、hachi8833です。今週のRailsウォッチをお届けします。特に英語情報に限ってはいませんが、中国語とか読めないので。

臨時ニュース

ここで臨時ニュースです。

既に先週から日本語でも報道されていますが、LinuxカーネルのDirty COW(Copy-on-write)脆弱性が報告されています。久しぶりの権限昇格の脆弱性です。

CVE-2016-5195で日本語の情報も参照できます。
詳しくはリンク先をどうぞ。Dirty COWの詳細についてはYouTubeのExplaining Dirty COW local root exploit – CVE-2016-5195(12分)も便利です。

Riding Rails: 公式ニュース

rails-logo

ニュースの末尾では最近のRailsコミットをチェックできる便利なリンクも紹介されています。意識高まって夜眠れないときなどにどうぞ。

161026_0931_suikot

#26793: processメソッドをpublicにしました

#processがpublicになったことで、たとえばHTTP のOPTIONメソッドとかをRailsで受けるコードを書きたい場合に、従来ならそのためのRackアプリを書いていたのを今後は自前で定義できそうです。

JRubyでのRails 5動作確認をRuby World Conferenceに間に合わせるため突貫作業中

だそうです。

#26050 optimisticロックが修正されました

optimisticロックがデータベースのnull値で不具合が生じる問題が解決されました。

Rendererのenvで任意のキーを使えるようになりました

warden_manager = "set up warden"
SomeController.renderer.new(warden: warden_manager).render

たとえばWardenを使う上のようなコードがある場合、従来ではテンプレート側でrequest.env["warden"]がnilになりましたが、修正後は”set up warden”を取れるようになります。

無印枠

RSSリーダーやTwitterで収集したニュースを無印枠でお届けします。

Railsにパスワードなし認証を導入する

ここでいう「パスワードなし認証」とは、パスワードをサイトに登録せず、メールでトークン付きリンクを送ってログインする手法です。ちょうど毎回パスワード忘れしてメールで届いた確認用URLを使ってログインするような感じです。

メールアドレス自体が無効になってしまうとログインできなくなってしまうことになりますので、一般のサービスでは「秘密の質問」などを併用しないと問い合わせが増えてしまいそうです。逆に言えばメールアドレスを無効にすることでアカウントを厳しくクローズできるので、用途によっては有用かもしれません。

パスワードリセット用リンクを外部サイトに渡していませんか?

たとえばパスワード忘れの確認用URLを開いたとき、そのページで画像やJS/CSSで外部のサイトをrenderするようになっていると、外部サイトの画像取得やリソース取得のリクエストのrefererにtoken付きのURLが含まれる可能性がある、ということのようです。

ユーザーが外部の画像を自由にアップロードできるようなサイトで、かつ使ったtokenを即座に無効化していない場合はこの問題が生じるかもしれません。著名な認証ライブラリを使っていればtokenは即座に無効化されると思いますが、認証部分を手作りしている場合は(普通しないと思いますが)確認が必要そうです。

Elixirに賭けてみる理由

個人的にはElixirやPhoenixにシンパシー感じてますが、Railsと同じものを作っただけでは乗り換えの理由にならないよね!というmorimorihogeさんのツッコミがありました。それもそうなんですよね。

どんな獰猛なJS処理系・ライブラリでも完全に飼いならすとか、キラー的要素が3つぐらいあればなあと思う次第です。

今さらですが、bundlerってほんとよくできてると思いますよ。

Ruby Facets

Ruby Facetsがいい感じなのでレギュラーに昇格させました。

ruby_facets

concernに注意

concernはモジュールの一種で、コントローラやモデルの共通メソッドを置いて、必要な場所でincludeして使います(参考)。この記事ではconcernの注意点について解説しています。

Procodile gem

procodileというプロセス管理用gemを紹介しています。本当はcrocという名前にしたかったけど他で使われてたのでこれにしたそうです。Procfileというファイルでプロセスリストを定義して自由に起動できるんだそうです。

1-uwvoxmuty6wkubmitmqnia
adamcooke/procodileより

類似のソフトウェアとしてgod gemやmonitが有名です。monitは歴史も長くかなり強力だそうです。

プロセス管理ソフトウェアを使っていると、それ自体が死んでしまったときのためにまた別のソフトウェアで監視し、それをまた別の…という愉快な事態になってしまうことも多々あるようです。寝たきり老人を介護している要介護老人をまた別の人が介護しているような塩梅ですね。

RubyFlow

160928_1638_XvIP4h

RubyFlowは誰でも記事をsubmitできるようなので玉石混交ですね。一部の記事にスパムコメントがついているし。

ビューにロジック入れるなよ馬鹿野郎

RailsのビューにRubyのロジックが含まれるとテストが面倒です。ERBやhamlをかき分けて条件分岐とか見るのいやですよね。この記事ではdecoratorパターンを使ってビューのロジックを切り離す方法を紹介しています。decoratorが肥大化するとそれはそれでアンチパターンになるので、よしなに分割しています。

DeviseでUsersモデルのカスタムスコープや条件付けを行う

paranoia gemに without_default_scopeオプションを追加するPRを行ったんだそうです。

DeviseはWikiを読め!

ここでお知らせです。DeviseといえばRailsでおなじみの認証ライブラリですが、DeviseのWiki恐ろしく情報が充実しているので、困ったことがあったら真っ先にここを見ることをおすすめします。

表紙はそっけないのですが、“How-To” Articlesをクリックすると、そのまま本気で使えるサンプルが大量に掲載されており、ここを探せば大抵の用途は事足ります。以上morimorihogeさんから聞いたお話でした。

161027_1626_ido3vu

Hash#compactとHash#compact!がRuby 2.4に取り込まれる

従来RailsのActive Supportの機能だったHash#compactとHash#compact!が、Ruby 2.4の機能として取り込まれたそうです。値がnilのキー値ペアを削除する機能です。C言語で再実装されたのでパフォーマンスも向上したそうです。

knock gemでRails APIのJWT認証を実装

knock gemはRails APIでJWT認証を行うgemです。JWTはJSON Web Tokensだそうです。JWT認証の必要なサービスは多いので要チェックです。

7分間のスクリーンキャストなので頑張って英語で視聴してください。最近のYouTubeの英語字幕機能はすごく優秀なので、時間のない方は英語字幕をオンでどうぞ。

decoratorの話

Draper、便利ですよね。Ruby ToolboxのRails Presenterで圧勝しています。

この記事では、Draperは他のデコレーターをラップできないから本当のデコレーターとは違うんではないかみたいな話題を扱っています。Railsの場合プレゼンター(Presenter)パターンと呼ばれることが多いようですし、Ruby ToolboxでもPresenterと分類されています。

デコレーターに置いたメソッドをモデルでも使いたくなったら、それは「モデルに置け」のサイン。

Railsの管理コンソールgem

ruby-toolbox.comではActiveAdminRailsAdminが人気を二分しているようですね。ActiveAdminの方がruby-toolboxでの人気は高いようですが、Githubの☆の数はそう変わらないようです。

ActiveAdminのデモRailsAdminのデモをそれぞれ見てみると、RailsAdminはBootstrap感がありありですね。個人的にはRailsAdminを試してみたい気がします。

この種の管理コンソールgemは、DBや仕様面で詳しいエンジニアよりな管理者以外に提供するのはやめておく方がよいでしょう。

Railsを追う者たち

「Railsより速いぜ」を謳うポストRailsフレームワークはちょくちょく名乗りを上げていますのでもう珍しくもないと思いますが、今週目についたのはとりあえず以下の2つでした。

em-midoriはGithub Trendingでもそこそこ頑張っているみたいです。速さだけなら自説のとおりだと思いますが、エコシステムとして成長するためにいかに多くのエンジニアを最初に引き寄よせるかでどうしても苦労することになるので、他人事ながらドキドキしてしまいます。DHHはその意味で本当に偉かったんだなーと今さらのように思いました。美しく機能的で無駄のないフレームワークだから人気が出るとも限らないあたり、ロックスターがアルバムを売る苦労やユーチューバーがPVを稼ぐ苦労に通じるものがありそうです。

Hacker News

160928_1654_q6srdR

Upworkを使ってはいけない理由

https://www.upwork.com/はフリーランス開発者と顧客の依頼をマッチングするサービスです。支払い面やサポートなどでいろいろ不手際があったらしく、記事では怒りを露わにしています。

ポーカーのイカサマ装置の全貌

日本でもプロ将棋でスマホを見たの見ないのともめているようですが、今はその手の道具が豊富過ぎるのでカジノも頭が痛そうです。

Github Trending

160928_1701_Q9dJIU

WhereAreTheEyes

監視カメラを見かけたらカメラの位置をマップで共有するアプリだそうです。政治的な意図で作ったもののようで、「活動家を支援するのが目的」とあり、当然のように議論を巻き起こしてます。

今週は以上です。

関連記事

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

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833

コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。
これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。
かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。
実は最近Go言語が好き。
仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ