どこまで、npm, nodejsに寄せるか、どこまでrailsに残すか

特に結論はない。

前提

自分

自分はrailsを中心としたwebエンジニア。ここ1年半ぐらいはnode.jsにベットして活動してる。
node.jsは使われてるところでは使われてるけど、思ったより日本ではこねーな、というのが個人的な感想。
フロントエンドのツールチェーン作るならnode.jsだろうな、という感じ。
だけど、最近はツールチェーン作るならgolangなんじゃないかな、という気もしてきていて、手持ちのツールをgolangで試してみている。
node.js, npmにベットしているけど、特段フロントエンドエンジニアではないし、html, cssが弱い。

マネーフォワード社

マネーフォワード社の基幹技術はサーバーサイドにjava, ruby。クライアントサイドにandroid java, objective-c/swift。
mfクラウドチームでは、pc入力がメインなので、android java, objective-c/swiftがjavascriptに変わる。
javascriptでの開発もそれなりにチーム組んで取り組んでいる。
一方pfm(家計簿)チームは、まずwebから開発をはじめて、その次スマホアプリに全力でかじを切って、いまここというかんじ。

どこまでjavascriptに持っていく?

ここから、どこまでイマドキっぽいフロントエンド開発に持って行こうかな、持って行くべきなのかな、とぼんやり考えている。
イマドキっぽいってなに?

やらないこと

ライブラリはnpmで入れてwebpackでっしょー。railsのassets pipeline今すぐやめようぜ。railsの役割はapiサーバーまでにとどめよう。
みたいなのは、チームの状況を見るに、コストパフォーマンスもメリットも薄いなーと思ってしまう。nodeでサーバーサイドレンダリングやりたくないし。railsでいいじゃん。

やること

dom操作でjqueryでってのを過去分修正するかはともかく、これから作るのは精神に悪影響ありそう。

そのうちやること

rubyのgemでjavascriptをwrapしてますというのは、シシルイルイなのでやめたい。あれ筋悪。
同じ言語のgrunt-*, gulp-*, yeomanのgenerator-*, でもみんなしぬんだぞ。
ワンクッションrails-assetsやらbowerやら挟みたいが、どっちもしんでしまっているからな。
じゃあやっぱりnpm + webpackになってしまうではないか。

思うこと

これでjavascriptが会社の超主要言語なら、超やれ、当たり前だろ、って感じ。
でも、そこまでじゃない。サーバサイドやるならjava, better javaとしてscala, ruby, apiサーバー作りたいならgolang, あたりやるほうがコスパ良さそうに思ってしまう。
それかandroid java, swift。それかビジネス寄りに動いていくとか、データ分析側とか。やるほうがいいんじゃないかなーと思う。
javascriptはそれなりに必要な言語なんだけど、そこまでなあ、うん。

特に結論はない。

広告

rails with i18n

i18nをサーバーサイドだけでやるってのがもう全然いけてないのかもしれない?

i18n言っても英語と日本語しかいらない時はどうでもいい.

めんどくさいのって単数形複数形加算不可算と男性名詞女性名詞中性名詞とあと日時時刻表現だっけ.覚えてるうちに書いときゃよかった.rails関連でメジャーどころのライブラリ軒並み停滞してるイメージが有る.

svenfuchs/i18n
svenfuchs/rails-i18n
fnando/i18n-js

tr8nすごい未来感あったんだけどなあ 久々に見たらリポジトリ移ってた
tr8n/tr8n

angularやemberどうなんだろうか
PascalPrecht/angular-translate

Edited: 2013-12-31 1:41
tokenizeだ ずっと引っかかってた.キーっぽいフレーズ忘れちゃうとググれない.
Edited: 2014-01-01 1:11
なんでこれ書く気になったのか忘れそうだったので後で書く web db press

Ship actionview-link_to_block v1.0.0

actionview-link_to_block v1.0.0 releaseした。link_to_block_if やlink_to_block_unless_current でlink_to以外でもblock渡してhtmlかけるようにした。

http://rubygems.org/gems/actionview-link_to_block
https://github.com/sanemat/actionview-link_to_block

link_toはblock渡してhtmlかけるのに、link_to_if, link_to_unless, link_to_unless_current はblock渡しても、condition満たさなかった時のものになる(それはそれで役に立つけど)。他でもblockわたして書きたい用。

actionpack v3.2, actionpack v4.0, actionview v4.1用なのでいずれもを満たすようにはgemspecとGemfileうまく書けなくて appraisal経由でない普通のrake するとライブラリ足りなくて落ちるおもしろ状態になってて謎。指定してなかったら4.0用か4.1用かせめてどっちか走らせたい。

Lack of CSRF token, omniauth-identity with rails4.0

Lack of CSRF token w/ Rails4

omniauth-identity と rails4.0(or higher)で使う場合

on_login, on_registration にactionとviewを用意して、そこでheadにcsrf-tokenを表示させないとsessionが永続化しないので用心。actionとview用意する方法めんどいので、csrf-tokenねじ込む方法があればいいんだけど、ぱっとはわからなくてpull request出来なかった。

omniauth本体でdeveloper strategyの場合も同様にcsrf-tokenつかないので注意。

Adding authenticity token so session will persist

oauthで別のサーバーにpostをする場合、そもそもcsrf関係ないので、返ってきたcredentialチェックすればいいのに対し、developer strategyやomniauth-identityは自分自身のroutingのちょっと先にpostするので、これが問題になる。omniauth-identityにissue書いても誰も反応しないので、誰もメンテナンスしてないんじゃないかなーと思った。まさかのomniauthよりdeviseがヨイのではだけど、deviseモチベーション的にも積極的には使いたくない…

