Lチカ開発ブログ

https://l-chika.com/の開発ブログ

rails generateコマンドで忘れがちな事「rails g -h」

rails generate コマンドで、よく使うけど忘れてしまいがちな以下をメモ。

  • generateが可能な事・オプション。Rails標準でgenerateできるものは大体理解しているが、追加した gem のgenerate方法
  • 生成されるものを制限するskipオプションについて
  • モデルを作成するgenerateで指定する型
  • limit の長さでRDBの型が異なる場合の長さの指定

generate

Rails標準に加え、generateを提供しているgemを調べるとき。 モデルを生成した後からrspecfactory_girl のgemを追加して、対応するモデルのspec・factory_girlのファイルをそれぞれ追加生成する場合に、いちいち自分でいちから生成するのでなく generate で生成する場合の調べ方。

以下、rspecfactory_girl をインストールして、rails g -h した結果。

$ ./bin/rails g -h
-- 中略 --
Rails:
  assets
  channel
  controller
  generator
  helper
  integration_test
  jbuilder
  job
  mailer
  migration
  model
  resource
  scaffold
  scaffold_controller
  task

FactoryGirl:
  factory_girl:model

Js:
  js:assets

Rspec:
  rspec:controller
  rspec:feature
  rspec:helper
  rspec:install
  rspec:integration
  rspec:job
  rspec:mailer
  rspec:model
  rspec:observer
  rspec:request
  rspec:scaffold
  rspec:view

TestUnit:
  test_unit:controller
  test_unit:generator
  test_unit:helper
  test_unit:integration
  test_unit:job
  test_unit:mailer
  test_unit:model
  test_unit:plugin
  test_unit:scaffold

例えば、Userモデルのfactory_girlを生成する場合

./bin/rails g factory_girl:model user

さらにgenerate ごとの詳細を知りたければ、そのヘルプを見ることが可能。

$ ./bin/rails g scaffold -h

skip

scaffoldで assetshelper を生成したくないとき。

$ ./bin/rails g scaffold product name:string url:string --skip-assets --skip-helper
      invoke  active_record
      create    db/migrate/20170202010817_create_products.rb
      create    app/models/product.rb
      invoke  resource_route
       route    resources :products
      invoke  scaffold_controller
      create    app/controllers/products_controller.rb
      invoke    erb
      create      app/views/products
      create      app/views/products/index.html.erb
      create      app/views/products/edit.html.erb
      create      app/views/products/show.html.erb
      create      app/views/products/new.html.erb
      create      app/views/products/_form.html.erb
      invoke    jbuilder
      create      app/views/products/index.json.jbuilder
      create      app/views/products/show.json.jbuilder
      create      app/views/products/_product.json.jbuilder

qiita.com

利用可能な型

rails generate model NAME [field[:type][:index] field[:type][:index]] [options]

等で、カラムのtypeを指定する場合の利用可能な型

$ ./bin/rails g model -h
- 中略 -
    You can use the following types:

        integer
        primary_key
        decimal
        float
        boolean
        binary
        string
        text
        date
        time
        datetime

qiita.com

limitの長さ

integerとtextは limit オプションの長さによってRDBの型が変わる

qiita.com

関連するおすすめ本

Ruby on Rails 5 超入門

Ruby on Rails 5 超入門

Railsのモダンなフロントエンド環境とか良く分からないので、ひとまずRails5+npm+sprockets+bootstrap4

Railsのフロントエンドといえば、ES6をES5へ変換してくれるBabelの利用や、WebPackを利用したフロントエンド環境の構築等がよく記事になっているが、そこらへんの流れについていくのが辛い。

今後はRailsでもnpm・yarnとかを標準で利用していく流れもあるとか。 他にも色々な便利Gemがあるが、どれを利用して良いかわからない。

