📬

🐳 Rakeタスクを活用したRails管理者作成ガイド【Docker対応】

2024/08/22に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。

この記事では、Docker環境でRakeタスクを実行し、管理者アカウントを作成する方法を解説します。Dockerを使用することで、一貫した環境でタスクを簡単に管理できます。

Rakeタスクとは

RakeはRuby版のMakeです。Unixの 'make' に代わるような独立したRubyのユーティリティで、'Rakefile'と.rakeファイルでタスクを定義・管理します。 Railsでは、管理系のタスクはRakeタスクで書かれています。Railsのタスクは洗練されていて、タスク同士が協調して動くようになっています。

https://railsguides.jp/v4.2/command_line.html#rake

公式ドキュメントより

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

参考):引数を複数設定する方法
https://qiita.com/yoshiokaCB/items/c97ba878469701c3d99b

管理者作成タスクの実行コマンド

実行可能なrakeタスク一覧を表示します。

docker compose run --rm web rake -T

管理者を作成するコマンドです。

docker compose run --rm web rake admin:create[test@example.com,password]

https://railsguides.jp/v4.2/command_line.html#rake

動作確認

管理者作成タスクが正しく動作するかを確認します。以下は、いくつかのシナリオでの実行例です。

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.

この場合、以下の手順で解決を試みました。

1. bcryptが正しくインストールされているか確認

docker compose run --rm web bundle info bcrypt

2. Gemfile.lockを削除して、再度bundle installを実行

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でも記事を執筆していますので、ぜひチェックしてみてください。
https://note.com/take_lifelog/n/n58df7ce7af6f

他にもこのようなことについて記載しているのでお読みいただければ幸いです。

https://zenn.dev/take_tech/articles/275e5f4242973d

https://zenn.dev/take_tech/articles/374817f256ec9d

最後までお読みいただき、誠にありがとうございました!

Discussion