初めまして、kouです!
いつもは社内アカウントでqiitaを書いているのですが、今回は気分転換に個人アカウントで記事を書いていきたいと思います!
座学編
rakeとは?
rubyで使用されるタスクランナーの一種。
実行したい処理をrubyで書いてタスクとして登録し、登録したタスクをrakeコマンドで実行する。
→ 一旦rakeタスクに登録しておけば、コマンドを入力するだけで処理を実行してくれるのでかなり便利!
シェルスクリプトとは?
シェルスクリプトとは、シェルによって解釈・実行される一連の処理を記述したスクリプト。狭義では、Unixシェルで用いられるスクリプト言語を指します。
「スクリプト(script)」は「台本」という意味で、コンピュータに実行させたい処理を記述してコンピュータを動かせます。
この台本をテキストデータで用意したものがシェルスクリプトです。コマンド・インタプリタとも呼ばれています。
ref: https://udemy.benesse.co.jp/development/system/shellscript.html
→ エクセルのマクロみたいに、一連の動作を自動化できる。
実践編
例:ユーザーデータと記事データを同時にDBに登録する。
rakeタスクの登録方法
rakeタスク登録用のファイル作成
rails g task import_user
rails g task import_article
or
touch lib/tasks/import_user.rake
touch lib/tasks/import_article.rake
rakeタスクの追加
userデータ用
namespace :import_user do
USERS = [
{ name: "佐藤", email: "poyopoyo@gmail.com" },
{ name: "田中", email: "fugafuga@gmail.com" },
{ name: "鈴木", email: "piyopiyo@gmail.com" }
].freeze
desc "import_user" # descにはタスクの説明を書く。
task import: :environment do
# この中に登録したいタスクの内容を書く。
ActiveRecord::Base.transaction do
USERS.each do |u|
user = User.find_or_initialize_by(name: u[:name])
user.assign_attributes(name: u[:name], email: u[:email] )
user.save!
end
end
end
end
記事データ用
namespace :import_article do
ARTICLES = [
{ title: "記事1", text: "hogehoge" },
{ title: "記事2", text: "fugafuga" },
{ title: "記事3", text: "piyopiyo" }
].freeze
desc "import_article" # descにはタスクの説明を書く。
task import: :environment do
# この中に登録したいタスクの内容を書く。
ActiveRecord::Base.transaction do
ARTICLES.each do |u|
article = Article.find_or_initialize_by(title: u[:title])
article.assign_attributes(title: u[:title], text: u[:text] )
article.save!(validate: false)
end
end
end
end
追加したrakeタスクの実行コマンドの探し方
rake -T | grep import
# 以下、実行コマンド
rake import_article:import # import_article
rake import_user:import # import_user
rakeタスクの実行
RAILS_ENV=development bundle exec rake import_user:import
RAILS_ENV=development bundle exec rake import_article:import
シェルスクリプトの準備
以下のコマンドで、import.shというファイルを新規作成する。
vi import.sh
viエディタで開いたファイルはデフォルトだと閲覧モードになっているため、編集モードにしてからでないとファイルを書き換えられない。編集モードにするには i を押す。
#!/bin/sh
cd ~/user_article_import
RAILS_ENV=development bundle exec rake import_user:import
RAILS_ENV=development bundle exec rake import_article:import
編集モードにした後は、上記の内容を書き込む。
#!/bin/sh
はシェルスクリプトを使用できるようにするための定型文
cd ~/user_article_import
で rails new
で作った際のプロジェクトの一番上の階層に移動する。
RAILS_ENV=development bundle exec rake import_user:import
RAILS_ENV=development bundle exec rake import_article:import
を入力することで、先ほど用意したrakeタスクをシェルスクリプトに登録する。
その後、esc → :wqでファイルを保存してエディタを閉じる。
シェルスクリプトの実行
sh import.sh
ファイル名の前にsh
をつけることで実行権限を変更しなくてもシェルスクリプトを実行できる。
最後に
バッチ処理と組み合わせて定期的に実行したい処理を登録したりするときにもrakeタスクは使えそうだし、業務でよく使うコマンド操作をシェルスクリプトにまとめて登録しておけば業務スピードが上がりそうだなと感じました。
もっと使いこなせるようになって、業務の効率化を行っていこうと思いました。
もしこの記事を見て、ためになったと感じていただけたなら、LGTMをいただけますと幸いです。