ということで、ここではひとまず個人サイトなので、 「ES6をサポートしてくれるブラウザでみてね」 という前提(モダンブラウザはほんとんどES6まではサポートしてるみたいだけど)で、自分の「やりたい事」を満たしてくれる、自分なりのフロント環境を構築。

Railsの開発環境の前提はこちらで。

l-chika.hatenablog.com

やりたい事

  • ライブラリ等のjavascript,cssの利用はgemやjsファイルを自分で/assetsに配置でなくnpmで管理したい。
  • jquery_ujsは利用したい
  • sprocketsはそのまま利用
  • CoffeeScriptは不要
  • Sassを利用
  • bootstrap4を利用したい
  • 運用をできるだけ簡素にしたい

前提

  • Ruby: 2.3.3
  • Bundler: 1.13.7
  • Rails 5.0.1
  • Node: 6.9.4
  • npm: 3.10.10

不要なGemを削除

$ vim Gem

以下を削除

$ rm -rf  vendor/bundle
$ bundle install --path=vendor/bundle

npmでフロントのライブラリ追加

$ npm init -y
$ npm install jquery --save
$ npm install jquery-ujs --save
$ npm install bootstrap@4.0.0-alpha.6 --save

.gitignoreに以下を追加

  • /node_modules/
  • /public/assets/

application.js、application.cssを変更

application.js

//= require jquery_ujs
//= require_tree .

//= require jquery-ujs
//= require tether/dist/js/tether
//= require bootstrap/dist/js/bootstrap

jquery_ujsjquery-ujs がアンダースコアとハイフンの違いに嵌った

application.css

ファイル名を変更

application.css -> application.scss

application.scssを修正

*= require_tree .
*= require_self

@import 'bootstrap/scss/bootstrap';

sprockets設定

config/initializers/assets.rb の変更

Rails.application.config.assets.paths << Rails.root.join('node_modules')

を設定

productionモード確認

precompileと表示の確認

$ RAILS_ENV=production ./bin/rails assets:precompile assets:clean
$ vim config/database.yml
$ SECRET_KEY_BASE={HASH} RAILS_SERVE_STATIC_FILES=true ./bin/rails s -e production

確認が終わったら

/public/assets/ を削除

$ ./bin/rails assets:clobber

関連本

Ruby on Rails 5 超入門

Ruby on Rails 5 超入門

Ubuntu 16.04.1 LTSでCloudWatch Logs(awslogs)インストール

手順

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
$ sudo python ./awslogs-agent-setup.py --region ap-northeast-1
$ sudo vim /var/awslogs/etc/awslogs.conf
$ sudo service awslogs status

Failed to start awslogs.service: Unit awslogs.service not found.

と表示される

$ sudo systemctl enable awslogs
$ sudo systemctl start awslogs

で、OK

参考

qiita.com

docs.aws.amazon.com

RailsでExpected string default value for '....'

Rails5で開発していたら、generateで Expected string default value for というメッセージが表示された。

$ ./bin/rails g controller pages main --no-helper --no-assets
Expected string default value for '--test-framework'; got false (boolean)
Expected string default value for '--jbuilder'; got true (boolean)
Expected string default value for '--test-framework'; got false (boolean)
Expected string default value for '--helper'; got true (boolean)
Expected string default value for '--assets'; got true (boolean)
      create  app/controllers/pages_controller.rb
       route  get 'pages/main'
      invoke  erb
      create    app/views/pages
      create    app/views/pages/main.html.erb

調べると、thor が原因。バージョンを明示して、bundle installをすれば、メッセージが表示されなくなる

$ vim Gemfile
gem 'thor', '0.19.1'

参考

stackoverflow.com

qiita.com

Railsアプリケーション構築時に初期にしたこと

Railsでアプリケーション作成後に、ついつい忘れがちになるのでメモ。

前提

環境、Railsアプリケーションの作成はこちら。

l-chika.hatenablog.com

手順

やったこと

  • Timezone: アプリケーションとDB保存時の時間を日本時間にする
  • I18n:文言の日本語対応

