※ 「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コミットをチェックできる便利なリンクも紹介されています。意識高まって夜眠れないときなどにどうぞ。
#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がいい感じなのでレギュラーに昇格させました。
concernに注意
concernはモジュールの一種で、コントローラやモデルの共通メソッドを置いて、必要な場所でincludeして使います(参考)。この記事ではconcernの注意点について解説しています。
Procodile gem
procodileというプロセス管理用gemを紹介しています。本当はcrocという名前にしたかったけど他で使われてたのでこれにしたそうです。Procfileというファイルでプロセスリストを定義して自由に起動できるんだそうです。
類似のソフトウェアとしてgod gemやmonitが有名です。monitは歴史も長くかなり強力だそうです。
プロセス管理ソフトウェアを使っていると、それ自体が死んでしまったときのためにまた別のソフトウェアで監視し、それをまた別の...という愉快な事態になってしまうことも多々あるようです。寝たきり老人を介護している要介護老人をまた別の人が介護しているような塩梅ですね。
RubyFlow
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さんから聞いたお話でした。
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ではActiveAdminとRailsAdminが人気を二分しているようですね。ActiveAdminの方がruby-toolboxでの人気は高いようですが、Githubの☆の数はそう変わらないようです。
ActiveAdminのデモとRailsAdminのデモをそれぞれ見てみると、RailsAdminはBootstrap感がありありですね。個人的にはRailsAdminを試してみたい気がします。
この種の管理コンソールgemは、DBや仕様面で詳しいエンジニアよりな管理者以外に提供するのはやめておく方がよいでしょう。
Railsを追う者たち
「Railsより速いぜ」を謳うポストRailsフレームワークはちょくちょく名乗りを上げていますのでもう珍しくもないと思いますが、今週目についたのはとりあえず以下の2つでした。
em-midoriはGithub Trendingでもそこそこ頑張っているみたいです。速さだけなら自説のとおりだと思いますが、エコシステムとして成長するためにいかに多くのエンジニアを最初に引き寄よせるかでどうしても苦労することになるので、他人事ながらドキドキしてしまいます。DHHはその意味で本当に偉かったんだなーと今さらのように思いました。美しく機能的で無駄のないフレームワークだから人気が出るとも限らないあたり、ロックスターがアルバムを売る苦労やユーチューバーがPVを稼ぐ苦労に通じるものがありそうです。
Hacker News
Upworkを使ってはいけない理由
https://www.upwork.com/はフリーランス開発者と顧客の依頼をマッチングするサービスです。支払い面やサポートなどでいろいろ不手際があったらしく、記事では怒りを露わにしています。
ポーカーのイカサマ装置の全貌
日本でもプロ将棋でスマホを見たの見ないのともめているようですが、今はその手の道具が豊富過ぎるのでカジノも頭が痛そうです。
Github Trending
WhereAreTheEyes
監視カメラを見かけたらカメラの位置をマップで共有するアプリだそうです。政治的な意図で作ったもののようで、「活動家を支援するのが目的」とあり、当然のように議論を巻き起こしてます。
今週は以上です。
関連記事
- 週刊Railsウォッチ(20161019)ObjectSpaceモジュール活用法、Capybara統合、コミッターを撮影するソフト
- 週刊Railsウォッチ(20161012)RubyのHashの詳細、RethinkDBの会社が終業ほか
- 週刊Railsウォッチ(20161005)Mac OS SierraとRubyの問題、Learning Gitほか
- 週刊Railsウォッチ(20160928)constantizeの注意点、GoのGUI “gallium”登場ほか
- 週刊Railsウォッチ(20160921)クールなHTMLエディタ「Mozilla Thimble」他
- 週刊Railsウォッチ(20160913)MySQLの脆弱性ほか