※ 「Ruby/Rails界隈ウォッチ」は2016年12月より週刊Railsウォッチにタイトルを改めました。
こんにちは、hachi8833です。10月最初のRailsウォッチです。
RubyFlow
商用プロジェクトで使われているRubyのバージョン(2016年版)
詳しくはリンク先をご覧いただくとして、現行のプロジェクトではバージョン2.2.xと2.1.xで半数を超えていますね。1.9系も減りつつあるとはいえまだ10%を占めています。
新規プロジェクトはさすがに2.2.xと2.3.xで8割を超えています。新規で1.9系を使う例はごくごくわずかですが、どんな事情があるのでしょうか。
morimorihogeコメント
うーん、このリンク先のデータはsemaphoreというcontinuous development支援サービスのデータを参照しているみたいなのですが、今一つ信頼していいのか怪しく感じました。僕の感覚ではRuby 1.8系のzombieなアプリはもっと世の中にあるはずという印象です。
このsemaphoreというサービスがリリースされたのは2012年のようなので、その頃には既に新規でRuby 1.8系のサービスを作ることはほとんどなかったというのが影響しているのではないかと思いました。
Ruby on Railsの(に限らない)CORSへの対応について
Cross-Origin Resource Sharing(CORS)はW3Cが2014年にRecommendationとした、クライアントサイドで現在開いているページ以外のドメインへのアクセス(Cross-origin)を可能にする機能の仕様です。このためにAccess-Control-Allow-Origin
などの新しいヘッダが使用されます。
この記事の著者も「CORSについて」という別記事を読んで初めてCORSが分かったと述べており、そちらを読んで欲しいとのことです。
ざっと見たところ、Railsの静的なassetファイルをCDN(Contents Delivery Network)に配置したときにassetがクロスオリジンになってしまう問題といくつかの解決方法について主に述べています。
CORSについてはMDNの日本語解説があります。
Bullshit-Free Review
Railsアプリ間でモデルを共有する
1台目のRailsアプリからconcernをgemとして切り出し、2台目のRailsアプリに導入するという手法を紹介しています。Part1とPart2に分かれている大作記事です。
morimorihogeコメント
個人的には複数app間でModelをsharingするのは地雷を踏みまくりそうなポイントだらけなので全くオススメできないですね。もしどうしてもやりたければGit submodule/subtreeとかでapp/models/#{namespace}を共有する、とかで確実に同じソースが共有されるようにしたいところですが、僕は地雷を踏み抜く自信があります(確信)。
おとなしくfat applicationにするか、microserviceに切り出すとかを考えた方が後々禍根を残さないんじゃないかなあと思いました。
Rubyで使える画像識別サービスAPIを比較する
機械学習系の話題です。大手デベロッパーからコミュニティまで、画像識別サービスを利用するさまざまなRuby gemを紹介しています。
詳しくはリンク先を読んでいただくとして、その中でGoogleがGoogle Couldプラットフォームを利用するためのgem「google-cloud」をリリースしていることを初めて知りました。Google Couldプラットフォームでは画像識別以外にもさまざまなサービスを利用できるようです。
こうした機能をgemで導入できるようになってきたことで、普通のRailsアプリでもだんだん使われるようになるかもしれません。
Ruby Weekly
月額固定費用でRailsアプリのメンテナンスを請け負うreinteractive
こちらは企業サイトの宣伝ページですが、月額固定費用でアプリをメンテナンスするというビジネスモデルがやや目新しく思えました。
morimorihogeコメント
サービスサイトを眺めてみましたが、バグフィックスとかsecurity updateみたいな機械的にやれる様なことだけ対応する様にもみえて、今一つどれくらいきちんとしたことをしてくれるのか分かりませんでした。これだけではなんとも言えないなあ。。。
Ruby trunk
#12804 MacをSierraにアップグレードするとdbアクセス時にRailsコンソールが死ぬ
実際に死ぬのはSQLite3だそうです。
#12808 Mac OS SierraでRubyをビルドするとProcess::UPTIME定数が生成されない
この間リリースされたMac OS X Sierraでは/usr/include/time.hのCLOCK_UPTIME
がなくなってCLOCK_UPTIME_RAW
になってしまったのだそうです。
Sierraではキー入力周りも変えられているらしく、Macのキーリマッピングソフトウェアの定番Karabinerが動かなくなって多くの人が困っています。私もです。
Github/trending
pg-eyeball
PostgreSQLのexplainコマンドの出力を見やすく整形してくれるgemです。Go言語で書かれたPostgreSQLビジュアライザであるgocmdpevもインストールしておけば、さらに見やすくカラーリングできます。
Railsコンソールで次のようにpg-eyeballとgocmdpevを実行できます。Railsのバージョンは4と5に対応しているそうです。
User.all.preload(:profiles).eyeballs.gocmdpev
GitHub Changelog Generator
GithubのChangelogをmarkdown形式で整えてくれるgemです。ドキュメント化を前提としたコミットメッセージを心がけていれば便利かもしれません。
[https://github.com/skywinder/github-changelog-generator](https://github.com/skywinder/github-changelog-generator target=)より
Hacker News
https://github.com/mxgmn/WaveFunctionCollapse
ビットマップでパターンを与えると、その特徴を捉えて類似のビットマップパターンを生成するというプログラムです。ゲームによくあるマップ自動生成みたいなものだと思いますが、動作がかなりインテリジェントで、2次元3次元を問わず、与えたパターンの特徴を壊さずにそれっぽいマップをずんずん生成します。3次元はさすがに重いそうです。
ゲームプログラミングのことはわかりませんが、これマジで凄いんじゃないでしょうか。もうマップ作成はこれだけでできちゃいそう。
C#で書かれていますがそれほどサイズは大きくないので移植すると楽しそうです。パターン例を見ているだけでも楽しくなります。
Github Trending
Gitの実験版「Gitless」
既にはてぶなどでも話題になり始めていますが、Gitのコマンドセットを縮小して使いやすさを目指したGitlessが登場しました。Pythonで書かれています。
Gitとの比較については、同ページのGitless vs. Gitを見るのが早いでしょう。
その他
Learning Gitがいい
Gitは開発者の間に相当普及しましたが、コマンドが込み入っていたりバイナリやsubtreeの扱いが今ひとつだったりということもあって、DTPやデザイナーに使ってもらうにはまだ敷居が高い一面があることは皆様も感じていらっしゃるかと思います。
そういえば、昨日yamasitaさんに教えてもらったLearning Gitというサイトが徹底してビジュアライズされていて、非エンジニアにインタラクティブにイメージを掴んでもらうのによいのではないかと思いました。早くも日本語化されていて、以下のように日本語の品質も高いのでおすすめです。今週一番の拾い物はこれかもしれません。
DockerがInfraKitをリリース
クラウド各社ごとに異なっているDockerの運用を共通化・自動化するのが狙いのようです。将来はDocker Engineに取り込まれるとも。これが普及すればクラウドの切り替えがしやすくなるので、乗り換えキャンペーンが激しくなりそうです。
現時点ではGo環境を用意して自分でビルドする必要があります。遠からずaptやhomebrewで導入できるようになるのではないでしょうか。
ワンバイナリでHTTP/2とTLSとLet's Encrypt認証が使えるHTTPサーバー「Armor」
Go言語のHTTPサーバー「echo」の作者がechoをベースに作ったワンバイナリのHTTPサーバーです。Let's EncryptからTLS証明書を自動で導入してくれるそうです。弊社インフラエンジニアのyamasitaさんが押しています。
今週は以上です。
関連記事
- 週刊Railsウォッチ(20160928)constantizeの注意点、GoのGUI “gallium”登場ほか
- 週刊Railsウォッチ(20160921)クールなHTMLエディタ「Mozilla Thimble」他
- 週刊Railsウォッチ(20160913)MySQLの脆弱性ほか