人生BADハマり

東大卒アスペ傾向Web系エンジニアの人生戦略

Rails初心者がハマったポイントを淡々と書く

目次

筆者スペック

  • 業務でRailsを実質2-3ヶ月程度触れている
  • DBのスキーマ変更にはmigrationを打つと良いことを知っている程度
  • ActiveRecordよくわからない
  • PHPは1年ちょっとぺちぺちしてる

共有のプライベートリポジトリを無料で作る

みんな大好きGitHubでプライベートリポジトリを作るのは有料(学生は無料)なので代替案が欲しい。

BitBucketとか色々あるけど、GitLabを採用。正直あんまり調べてないけど、機能充実しているし十分満足。

  • GitHubに近いインターフェース
  • 無料でプライベートリポジトリをグループでも使える
  • 自鯖インスコも可能だけどSaaSとしても利用可
  • Trello的なissue管理ボードやWikiもあるし、CI連携とかも強い

これとSlackがあれば小規模チーム開発なら何ら問題なさそう。強いて言うならちと読み込みが重め。

GitLabとSlackの連携

GitLabの設定→Integrations→最下部の「Slack notifications」を表示。

あとは普通にSlack側でIncoming Webhookを作ってURL指定してあげればOK。

rbenvで最新版のrubyを入れる

事前に brew upgrade ruby-build しないと、 rbenv install --list で表示される「インストール可能なバージョンのリスト」が更新されていない場合があるので注意。大体こんな流れ

brew upgrade ruby-build
rbenv install 2.5.1
rbenv rehash
rbenv global 2.5.1
gem install bundler

既存のDBからschema.rbを自動生成する

database.yml を編集した上で rails db:schema:dump を実行。簡単すぎて腰が抜ける。

Gemfileに書いた gem 'mysql2' が通らなかった

Xcodeコマンドラインツールが入ってないと動かないことがあるみたい。
入れたら動いた。ただ普段Xcode使わないので容量圧迫したくない気持ちはある。
xcode-select --install

jQueryrailsの標準装備では無くなった

5系辺りからレギュラー外されたみたい。まあわかる。
gem 'jquery-rails' した上で、 app/assets/javascripts/application.js に下記を追加
コメントみたいで紛らわしいけどこれで合ってます

//= require jquery

画面遷移時にJSが動かない

この辺。

www.d-wood.com

私のケースではjQueryだったので

$(document).on('turbolinks:load', function() {
  yaritai_koto();
}

redirect_to に続けて書くflashが動かない

redirect_to '/login', flash: { error: '何もしてないのに人生が壊れた' }

こう書くとflash部分がURLのGETパラメータに乗ったりしてブチギレ

↓みたいな類似ケースもありつつ、 flash: { notice: 'hoge' } を単に notice: 'hoge' の形にすることで解決していた。

qiita.com

Railsflashでは noticealert の2つのラベルが一般的に使われているようですが、今回はシステム移植案件で、移植元は notice error success の3つを使い分けていたので、出来ればそのまま移植したいというモチベ。 しかしどうしても解消できないので諦めて2段階に分けて書いた(これなら動く)。

flash[:error] = '間違ってるのは俺じゃなくて社会'
redirect_to '/login'

redirect_toドキュメント 見ても日本語でおk
実装見てもよく分からず、匙は投げられた

controllerに書いたメソッドをviewで使う

コントローラに下記を追加

helper_method: view_de_use_method

ARで対応するレコードの存在を前提とするコードを書いているとnilで落ちる

User.find(1).friends.first.name とか書くと友達が居ないユーザで落ちがち
nil になる可能性のある箇所から &. を書くことで回避できる。これでぼっちも安心

qiita.com