毎日bundle updateするbot Tachikoma

バージョンアップで一番痛みが少ないのは、毎日bundle updateをすること。最新と、現在のバージョンのスナップショット以外で、動くバージョンの組み合わせを見つけるのは不毛。毎日のbundle updateを支援するbotを作ってます。

Edited: 2014-10-01 10:25, Tachikoma.io出来ました!! webアプリです〜

githubのpublicなリポジトリはぼくが手で登録して、回すのでご連絡下さい。また、自前で設置する導入コンサルもやりますので、こちらもご連絡下さい。

http://tachikoma.launchrock.com/

差分( from CLOUDBEES で BUNDLE UPDATE した上でPULL REQUEST させる)

  • 正しく設定のyamlを読むようにした
    – アプリの下で複数プロジェクト置いて、bundle in bundleしてpull request送る
    – リポジトリの中にcloudbees用のshellファイルを置く必要がなくなった

実際こんなかんじでpull request送ってきます

https://github.com/mrtaddy/fenix-knight/pull/25

コード
https://github.com/sanemat/tachikoma

cloudbees用build script
https://gist.github.com/sanemat/5859031

ロードマップ

 v3.0.0 gemにして差分設定ファイルで動く(現時点でgemにしているけど、gem としてはまだ動かない)

organizationのprivateリポジトリ(実際はもう動くはず)
github public以外も動くようにする bitbucket, gh:e, gitlab

各diffを自分で探しに行くのだるい

rakeはタグが変
https://github.com/jimweirich/rake/compare/rake-10.0.4…rake-10.1.0
railsのmasterなどgithubのものはcompare commit
https://github.com/rails/rails/compare/37e6201eeb6994f4b1917c017f13ae1b51a1292d…e1f4f644344199bba7a060fe1ad27cde2e8d81e9
メジャーなものは直接diffのリンクをbotが喋りたい
https://github.com/puma/puma/compare/v2.1.0…v2.1.1
せめてrubygemsのhomepageは喋りたい

ほぼ同じ仕組みのcarton, npmは踏襲できそう
heroku build pack (sqlite)
Gem-ish usage (load tasks)
Notify if fail
Notify no change
Frequency(whenever gem compatible)

githubのpublicなリポジトリはぼくが手で登録して、回すのでご連絡下さい。また、自前で設置する導入コンサルもやりますので、こちらもご連絡下さい。

http://tachikoma.launchrock.com/

herokuでrails4のassets precompileがこけるwork around

herokuのrails4でasset precompileでabortしたら enable user-env-compile

herokuのrails3.xでassets precompileがこけるのは設定して回避するのが(自前でprecompileしてからpushするよりは)定番だった。

config.assets.initialize_on_precompile = false
https://devcenter.heroku.com/articles/rails-asset-pipeline

rails4.1でも同じくassets precompileで落ちるんだけど、別の原因らしい?
—–> Preparing app for Rails asset pipeline
Running: rake assets:precompile
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.6
rake aborted!
could not connect to server: Connection refused
Is the server running on host “127.0.0.1” and accepting
TCP/IP connections on port 5432?
以下バックトレース略

stackoverflowに書いてあるとおりuser-env-compileをenableにするとdeploy出来るようになった。なんで出来るようになったかよくわかってない。説明読んでもよくわからない。precompileせずにdevelopmentモードとおなじになってます! だといやだなー。

$ heroku labs:enable user-env-compile -a <<my app>>

http://stackoverflow.com/questions/16124490/heroku-rails-4-could-not-connect-to-server-connection-refused
http://stackoverflow.com/questions/16007718/heroku-heroku-labsenable-user-env-compile
https://devcenter.heroku.com/articles/labs-user-env-compile

あと、config.assets.initialize_on_precompile = false はもう要らないぽい。

余談だけどnokogiriのwarningなんだろ bundle時とruby compile時の見てるlibxml2が違うんか

acts-as_taggable-on(2.4.1)でrails4.1

acts-as-taggable-on (2.4.1)でrails4.1(master)だと、readmeが間違ってて(どういうふうに書いたらいいかよくわからないけど)

# Alias for acts_as_taggable_on :tags
acts_as_taggable
acts_as_taggable_on :skills, :interests

こんなふうに書いてあって、aliasになってるぽく読めるけど、tags欲しい場合も正しく書く必要がある。

acts_as_taggable_on :tags

こうしないと、Foo.tag_listでtagが取れない。

rails authorization

roleの管理、cancan一択っぽいけどcancanでかいしpull request溜まってる。あと個人的に、ryanbプロダクトはryanb自身がメンテナンスしてるのは更新滞る印象がある。具体的にはletter_openerは更新あるけどnifty-generatorsは死んでる。
https://github.com/ryanb/cancan
https://github.com/ryanb/letter_opener
https://github.com/ryanb/nifty-generators
https://www.ruby-toolbox.com/categories/rails_authorization

http://stackoverflow.com/questions/7213927/alternative-for-cancan
http://stackoverflow.com/questions/8144865/alternative-to-permissive-rails-gem

で、歴史的な奴はつらくなる気がするのでこのへんかな。
https://github.com/nathanl/authority
https://github.com/the-teacher/the_role
https://github.com/inossidabile/heimdallr
heimdallrはrails4 branchがある

authority+rolifyがrails4で動きそうな感じ キミにキメタ!
https://github.com/nathanl/authority
https://github.com/EppO/rolify