jquery-ujsからrails-ujsへの移行で気をつけること

  • jquery-ujs だと data, status, xhr
  • rails-ujs だと event だけ
    • レスポンスの情報がほしいときは event.detailの中をみる
document.body.addEventListener('ajax:success', function(event) {
  var detail = event.detail;
  var data = detail[0], status = detail[1],  xhr = detail[2];
})

参考

jquery-ujs/rails.js at master · rails/jquery-ujs rails/ajax.coffee at 896ee2b679462e7bcaa6890c6f5fdbd3b2e2fccb · rails/rails rails/remote.coffee at 896ee2b679462e7bcaa6890c6f5fdbd3b2e2fccb · rails/rails rails/event.coffee at 896ee2b679462e7bcaa6890c6f5fdbd3b2e2fccb · rails/rails Working with JavaScript in Rails — Ruby on Rails Guides

2017年にruby1.8.6をビルドする

ruby 1.8.6を使ってみようと思い、mac sierraでビルドしてみようとしましたがだいぶハマりました。

まずは公式のgccを使わないといけないと怒られる。指示の通り入れようとするともうそんなのないと言われる。こちらのブログを参考に無理やり入れてみようとしましたがだめでした。

Sierraでruby-buildで1.8.7をビルドする - 福島餃子Ruby親方

ここで、macをそのまま利用することを諦め、docker越しにインストールすることを試みます。検索すると各種Rubyのバージョン用のDockerfileをを取り揃えたリポジトリがありました。

abevoelker/docker-ruby: Dockerfiles for lots of MRI Ruby and JRuby interpreters

これを利用して1.8.6のイメージを作成しようとしましたがエラー…。どうやら依存しているopensslのバージョンが問題な模様。最終的にこちらのブログを参考にして、古いopensslを入れてbuildすることに成功しました。

Ubuntu 16.04 に Ruby 1.8.5 をインストールする - Qiita

最終的な成果はこちら。

あんまりいないと思うけど、必要な方がいたらどうぞご利用ください

追記

現状Rubyは動くのですが、gemでgem install rails -v 2.0.0などとgemをインストールしようとするとsegfaultになって死にます><

更に追記

segfaultは次の記事を参考にRubyのビルドを修正したら解消しました。

rbenv、rvmのruby 1.8.7, 1.8.6で timeout.rb: [BUG] Segmentation faultというエラーの対応|DIGITAL SQUADブログ

しかし依然gem install rails -v 2.0.5などとするとエラーになります(buffer overflow)。どうやら Ruby 1.8.6では最近のgemはインストールできない模様です。Rails の 2.0.5 は rake の 0.7.2 以上に依存しており、そのままだと最新の rake 12.0.0 をインストールしようとしてエラーになります。先に gem install rake -v 0.7.2 としておき次に gem install rails -v 2.0.5 とするとうまくインストールできました。

はー。疲れた :astonished:

さらにさらに追記

例えばRails2.0.5を入れて動かそうとすると、sqlite3がないと言われます。次のようにしてビルドに必要なライブラリを入れてからsqlite3 1.2.4をいれたところうまく動きました

apt-get update; apt-get install libsqlite3-dev
gem i sqlite3-ruby -v 1.2.4

会社設立支援系のサービスは便利だけどまだまだなところもあるという話

株式会社ウィルネットを設立した - おもしろwebサービス開発日記の関連エントリ。作る過程のメモ書きです。

僕は普段の記帳にMFクラウド会計を使っていたので、まず関連サービスであるMFクラウド創業支援サービスを試しました。正確にはMFクラウド創業支援サービスと提携している無料登記ドットコムです。

しかし定款の認証で電子認証をしようとしてハマりました。定款の認証形式は電子と紙があり、紙だと4万円、電子だと0円(ただし道具を揃えたり色々めんどくさい)という感じです。代理で数千円から電子認証の面倒な部分をやってくれる業者があるのでそれが一番コスパがよいのではと考えました。

しかし無料登記ドットコムは基本的に紙の認証しか想定してないようで、電子の認証については公式リンクへの参照があるのみ。電子認証をしてくれる業者をいくつか探しましたが、定款のファイル形式がテキストファイルやExcelファイルしか取り扱っておらず、無料登記ドットコムで生成されるPDFの定款ではどうしようもなくなりました*1

