とんかつ時々あんどーなつ

〜たとえ低空でも飛行していられるように〜

11 月振り返り

だいぶ忘れていたが振り返っておく

会社でやっていること

  • 仕事の内容は変わっていない
  • 今のプロジェクトに結構 Lint ツールを入れた
    • ホントはテストを書きたかったが、まずはすぐにできそうな Lint を導入するところから
  • Qiita の Organizations に入れてもらったりした
    • Advent Calendar の準備
  • フロントエンドチームで週一のランチを導入してみた

個人でやっていること

  • Angular の練習を始めるために本を買った
  • 昔の Rails アプリを触りつつ RuboCop, Slim-Lint, CoffeeLint のお試しをした
  • IDDD の読書会に参加中

出来事

CoffeeLint を使ってみる

目的

  • Rails アプリケーションの JavaScriptCoffeeScript を使用しているが書き方がバラバラなので Lint をかけたい

CoffeeLint とは

github.com

導入

  • npm でインストールする
$ npm install -g coffeelint
  • インストール確認はお決まりのバージョン確認で
$ coffeelint -v

使い方

  • ディレクトリを指定するとその配下にある coffee ファイルをチェックする
$ coffeelint app/assets/javascripts/
  • 設定ファイルは下記コマンドで作成
$ coffeelint --makeconfig > coffeelint.json

既存アプリケーションへの導入

  • 一旦すべての level フラグを ignore にする
  • 必要な箇所(直しやすい箇所)からフラグを error にして直していく

Slim-Lint を使ってみる

目的

  • Rails アプリケーションの View template として使用している Slim に Lint を書けたい

Slim-Lint とは

github.com

  • Slim template の Lint ツール
    • RuboCop と統合されているらしい

導入

  • Gemfile に下記を追記する
gem 'slim_lint', require: false
  • インストール確認は下記
    • gem の名前は slim_lint だけど、コマンドは slim-lint... 紛らわしい
$ bundle exec slim-lint -v

使い方

  • RuboCop と違いチェック対象のパスを明示しなければならない
$ bundle exec slim-lint app/

既存アプリケーションへの導入

RuboCop を使ってみる

目的

コーディングルールが浸透していない Rails アプリケーションに Lint ツールを導入する

RuboCop とは

github.com

  • RuboCop is a Ruby static code analyzer. というわけで平たくいうと Lint ツール
  • たくさんの設定項目があり、微調整できるとのこと

導入

導入の仕方は README の通り Gemfile に下記を追記する

gem 'rubocop', '~> 0.51.0', require: false
  • インストール確認は下記
$ bundle exec rubocop -v

使い方

// カレントディレクトリ配下のすべての Ruby ファイルをチェックする
$ bundle exec rubocop

// 指定したディレクトリ(今回は app/)配下の Ruby ファイルをチェックする
$ bundle exec rubocop app/
  • コマンドのオプションは下記にたくさんある

チェック項目

  • あくまで一例だが、下記の項目などがチェック対象になる
    • ハッシュの { の後ろと } の前にスペースがあるか?
    • 文字列補完が必要ないのにダブルクォートを使っていないか?
    • 一行あたりの文字数が 80 文字以内か?
    • メソッドの return が省略できる場合に省略しているか?
    • メソッドの処理がない時は一行で書いているか?
    • 代替メソッドの提案
      • 例えば xx == 0 の代わりに xx.zero? は使えないか?などをチェックしてくれる

独自ルールの適用

AllCops:
  TargetRubyVersion: 2.4

既存のアプリケーションに導入してみる

事前準備

  • 現在の状態をチェックする
$ bundle exec rubocop --display-cop-names
  • 現在の状態をチェックした上で todo ファイルを作る (.rubocop_todo.yml ファイルが作られる)
$ bundle exec rubocop --display-cop-names --auto-gen-config
  • RuboCop の設定ファイル .rubocop.yml を作る
// .rubocop_todo.yml を読み込むようにしておく
$ echo "inherit_from: .rubocop_todo.yml" >> .rubocop.yml
  • 上記の手順で設定ファイルを用意し、再度チェックを走らすと .rubocop_todo.yml に記載された問題が無視され、検出されない状態になる
  • .rubocop_todo.yml から 1 つの問題を削除する (例えば Style/StringLiteralsInInterpolation)
  • この状態で rubocop を走らせるとエラーが検知されるので対象ファイルを修正する
  • ちなみに Style/StringLiteralsInInterpolation は --auto-correct 対象なので、オプションを付ければ自動で修正される
$ bundle exec rubocop --display-cop-names --auto-correct

Rails で日付表示に年月日のセレクトボックスを用意する

Rails で日付表示に年月日のセレクトボックスを用意

前提

  • 例えば User テーブルの birthday カラムがあり、その情報を年・月・日それぞれ別のセレクトボックスで表現するのに悩んだのでメモ

結論

date_select(:birthday, { use_month_numbers: true }, { class: class_name })

10 月振り返り

会社でやっていること

  • 変わらず Backbone.js on Rails のアプリを触っている
    • 典型的な fat controller であることがわかりどうにかしたい
    • まずは Railsリファクタリングをするためにどういう手法を取るのがよいか調査したい
  • そろそろ Docker を練習しようかと…

個人でやっていること

  • Angular アプリケーションプログラミングを読んでいる
    • Rails API モードと Angular でアプリを作成したい → 来月の目標
  • IDDD の読書会も変わらず継続

出来事

9 月振り返り

転職

  • 新卒で入り 6 年半いた会社を辞めた
  • 理由はこんな感じ
    • もう少しユーザに近いものを作りたいと思った
    • 息の長い自社サービスを作っている会社でものづくりをしてみたかった
    • 今までは幅広く技術を触ってきたので少し特化させてみたかった → フロントエンドに注力
    • そういうお年頃だった

新しい会社

  • フロントエンドエンジニアとして入社
    • 気づいたら 1 ヶ月経ってた早い
  • 純社員は 10 人ちょい、業務委託を含めて 5, 60 人の規模の会社
  • ファミレスブースがあったりリフレッシュスペースがあったり今風

直近の技術スタック

  • Backbone on Rails な感じのフロント開発をしている
    • たまたま今やっているプロジェクトがそういう感じなだけで新しめのプロジェクトは Angular とか使われてる
    • Backbone は Rails Assets で組み込まれてる
  • View のテンプレートエンジンは slim
  • CSS デザインは SMACSS
  • サーバ側はちゃんと見れてないが、DB は MySQL、キャッシュは Redis

その他