変更前

$ ./bin/rails c
> helper.number_to_human(1234) 
=> "1.23 Thousand"

> Time.current
=> Tue, 24 Jan 2017 01:32:15 UTC +00:00

> ActiveRecord::Base.default_timezone
=> :utc

> MyApp::Application.config.active_record.default_timezone
=> nil

TimeZone

$ vim  config/application.rb
  class Application < Rails::Application
    config.time_zone = 'Tokyo'
    config.active_record.default_timezone = :local

    config.i18n.default_locale = :ja
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
  end

locale

$ vim Gemfile
gem 'rails-i18n', '~> 5.0.0'
$ bundle install --path=vendor/bundle/

確認

$ ./bin/rails c
> helper.number_to_human(1234) 
=> "1.23 千"
> Time.current
=> Tue, 24 Jan 2017 10:31:46 JST +09:00

> ActiveRecord::Base.default_timezone
=> :local

> MyApp::Application.config.active_record.default_timezone
=> :local

ちなみに

この設定をしても、ActiveRecordの保存等がJSTにならない場合は、OSのタイムゾーンUTCになっている可能性が高い。 その場合は、OSのTimeZoneをJSTに変更する。

Ubuntu_14.04の場合はこちらを参考。

www.server-world.info

関連する書籍

はじめての「Ruby on Rails」5 (I・O BOOKS)

はじめての「Ruby on Rails」5 (I・O BOOKS)

「論語と算盤と私」を読んで

本書はスタートアップで働く人は一読してみると良いと思う。共感と、為になる思考が身に付く。

競走馬の騎士を目指し断念し、東大からコンサル、スタートアップの起業、一部上場企業の代表取締役を経験した著者が、企業活動や企業を取り巻く環境、企業に携わる個人がどうあるべきかをまとめ、自分なりの経営観を整理したもの。

どんな人向けか

個々人の「経営観」を築く参考

経営者、起業を志すひとだでけなく、スタートアップで働くメンバー層や大手企業でスタートアップへの転職等のキャリアに悩む人にも多いに学ぶべきことがある内容だと思う。

と感じたのは、スタートアップとひと口にいっても色々なパターンがあり、またその経営者によって状況というのは大きく異なる。それのメンバーとしてただ受け入れるのでなく、自分で経営者がどう考え、会社の中で自分がどうあるべきかを考えさせてくれる。

各章の気になったところ・どう読んだか

第1章 職業としての経営者とリーダーシップ

企業の成長ステージと経営者に求められるスキルセット・マインドセットを経営者の3類型を定義され、そのステージを前提として経営者に求められるスタイルが語られている。

良い組織というのは、それぞれのが自分の現状の役割よりも一段上の立場の視座を持つことが大事だというけれど、ここでは経営者という「意思決定の難しさ」という改めて認識するとともに、自分の組織のことをまざまざと感じさせらた。

第2章 集団・企業が陥る自己矛盾

上場企業の経営者は従業員と株主の中間管理職という側面があり、異なる利害を持つステークホルダーを同じ方角に向ける務めがある

自己資本のみと、外部資本があるスタートアップを経験した自分としても共感できる内容。

  • 「ミッション」とは何のためにその組織が存在するのかを宣言し、進路を指し示す羅針盤となるもの
  • 事業にひも付いたミッションの求心力が強いほど、新たな事業への転進が難しくなる
  • ミッションの本質は文言そのものよりも、それを伝える過程にこそある

ミッションとは、事業のミッションと組織のミッションの違いとは、ということを丁寧に説明され、ミッションに対する大切さをより深くするとともにそれが持つ役割をもう一段理解することができた気がする。

第3章 起業・スタートアップの環境変化

外部から資本を調達するということは、かように重層的な投資家たちの食物連鎖のなかに組みこまれることを意味する

外部資本のあるスタートアップがほとんどだと思うので、これは本当に業界あるあるかも。

