移転しました。

約3秒後に自動的にリダイレクトします。

DBから取得したデータを任意の順番で並び替える方法

仕事をしている中で、ステータスの値を使って特定の順番に並び替えてからフロントに返したいということがありました。

ステータスはenumで定義されていますが、指定された順番は定義順ではなかったため一工夫必要だなと思いつつ考えてみると初めての作業でした。

良い方法がないか検索すると、やはりありました

zenn.dev

やり方

  1. 並び替えたい順番でステータスの値を配列で定義
TEST_ORDER = %w[aaa bbb ccc]
  1. 並び替えたいデータにsort_byを行い、sort_byの方法を1で指定した配列のindex順になるように指定
test_arr.sort_by { |test| TEST_ORDER.index(test.status) }

以上

注意点としては、

今回、私はControllerのメソッドで行いましたが、並び替えたい順番で値を配列で定義するのをメソッドの外で行うこと

そうしないとエラーになりました。

今回の件に限った話ではないのですが

結構シンプルにできたの満足

GithubでAchievementsをGetした話

一緒に仕事をしている人のGithubのプロフィールをふと覗いたときに、Achievementsなるものを発見してしまいました

ゲームが好きな自分としてはこういった称号は気になるし欲しくなってしまうもの

なのでGetしました!とりあえずすぐに手に入る簡単なものから

Achievements とは?

以下が公式の説明になりますが、ある一定の条件をクリアするとAchievementsがもらえるようです

github.com

注意点

取得してみて分かったのですが、リポジトリの設定がpublicになっていないとカウントされずAchievementsが取得できないようでした

仕事でも自学でもprivateで行なっていたので手に入っていない訳です

今回取得したAchievements

今回取得したAchievementsは、「Pull Shark」と「Quickdraw」の2つをGetしました!

Pull Sharkは、Pull Requestを2回マージすることで手に入ります

また、QuickdrawはIssueもしくはPull Requestを作成して5分以内にCloseすると手に入ります

最後に

ちょっとしたものですが称号的なものを入手できるとモチベーションが上がりますね

belongs_toのoptional: trueの意味

Railsのソースを読んでいて、以下のような記述がありました

belongs_to :company, optional: true

完全に忘れていたので、未来の自分のためにメモしておきます

belongs_toのoptional: trueとは?

外部キーがnilでも許可するという意味です

同じ記事を開いた形跡があったので、前にも調べたのに忘れていたようです

使用例

例えば、

class User < ApplicationRecord
  has_many: posts
end

class Company < ApplicationRecord
  has_many: posts
end


class Post < ApplicationRecord
  belongs_to :company, optional: true
  belongs_to :user, optional: true
end

上のような定義があり、

Userが追加した記事のデータもCompanyが追加した記事のデータも同じPostテーブルに保存されるとします

Postテーブルに保存されているデータには、Userに紐づいているものもあれば、Companyに紐づいているものもありますが、

UserとCompanyの両方に紐づいていることはありません

この場合、Userに紐づくPostのデータには、user_idが保存されていますが、company_idはnilになります

もし、optional: trueをつけていなかった場合、company_idがnilだとエラーになります

このような時にoptional: trueが必要になってきます

参考

blog.ryskit.com

「ドラゴンクエストモンスターズ テリーのワンダーランドRETRO」でRTAに挑戦

年末に「テリワン」がtwitterでトレンドに入っていた

「テリワン」といえば、1998年にGBで発売された「ドラゴンクエストモンスターズ テリーのワンダーランド

昔にプレイした記憶があり、個人的に結構好きなゲームです

なぜトレンド入り?

なぜ、今トレンドになっているのか追ってみるとRTA in Japan Winter 2022というイベントでが開催され、「ドラゴンクエストモンスターズ テリーのワンダーランドRETRO」でRTAに挑戦しているらしい

ちなみにRTAとはReal Time Attackの略で、どれだけ早くゲームをクリアできるかを競う競技

私自身RTAという存在は知っていましたが、RTA in Japanというイベントの存在は年末の話題で最近初めて知りました

実際の映像

以下は年末に行われていたテリワンのRTA in Japanの映像です

www.youtube.com

昔プレイした時はどれくらいの時間でクリアしたかは覚えていません、少なくとも30時間くらいはかかった気がしており、1時間でクリアしているのは超早い

自分でもやってみた!

懐かしさもあり自分でもテリワンのRTAをやっていみたいと思いたち、先日早速Switch版の「ドラゴンクエストモンスターズ テリーのワンダーランドRETRO」を購入してやってみました

どうやって行うかは、水沢さんという方がまとめてくれています↓

docs.google.com

やってみた結果

結果としては、7時間くらいでクリアできました!

金策と最後の星降り大会で結構苦戦し時間がかかりましたが、昔普通にプレイしてクリアしていた頃に比べれば絶対に早い!

慣れれば半分くらいの時間でできそう!

最後に

今年は色々なことに挑戦したいと思っており、初めてのRTAに挑戦してみました

普通にプレイするのとは、また違った感じで面白かったです!

dockerでの環境構築で「no space left on device」と怒られた時の対処法

いつも通りdocker-composeでコンテナを立ち上げようとした時、「no space left on device」というエラーが発生

そのエラーの対処法になります

前提

対処法

1. dockerのコンテナやイメージの削除

エラーの内容的にデバイスのスペースが無いとのことなので、まずは使っていないコンテナやイメージを削除すれば良いのではと予想立てて進めました

dockerのコンテナやイメージの削除については以下の記事を参考に行いました

qiita.com

ちなみにコマンドは、以下を使用しました

# コンテナ一覧を確認(停止しているものも含めて)
$ docker ps -a

# コンテナの削除
$ docker rm [コンテナID]

# イメージ一覧を確認
$ docker images

# イメージの削除
$ docker rmi [イメージID]

また、noneとなっているimageもいくつかあり、そちらは以下の記事を参考に削除を行いました

qiita.com

ちなみにコマンドは、以下を使用しました

$ docker image prune

2. 解決しないのでDockerのDisk images sizeを確認

予想に反して解決しなかったので、今度はDocker自体の使えるスペースが足りて無いのではと予想してDocker DesktopのダッシュボードからDisk images sizeを確認

ちなみに、確認方法はDocker Desktopを開いて

Settings > Resources > Docker image size

で確認できます

確認した結果、作成可能なimagesが16GBに対し、使用容量が16GBでした

spaceが無いと怒られるわけです

ということで、Disk images sizeを24GBに増量

エラーが出なくなり、無事解決しました!