🐳 Rakeタスクを活用したRails管理者作成ガイド【Docker対応】
はじめに
こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。
この記事では、Docker環境でRakeタスクを実行し、管理者アカウントを作成する方法を解説します。Dockerを使用することで、一貫した環境でタスクを簡単に管理できます。
Rakeタスクとは
RakeはRuby版のMakeです。Unixの 'make' に代わるような独立したRubyのユーティリティで、'Rakefile'と.rakeファイルでタスクを定義・管理します。 Railsでは、管理系のタスクはRakeタスクで書かれています。Railsのタスクは洗練されていて、タスク同士が協調して動くようになっています。
公式ドキュメントより
Rakeタスクのインストール
まず、Rakeタスクを使用するためにRakeをインストールします。
Docker環境を使用している場合、以下のコマンドを実行してください。
docker compose run --rm web gem install rake
Rakeタスクのインストールに成功すると、以下のようなメッセージが表示されます。
Successfully installed rake-13.2.1
1 gem installed
管理者作成タスクの作成
次に、管理者を作成するRakeタスクを作成します。以下のコマンドで、タスクのひな形となるファイルが生成されます。
docker compose run --rm web rails g task admin
上記のコマンドで、lib/tasks/admin.rake
ファイルが作成されます。
管理者作成タスクの内容
生成されたadmin.rakeファイルに以下のコードを追加します。このタスクは、新しい管理者アカウントを作成する機能を持っています。
namespace :admin do
desc "Create the admins"
task :create, ["email", "password"] => :environment do |task, args|
email = args[:email]
password = args[:password]
# 新しい管理者を作成
admin = Admin.new(email: email, password: password)
if admin.save
puts "管理者アカウントをメールアドレス '#{email}' で作成しました。"
exit(0)
else
puts "管理者アカウントの作成に失敗しました: #{admin.errors.full_messages.join(', ')}"
exit(1)
end
end
end
参考):引数を複数設定する方法
管理者作成タスクの実行コマンド
実行可能なrakeタスク一覧を表示します。
docker compose run --rm web rake -T
管理者を作成するコマンドです。
docker compose run --rm web rake admin:create[test@example.com,password]
動作確認
管理者作成タスクが正しく動作するかを確認します。以下は、いくつかのシナリオでの実行例です。
1. 正常なケース
dc run --rm web rake admin:create[test@example.com,password]
出力結果
管理者アカウントをメールアドレス 'test@example.com' で作成しました。
2. 重複エラー
既に存在するメールアドレスで再度タスクを実行した場合、以下のようなエラーメッセージが表示されます。
dc run --rm web rake admin:create[test@example.com,password]
出力結果
管理者アカウントの作成に失敗しました: Email has already been taken
3. パスワードの文字数エラー
8文字未満のパスワードを指定すると、次のようなエラーメッセージが表示されます。
dc run --rm web rake admin:create[test@example.com,pass]
出力結果
管理者アカウントの作成に失敗しました: Password is too short (minimum is 8 characters)
遭遇したエラーメッセージ
Rakeタスクを作成・実行する際に以下のエラーが発生することがあります。
Could not find bcrypt-3.1.20 in locally installed gems
Run `bundle install --gemfile /app/Gemfile` to install missing gems.
この場合、以下の手順で解決を試みました。
bcrypt
が正しくインストールされているか確認
1. docker compose run --rm web bundle info bcrypt
Gemfile.lock
を削除して、再度bundle install
を実行
2. rm Gemfile.lock
docker compose run --rm web bundle install
3. それでも解決しない場合は、Dockerコンテナを再構築
docker compose down
docker compose build --no-cache
docker compose up -d
以上の手順を通じて、Rakeタスクの作成から実行までの流れを説明しました。これで、Rakeタスクを使用して効率的に管理者アカウントを作成できるようになります。
最後に
ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉
noteでも記事を執筆していますので、ぜひチェックしてみてください。
他にもこのようなことについて記載しているのでお読みいただければ幸いです。
最後までお読みいただき、誠にありがとうございました!
Discussion