第4章 成熟・衰退期を迎えた企業の処方箋

  • 現状に慢心して周囲の環境変化に無関心なままでいると、気づいたときには手遅れるになってしまう
  • 低迷の原因の多くは移りゆく環境の変化に対応していない点にあり、誰かの特定の個人が下した決断というよりも、情緒や感情移入に基づく「空気的判断」を積み重ねた結果として、「環境変化に対応しないこと」「変わらないこと」を集団として選択した結果である
  • 真に組織の永続的な発展を目指すためには、業績の回復と同等か、あるいはそれ以上に、組織の風土や体質を根本的に改善することにこそ考えを巡らせるべき。これは一朝一夕になし得ることでなく、目の前の事業に関する取り組みを変えるだけでなく、その前提となる思考そのものを改めなければならない
  • 細かな経験を積み重ねるうつに、以前はできなかったことがいつしかできる

この章は大手企業だけでなく、中小企業や調達・上場直後のスタートアップ、個人にも当てはまると思う。

第5章 既存企業のイノベーションに対する渇望

軌道に乗っている事業を安定的に運営することと、新たに事業を立ち上げることでは、求められるスキルセットもマインドセットも異なる

新規事業というものをどう実現するかは、明確な答えはないけど、これはその一つの解決方法だと思う。

第6章 資本市場に翻弄されないために

会社の永続的な成長にコミットする経営者と、持ち株の価値の向上を志向する投資家の間で、方向性に対する微妙なずれが生じ得る

企業の目的と手段に関する深い考察。

第7章 個として独立するための原則と心意気

  • 苦しいときでも起点の動機が強ければ、その思いが自分の背中を後押ししてくれる
  • いつの時代においても、安定を求めることができる対象は、「自分自身」にほかならない。
  • 各自が各自なりに、どこに行っても自分の力でやっていける状態をつくり、自己防衛することが、一番安定に資する

この考えかたは現代の日本人には本当に大事なものだと感じた。

最後に

著者の経験談や考えとともに、本書の中に登場する名言・引用が内容にあっており、考えを一段深くさせる。 この本はスタートアップに転職する時に、企業のおかれている状況とその中で経営者、ミッション、VCなどであるべきかの企業選びの視点の参考にもなると思う。

Railsアプリケーション構築のはじめ

Railsでアプリケーションを構築する最初の手順。

前提

開発環境の前提はこちらに記述。

l-chika.hatenablog.com

環境

手順

Rails初期化

$ mkdir {APPLICATION_DIR} && cd $_
$ bundle init
$ vim Gemfile
source "https://rubygems.org"

gem 'rails', '~> 5.0', '>= 5.0.1'

アプリケーション作成

Gemfileがコンフリクトするので上書きをする。

$ bundle exec rails new . -T -d mysql --skip-bundle --skip-turbolinks
Overwrite {APPLICATION_DIR}/Gemfile? (enter "h" for help) [Ynaqdh] Y

Gemfileの therubyracer をコメントインして、bundle install

 $ vim Gem file
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
$ bundle install --path=vendor/bundle --jobs=4

DB設定

  • ※ 必要に応じて、 config/database.yml を修正
$ ./bin/rails db:create

MySQL確認

$ mysql -uroot
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| xxxxxxx_development |
| xxxxxxx_test        |
| mysql               |
| performance_schema  |
+---------------------+
5 rows in set (0.00 sec)

起動確認

$ ./bin/rails s -b 0.0.0.0

http://0.0.0.0:3000 にアクセスしてブラウザで確認。

↓が表示されればOK。

f:id:l-chika:20170123193922p:plain

ソース管理する場合は

gitignore

/vendor/bundle/ を追記。

$ vim .gitignore
...
/vendor/bundle/

関連書籍

Ruby on Rails 5 超入門

Ruby on Rails 5 超入門

参考ページ

railsコマンド(rails) - - Railsドキュメント

qiita.com

kz-engineer-scrap.hatenablog.com