そこで会社設立 freeeに切り替えました。会社設立freeeは行政書士と提携していて、電子認証のサポートを5000円でやってくれます。あとは大体freeeの書いてある通りにやったら登記までたどり着けました。freeeべんり。

しかし幾つか躓いたところもあって、freeeで自動生成された箇所に物言いが2回(公証役場で1回、法務局で1回)つきました。僕の場合は大した手戻りなく進められたので良かったのですが、場合によっては手直しを要求されることもありそうです。

また、登記に必要な書類と場所の説明はあるのですが、細かい説明がなく混乱しました。例えば

  • 登記に必要な書類は、まず15万円分の収入印紙を購入し貼ってから提出する
  • 登記後はまず印鑑カードを入手してから、登記証明書と印鑑証明書を入手する

みたいな説明があると良かったです。freeeの説明は「書類を法務局に持っていく」だけしかない><

あと気づいた点は

  • 厚生年金の手続きを行う期限が、必要書類を入手できるようになる日付より前になっている
  • 厚生年金の手続きをするための書類が足りない(これ辛かった)

など。登記のサービスで会社設立はかなり便利になったとは思いますが、現状ではまだまだ自分で調べたり人に聞いたりしないといけない箇所が多いなという印象です。後続の人のためにより一層の改善お願いしますm(__)m > money forwardさん、freeeさん

*1:たくさん探せばPDFでも対応してくれるところはありそうですが、その前にfreeeに切り替えてしまった

database_rewinder で特定のテーブルを削除対象から除外

database_cleaner との互換性を保つために用意されたメソッドを使う。第一引数はなんでもいい

config.after(:example) do
  DatabaseRewinder.clean_with(:_, except: %w(削除したいテーブル名))
end

追記

↑のやり方だと、DatabaseCleanerと同じ挙動(削除したいテーブル名を除いたすべてのテーブルを削除する)となってしまう。ActiveRecordロード後に次のようにすると期待する挙動になるはず。

DatabaseRewinder['test'].except = %w(削除したいテーブル名)

CircleCI でデプロイのタイムアウト時間を延長する

  • デプロイのデフォルトは10分
  • 伸ばす場合は次のようにする
  • bundle exec ... の次はインデント2つにしないとダメ
deployment:
  production:
    branch: master
    commands:
      - bundle exec cap production deploy:
          timeout: 1500

Note that YAML is very strict about indentation each time you add a new property. For that reason, modifiers must be indented one level from their command. In the following example, we treat the bundle install command as a key, with timeout, environment, and pwd as the command's hash values.

Configuring CircleCI - CircleCI

sendgrid でメール受信することができる

  • sendgrid はメール受信系の機能を提供していないと思っていたけど、どうやら出来るっぽい。
  • 公式のドキュメント だと、lite プラン以外で使えます!って書いてあるので heroku の free なやつでは使えないかな?と思ったけど設定画面開けたので使えそう

sendgrid/sendgrid-parse-api-example - Buttons - Heroku Elements

cells-hamlit が使えるようになりそう

  • cells で haml を使いたい場合は cells-haml という gem を使う必要があった
  • しかし、cells-haml は haml の特定リビジョンに dependency が固定されていて辛い
    • このリビジョンの haml だと brakeman がこける
  • cells-hamlit を使うと上記の問題を解決出来るし速くなって良い感じ
    • しかし、リリースされてないので cells の master の最新を使う必要がある
  • とりあえず次のようにした
gem 'cells-hamlit'
gem 'cells', github: 'apotonick/cells'
gem 'hamlit'
gem 'hamlit-block'

だがしかし

cells 部分は動いたが、既存の view が動かなくなったので一旦休み。

Problem with block rendering · Issue #1 · hamlit/hamlit-block

追記

hamlit 作者の k0kubun さんからメンションいただいた。

気分的に最新使いたかったので次のように対応。想定通り動くようになった (( ⁰⊖⁰)/)

# 参照しているブランチがマージされたら本家に参照を戻す
gem 'cells-hamlit', github: 'k0kubun/cells-hamlit', branch: 'output_buffer'
gem 'cells', github: 'apotonick/cells'
gem 'hamlit'