Tech Racho エンジニアの「?」を「!」に。
  • 開発

週刊Railsウォッチ(20161005)Mac OS SierraとRubyの問題、Learning Gitほか

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

こんにちは、hachi8833です。10月最初のRailsウォッチです。

RubyFlow

160928_1638_XvIP4h

商用プロジェクトで使われている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

160928_1639_vdl3Ju

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

160928_1641_BubfCD

月額固定費用でRailsアプリのメンテナンスを請け負うreinteractive

こちらは企業サイトの宣伝ページですが、月額固定費用でアプリをメンテナンスするというビジネスモデルがやや目新しく思えました。

morimorihogeコメント

サービスサイトを眺めてみましたが、バグフィックスとかsecurity updateみたいな機械的にやれる様なことだけ対応する様にもみえて、今一つどれくらいきちんとしたことをしてくれるのか分かりませんでした。これだけではなんとも言えないなあ。。。

Ruby trunk

160928_1649_IkaWyb

#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

161005_1234_lrT4GA

GitHub Changelog Generator

GithubのChangelogをmarkdown形式で整えてくれるgemです。ドキュメント化を前提としたコミットメッセージを心がけていれば便利かもしれません。

161005_1429_pFjE7X

[https://github.com/skywinder/github-changelog-generator](https://github.com/skywinder/github-changelog-generator target=)より

Hacker News

160928_1654_q6srdR

https://github.com/mxgmn/WaveFunctionCollapse

ビットマップでパターンを与えると、その特徴を捉えて類似のビットマップパターンを生成するというプログラムです。ゲームによくあるマップ自動生成みたいなものだと思いますが、動作がかなりインテリジェントで、2次元3次元を問わず、与えたパターンの特徴を壊さずにそれっぽいマップをずんずん生成します。3次元はさすがに重いそうです。

ゲームプログラミングのことはわかりませんが、これマジで凄いんじゃないでしょうか。もうマップ作成はこれだけでできちゃいそう。

C#で書かれていますがそれほどサイズは大きくないので移植すると楽しそうです。パターン例を見ているだけでも楽しくなります。

161005_1131_8CJF8x

161005_1140_OVF0Pp
https://github.com/mxgmn/WaveFunctionCollapseより

Github Trending

160928_1701_Q9dJIU

Gitの実験版「Gitless」

既にはてぶなどでも話題になり始めていますが、Gitのコマンドセットを縮小して使いやすさを目指したGitlessが登場しました。Pythonで書かれています。

Gitとの比較については、同ページのGitless vs. Gitを見るのが早いでしょう。

161005_1151_eZCypf
http://gitless.com/#vsより

その他

Learning Gitがいい

Gitは開発者の間に相当普及しましたが、コマンドが込み入っていたりバイナリやsubtreeの扱いが今ひとつだったりということもあって、DTPやデザイナーに使ってもらうにはまだ敷居が高い一面があることは皆様も感じていらっしゃるかと思います。

そういえば、昨日yamasitaさんに教えてもらったLearning Gitというサイトが徹底してビジュアライズされていて、非エンジニアにインタラクティブにイメージを掴んでもらうのによいのではないかと思いました。早くも日本語化されていて、以下のように日本語の品質も高いのでおすすめです。今週一番の拾い物はこれかもしれません。

161005_1204_upWzwY

solution

http://k.swd.cc/learnGitBranching-ja/より

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さんが押しています。

今週は以上です。

関連記事


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。