Open2

Rails応用4

なななななな

2023.11.17

まずは課題の概要把握。

以下の新要素について調べる。

  • rakeタスク
  • cron・whenever

rakeタスク

今回はあえて最初からロボらんてくんに訊いてみた。回答は以下の通り。

rakeタスクとは、Rubyのプログラムを自動で実行するための仕組みのことダ。Railsにおいては、データベースのマイグレーションやテストの実行など、定められたタスクをコマンド一つで簡単に実行できるようするために使われるネ。自分でカスタムタスクを作ることもできるから、繰り返し行う作業を効率化できるってわけダナ。

うーんわかったようなわからないような。続いて自分でも調べてみる。

https://qiita.com/mmaumtjgj/items/8384b6a26c97965bf047

なるほど。Rubyコードに名前をつけて保存しておいて、簡単に呼び出して実行できるようにしたものらしい。

cron・whenever

同じく最初からロボらんてくんに訊いてみる。

cronはUNIX系のオペレーティングシステムに標準で備わっているスケジューリングツールダ。定期的にプログラムを実行したい場合に、そのスケジュールを設定するために使われるぞ。設定はcrontabというファイルに書くんだ。
wheneverはRubyのgemで、cronのスケジュールをより簡単に書けるようにするツールダ。Rubyのコードで書かれたスケジュールを、cronが理解できる形式に変換してくれるんだ。Railsプロジェクトで定期的なタスクを管理したい時に便利ダネ。

こっちはわかりやすい。定期的に実行したいプログラムをRubyで書いて、それをwheneverを使ってcronに対応した形式に変換すると。

大まかな実装方針

  1. 記事ステータスに「公開待ち」を追加
  2. 記事編集画面で更新・公開ボタンを押したときの挙動を実装
  3. 公開日時が過去でステータスが「公開待ち」になっている記事があるかチェックして「公開」に変更するというタスクを1時間毎に走らせるロジックの実装

ざっくり分けるとこの3つって感じかな。rakeタスクとcron、wheneverは3で登場するわけだ。
まずは1と2をやって、それから詳しい使い方とか調べつつ3に取り掛かることにしよう。

記事ステータスを追加

最初にモデルを確認。
1に関してはシンプルにenumを追加すればいい感じかな。

OK、追加した。2はモデルにインスタンスメソッドを定義して、それをもとに分岐する処理をコントローラに書く感じかな。
記事編集画面周りのコードを確認してみよう。

試しにブラウザから記事を公開してみようと思ったら、なんかカテゴリーが空欄になっちゃって公開できない…。これも直さないとダメなのかな。
というかあれか、カテゴリーはカテゴリーで事前に作っといて選択する方式か。

↑で合ってた。無事公開成功。
やってみた&コントローラ覗いてみた感じ、だいたい方針は合ってそうかな。
ただ、更新と公開とでコントローラが違うからその辺はちゃんと考えてロジック組まないといけないな。

今日はここまで。明日は具体的な分岐方法考えるところから。