rails generateコマンドで忘れがちな事「rails g -h」
rails generate
コマンドで、よく使うけど忘れてしまいがちな以下をメモ。
- generateが可能な事・オプション。Rails標準でgenerateできるものは大体理解しているが、追加した
gem
のgenerate方法 - 生成されるものを制限するskipオプションについて
- モデルを作成するgenerateで指定する型
limit
の長さでRDBの型が異なる場合の長さの指定
generate
Rails標準に加え、generateを提供しているgemを調べるとき。
モデルを生成した後からrspec
や factory_girl
のgemを追加して、対応するモデルのspec・factory_girlのファイルをそれぞれ追加生成する場合に、いちいち自分でいちから生成するのでなく generate
で生成する場合の調べ方。
以下、rspec
、factory_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で assets
や helper
を生成したくないとき。
$ ./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
利用可能な型
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
limitの長さ
integerとtextは limit
オプションの長さによってRDBの型が変わる
関連するおすすめ本
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2016/12/17
- メディア: 単行本
- この商品を含むブログを見る
Railsのモダンなフロントエンド環境とか良く分からないので、ひとまずRails5+npm+sprockets+bootstrap4
Railsのフロントエンドといえば、ES6をES5へ変換してくれるBabelの利用や、WebPackを利用したフロントエンド環境の構築等がよく記事になっているが、そこらへんの流れについていくのが辛い。
今後はRailsでもnpm・yarnとかを標準で利用していく流れもあるとか。 他にも色々な便利Gemがあるが、どれを利用して良いかわからない。
ということで、ここではひとまず個人サイトなので、 「ES6をサポートしてくれるブラウザでみてね」 という前提(モダンブラウザはほんとんどES6まではサポートしてるみたいだけど)で、自分の「やりたい事」を満たしてくれる、自分なりのフロント環境を構築。
Railsの開発環境の前提はこちらで。
- やりたい事
- 前提
- 不要なGemを削除
- npmでフロントのライブラリ追加
- .gitignoreに以下を追加
- application.js、application.cssを変更
- sprockets設定
- productionモード確認
- 関連本
やりたい事
- ライブラリ等のjavascript,cssの利用はgemやjsファイルを自分で/assetsに配置でなくnpmで管理したい。
- jquery_ujsは利用したい
- sprocketsはそのまま利用
- CoffeeScriptは不要
- Sassを利用
- bootstrap4を利用したい
- 運用をできるだけ簡素にしたい
前提
不要な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_ujs
とjquery-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
関連本
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2016/12/17
- メディア: 単行本
- この商品を含むブログを見る
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
参考
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'
参考
Railsアプリケーション構築時に初期にしたこと
Railsでアプリケーション作成後に、ついつい忘れがちになるのでメモ。
前提
環境、Railsアプリケーションの作成はこちら。
手順
やったこと
- 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の場合はこちらを参考。
関連する書籍
はじめての「Ruby on Rails」5 (I・O BOOKS)
- 作者: 清水美樹
- 出版社/メーカー: 工学社
- 発売日: 2016/11
- メディア: 単行本
- この商品を含むブログを見る
「論語と算盤と私」を読んで
本書はスタートアップで働く人は一読してみると良いと思う。共感と、為になる思考が身に付く。
- 作者: 朝倉祐介
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2016/10/17
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
競走馬の騎士を目指し断念し、東大からコンサル、スタートアップの起業、一部上場企業の代表取締役を経験した著者が、企業活動や企業を取り巻く環境、企業に携わる個人がどうあるべきかをまとめ、自分なりの経営観を整理したもの。
どんな人向けか
個々人の「経営観」を築く参考
経営者、起業を志すひとだでけなく、スタートアップで働くメンバー層や大手企業でスタートアップへの転職等のキャリアに悩む人にも多いに学ぶべきことがある内容だと思う。
と感じたのは、スタートアップとひと口にいっても色々なパターンがあり、またその経営者によって状況というのは大きく異なる。それのメンバーとしてただ受け入れるのでなく、自分で経営者がどう考え、会社の中で自分がどうあるべきかを考えさせてくれる。
各章の気になったところ・どう読んだか
第1章 職業としての経営者とリーダーシップ
企業の成長ステージと経営者に求められるスキルセット・マインドセットを経営者の3類型を定義され、そのステージを前提として経営者に求められるスタイルが語られている。
良い組織というのは、それぞれのが自分の現状の役割よりも一段上の立場の視座を持つことが大事だというけれど、ここでは経営者という「意思決定の難しさ」という改めて認識するとともに、自分の組織のことをまざまざと感じさせらた。
第2章 集団・企業が陥る自己矛盾
上場企業の経営者は従業員と株主の中間管理職という側面があり、異なる利害を持つステークホルダーを同じ方角に向ける務めがある
自己資本のみと、外部資本があるスタートアップを経験した自分としても共感できる内容。
- 「ミッション」とは何のためにその組織が存在するのかを宣言し、進路を指し示す羅針盤となるもの
- 事業にひも付いたミッションの求心力が強いほど、新たな事業への転進が難しくなる
- ミッションの本質は文言そのものよりも、それを伝える過程にこそある
ミッションとは、事業のミッションと組織のミッションの違いとは、ということを丁寧に説明され、ミッションに対する大切さをより深くするとともにそれが持つ役割をもう一段理解することができた気がする。
第3章 起業・スタートアップの環境変化
外部から資本を調達するということは、かように重層的な投資家たちの食物連鎖のなかに組みこまれることを意味する
外部資本のあるスタートアップがほとんどだと思うので、これは本当に業界あるあるかも。
第4章 成熟・衰退期を迎えた企業の処方箋
- 現状に慢心して周囲の環境変化に無関心なままでいると、気づいたときには手遅れるになってしまう
- 低迷の原因の多くは移りゆく環境の変化に対応していない点にあり、誰かの特定の個人が下した決断というよりも、情緒や感情移入に基づく「空気的判断」を積み重ねた結果として、「環境変化に対応しないこと」「変わらないこと」を集団として選択した結果である
- 真に組織の永続的な発展を目指すためには、業績の回復と同等か、あるいはそれ以上に、組織の風土や体質を根本的に改善することにこそ考えを巡らせるべき。これは一朝一夕になし得ることでなく、目の前の事業に関する取り組みを変えるだけでなく、その前提となる思考そのものを改めなければならない
- 細かな経験を積み重ねるうつに、以前はできなかったことがいつしかできる
この章は大手企業だけでなく、中小企業や調達・上場直後のスタートアップ、個人にも当てはまると思う。
第5章 既存企業のイノベーションに対する渇望
軌道に乗っている事業を安定的に運営することと、新たに事業を立ち上げることでは、求められるスキルセットもマインドセットも異なる
新規事業というものをどう実現するかは、明確な答えはないけど、これはその一つの解決方法だと思う。
第6章 資本市場に翻弄されないために
会社の永続的な成長にコミットする経営者と、持ち株の価値の向上を志向する投資家の間で、方向性に対する微妙なずれが生じ得る
企業の目的と手段に関する深い考察。
第7章 個として独立するための原則と心意気
- 苦しいときでも起点の動機が強ければ、その思いが自分の背中を後押ししてくれる
- いつの時代においても、安定を求めることができる対象は、「自分自身」にほかならない。
- 各自が各自なりに、どこに行っても自分の力でやっていける状態をつくり、自己防衛することが、一番安定に資する
この考えかたは現代の日本人には本当に大事なものだと感じた。
最後に
著者の経験談や考えとともに、本書の中に登場する名言・引用が内容にあっており、考えを一段深くさせる。 この本はスタートアップに転職する時に、企業のおかれている状況とその中で経営者、ミッション、VCなどであるべきかの企業選びの視点の参考にもなると思う。
Railsアプリケーション構築のはじめ
Railsでアプリケーションを構築する最初の手順。
前提
開発環境の前提はこちらに記述。
環境
手順
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。
ソース管理する場合は
gitignore
/vendor/bundle/
を追記。
$ vim .gitignore
... /vendor/bundle/
関連書籍
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2016/12/17
- メディア: 単行本
- この商品を含むブログを見る