積々RUNMIZZO

日々積み重ね

Rakeタスクの実装memo✍


Rakeタスクとは?

  • アプリケーションを起動せずに定義した処理を実行することができるやつ
  • わざわざアプリを起動せず定期タスクを実行できたりするので便利


(実装手順)

rails g task status_task

lib/tasks/配下に'status_task.rake'が作成される。


(記述例)

# 名前空間
namespace :status_task do
  # タスクの説明 desc => description(説明)
  desc '公開待ちの中で、公開日時が過去になっているものがあれば、ステータスを「公開」に変更されるようにする'
  # update_status_task => タスクの名前
  task update_status_task: :environment do
    # 実行したい処理を記述する場所
    Article.publish_wait.past_published.find_each(&:published!)
  end
end
  • 名前空間とはタスクが沢山あった時にグループ分けできるもの
  • :environmentはおまじないくらいの理解でOK


タスク一覧の確認コマンド

rake -T


参照

Rakeタスクの実装 - Qiita


authorizeメソッドについて✍


authorize(@article)

authorizeとはなんぞ?ってなったので、かいつまんでメモしておく✍


  • gem 'pundit'の導入によって使用される

  • Punditは認可周りの機能を作成するのに有効なGem

  • policyクラスをapp/policies/に配置する

  • ApplicaitonPolicyでは、モデルオブジェクトをrecordで表している

class ApplicationPolicy
  attr_reader :user, :record

この部分? usercurrent_userが呼ばれてるっぽい。

  • authorizeメソッドは
    ApplicaitonPolicyを継承しているクラスのインスタンスにおける
    current_userrecordを渡してくれる

  • アクション名から該当Policyを推論する


冒頭の例やと@articleを特定してるんかな?

まだ難易度高目なんでこれくらいで先に進もう。。


参照

Punditを使って権限を管理する - Qiita


enumについてmemo✍


※使い方は奥が深そうなので理解したところだけ

  • enumは列挙型のことで、
    整数が割り当てられた文字を順番に出力していく。

  • 可読性が上がるメリットがある。

  • Railsではモデルにenumを定義することで、
    文字を使ってカラムの値を変更したり、取り出したりできる。

  • 間隔を空けて定義すると、
    値の中間の状態を追加で定義することになった場合に追加しやすい。

  • gemを追加して日本語化すると更に便利

  • モデルファイルに定義

enum: status: { draft: 0, in_review: 10, published: 20, archived: 30 }


参照

【Rails】Enumってどんな子?使えるの? - Qiita


nilガードについてmemo✍


左辺がnilの場合は値が代入され、既に値が入っている場合値の代入は行われない。

pry(main)> a = nil
=> nil
pry(main)> a ||= "OK"
=> "OK"

pry(main)> b = 1
=> 1
pry(main)> b ||= "OK"
=> 1


実は左辺がfalseになる場合のみ値の代入が行われ、左辺がtrueになる場合は値の代入が行われない。

pry(main)> a = ""
=> ""
pry(main)> a ||= "OK"
=> ""

pry(main)> b = 0
=> 0
pry(main)> b ||= "OK"
=> 0

pry(main)> c = []
=> []
pry(main)> c ||= "OK"
=> []

pry(main)> d = {}
=> {}
pry(main)> d ||= "OK"
=> {}

pry(main)> e = false
=> false
pry(main)> e ||= "OK"
=> "OK"


参考

Rubyのnilガードについて調べてみた - Qiita


サムネイルのHTML設定

先日学習復習用アプリとしてリリースした『褒めて遣わす』について
サムネイルを設定した箇所だけアウトプットしておきます!

OGP(Open Graph Protocol)とは

「Open Graph Protcol」の略で、FacebookTwitterなどのSNSでシェアした際に、設定したWEBページのタイトルやイメージ画像、詳細などを正しく伝えるためのhtml要素
とのこと。

OGPとは?設定するべき理由と設定方法について | デジマギルド

↓今回はこの部分だけ

<!DOCTYPE html>
  <html>
    <head>
      ・・・
      <meta property="og:title" content="『褒めて遣わす』">
      <meta property="og:description" content="褒める力を磨くトレーニング用アプリ(願望)です。">
      <meta property="og:image" content="https://i.gyazo.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxx.png">
      ・・・
    </head>

これでこんな見た目になる。 Image from Gyazo

タイトル、文章は↓が対応してる(そのまんまなので割愛)

<meta property="og:title" content="『褒めて遣わす』">
<meta property="og:description" content="褒める力を磨くトレーニング用アプリ(願望)です。">


画像設定について

画像についてはサイズで見た目が変わったので補足で説明入れておきます。
※これ多分Mattermostに限った話かも?

因みにサイズが小さいとこんな見た目になる。 Image from Gyazo ※この時<meta property="og:site_name" content="『褒めて遣わす』">も記載してたので余計なタイトルも混じってます。

色々調べてたら取り敢えず1280×720ピクセルが良い感じになるっぽかったんで Keynoteに画像を貼り付けてからGyazoで切り取りました。

Image from Gyazo ※実際はGyazoで切り取る時にピクセル表示されてるのでそれを頼りしてます。

それから作成されたリンクをコピー

Image from Gyazo

↓コイツに反映

<meta property="og:image" content="https://i.gyazo.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxx.png"> 

これで良い感じになりました。 Image from Gyazo

最後に作ったアプリ貼っておく(ペタ)

hometetsukawasu.herokuapp.com

やっぱりはてなブログやと違う見た目になる(笑)

Railsで簡単なlinebot作ってみた①(環境構築編)

かなり見切り発車的にlinebot作ってみることにしました。
出来たとこまで順番に学習メモ✍


使用バージョン



環境構築


% rails _5.1.6_ アプリ名 --database=postgresql --skip-bundle

・herokuはSQliteが使えないみたいなんでPostgreSQLを使う

・Gemfile(Railsチュートリアルと同じ環境)

source 'https://rubygems.org'

gem 'rails',        '5.1.6'
gem 'puma',         '3.9.1'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.7.0'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest',                 '5.10.3'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.16.2'
  gem 'guard-minitest',           '2.4.4'
end

group :production do
  gem 'pg', '0.20.0'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
% bundle install --without production
% rails s

・エラーに出くわす

Gem::LoadError (Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).):

・database.ymlでdevelopment環境はpostgresqlを使えとなっていたところsqlite3に修正

https://qiita.com/jnchito/items/f9c3be449fd164176efahttps://teratail.com/questions/141785

rails newしたときにdb指定してたからややこしくなったのかも。

・無事Yay! You’re on Rails!


番外


herokuへのデプロイ

% heroku create
% git push heroku master

・エラーに出くわす

error: src refspec master does not match any
error: failed to push some refs to 'herokuのURL'

・mastarちゃうで!とのこと。(せやせやmainやった)

% git push heroku main

https://zenn.dev/shimotaroo/articles/14ef835293981a

・コレで通りました、、と思ったらまたエラー(長いので割愛)

・以下の記事と完全一致なのでそのまま実行して解決◎

https://qiita.com/m6mmsf/items/fb8a8672df98bdb59c9c

無事デプロイ完了♪

つづく、、