外部キー制約を付与したデータにより Herokuで db:fixtures:load が落ちてしまう

TL;DR

ENV['FIXTURES'] = 'hoge,fuga,bar' と並び順を指定してから投入しているが、あまり良いやり方ではなさそうなので、なにか良い方法があれば教えてください 🙏

遭遇した問題

今作っているアプリケーションをHerokuで開発している。 Review Appsで動作を確認したいので、 db:fixtures:load を読みだしたところ下記のようなエラーが出た。

ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: insert or update on table "hoge" violates foreign key constraint "fk_rails_xxxxx"

Rails のバージョンは 5.2.3 。

原因

テーブル fuga が hoge に対して外部キー制約を持っていたが、 hoge より先に fuga のデータを作ろうとしてしまいエラーになっているようだった。

Use SET CONSTRAINTS for disable_referential_integrity without superuser privileges (take 2)Revertされており、現状解決策はなさそう?

やったこと

この辺を見てENV['FIXTURES'] = 'hoge,fuga,bar' と投入順を指定することで対処した。ただこれだと fixtures/*.yml の増減に引っ張られてしまうので、微妙だと思っている。

なにか他に良い方法があれば教えて下さい 🙏

参考

Heroku CI with rails fixtures - Stack Overflow

アバター画像のプレースホルダに avatars.dicebear.com を利用する

TL;DR

https://avatars.dicebear.com/v2/種類/値.svg みたいな感じで入力すればアバター画像のプレースホルダが手に入る。 他にもいろいろオプションがあるので便利かも。

やりたいこと

Webサービスでよくある、ログインユーザのアイコン画像を表示するときデフォルトをどうしようと思っていた。

GitHubのようなアイコン生成は identicons というらしく、似たような形で表現したいなーと思っていた。

やったこと

npmパッケージなどないか調べていたら、上掲の DiceBear/avatars を見つけたので導入した。 上掲のURLで利用することを推奨していたけど、npmパッケージで導入。

「Sprite Collections」を見ると identicons だけじゃなくていろんな種類がある。

READMEの通りに導入した。

Stimulus: A modest JavaScript framework for the HTML you already have.で使うときはこんな感じでconnect で呼び出す。

gist5e003daad409e4688ab04798acd94373

Pocketでお気に入りしたページをはてなブックマークに追加するWebアプリを書いた

TL;DR

はじめてGo言語(Echo)でコードを書いてみた。

github.com

やりたいこと

Pocket でお気に入りした記事をIFTTTのメール通知機能を使ってはてなブックマークに投稿していたが、メールでのブックマーク投稿機能の提供が終わってしまった。

bookmark.hatenastaff.com

なのでGo言語の勉強も兼ねて作ってみた。Go言語わからなすぎてだいぶハマってしまった… 😭

やってること

POSTが呼ばれたらパラメータにいるURLをはてなブックマークAPIを叩いて追加するだけ。

Pocketでお気に入りをしたらPOSTを呼ぶ部分は IFTTTの webhook serviceからやっている。

使ったもの

ハマったこと

参考にしたもの

特に hatena-go についてはめっちゃコード参考にしました。ありがとうございます。

github.com

nasust.hatenablog.com

Nuxt.js + Skyway ( WebRTC ) で簡易ベビーモニタを作った

TL;DR

github.com

やりたかったこと

  • iOSのカメラを使う
  • リアルタイムで送ってほしい
  • 音声も拾いたい

やったこと

  • iOSのカメラを使う
  • 音声も拾いたい

MediaDevices.getUserMedia() - Web API | MDN

を使った

  • リアルタイムで送ってほしい

webrtc.ecl.ntt.com

を使った

公開するまでの流れ

最初はリアルタイムで配信すること & 音声の取得は難しいと思っていたので、 ブラウザで撮影したカメラの画像をサーバに送信する方法 - NaCl非公式ブログ とを参考にして、 Rails 5.2 + Stimulusjsで作っていた。

お世話になっていた FJORD BOOT CAMP(フィヨルドブートキャンプ) のシステムでも似たような実装があったのを記憶していたのでそのコード部分の実装*1*2 も参考にした。(余談だけどこの機能は今は消えちゃってた

ただ取得時間が短かったせいかうまく画像を表示させることができなかったので断念。

上掲のSkywayを試したら思ったよりもすぐ出来、Railsじゃなくても良くなったので Nuxt.js(デザインはbootstrap-vue)を導入。 全公開されちゃうのはちょっとなーと思ったので、合言葉と合致したら閲覧と配信ができるよう vuex-persistedstate を使った。Basic認証っぽいことをしたかったんだけど、SPAモードでそれができるやり方がわからず。なんか良いやり方があったら教えてください。

ホスティング先は zeit.co を使った。 初めてだったけど、now だけでデプロイされるのはすごい。 URLが毎デプロイごとに変わったので、now && now alias を実行している。この辺もこのやり方でいいか気になっている。

感想

当たり前のことだけど、自分たちにとって「便利〜」というものを作るのはとてもいいなぁと思った。

HTMLから本文抽出するアプリケーションを作った

github.com

作ったといっても下記gistのコードを Cloud Functions用にちょこっと書き換えただけ。

mozilla/readability を使った本文抽出サンプル

沖縄県獣医師会のホームページが良くなった

kimihito.hatenablog.com

で利用していた 公益社団法人 沖縄県獣医師会 が更新されました。

この変更に追いつかずに

github.com

スクレイピングが壊れてしまっていたので修正しました。

公益社団法人 沖縄県獣医師会 がすごくわかりやすくなっていて良いです。

JSONで出力できるようにしたので、なにかアプリケーションとして一つ作れないかなぁ。

2018年の振り返り

11月30日で今年の仕事を納めたので今年一年を振り返ります。

去年の記事はこれ

健康

  • 去年発症したアナフィラキシーは出ず過ごせた。食後の運動を控えたり、睡眠不足をなるべく回避するようにしたのが良かったと思う。
  • 目が人工レンズになった。視力は1.5になったが、近くの文字が見えづらくなった。
  • 歯がボロボロだった。虫歯がいくつも見つかったり、強く磨きすぎて神経を刺激している状態になった。詰め物で食い止めている感じ。歯茎も汚いとのことだった。歯磨きとフロスの使い方を教えてもらい改善を心がけている。4月ごろに診てもらうつもり。
  • 日が昇る前に起きて徘徊(という名の犬の散歩)をしている。顔なじみの先輩方が増える。

仕事

  • 去年から引き続き、コードタクト さんにお世話になっている。目の手術で1ヶ月休んだり、後述の理由で今月から仕事を休ませてもらったりとだいぶ融通を利かせてくれてありがたい。
  • 一緒のプロジェクトメンバーは自分よりもすごい人たちばかりで、学びがある。プロダクションでDockerが使われていたり、今どきな感じ。
  • スクラム開発っぽい開発の進め方を経験できたのは良かった。
  • 自分がやったと記憶しているのはこんな感じ。基本的にRailsアプリケーション開発に付随する作業が主。
    • Railsのアップデート
      • 5.2.1.1までやった
      • 合わせてActiveStorageに移行
    • Webpacker + Vue.jsを導入
    • bundle-auditをCIで回したり
    • Firebase Cloud Messagingも導入したかな?
  • 過去にテストがなかったときに自分が書いたテストコードが開発スピードの足かせになっている気がする。
  • 開発外のところだと、事業の理解を努める作業が不足していた。
  • Rails以外の業務経験が弱い。フロントエンド力がほしい。
  • 個人開発では小さなプロダクトをいくつか作っては公開まで持って行けずに挫折することが多数。

コミュニティ / OSS活動

  • 仕事関連でRailsのバグを踏んだ。そのうち一つは同僚のおかげでコントリビュートするところまでできた。(デバッグまではやれたけど、プルリクエストを作るのは眺めていただけ)
  • Ha4goをHerokuで動かして https://okinawa.ha4go.net にするところまではやった。 Ha4go自体へのコントリビュートはできていない。
  • コミュニティへの参加はOkinawarbに参加にたまに顔を出すぐらい。しばらくオフラインでのイベント参加はできなさそう。
  • スポンサードはいくつかした。ただ協賛するだけで自身は参加しないということが多かった。去年の反省を含めてそういう行為をしていたんだけども、技術系カンファレンスのスポンサーシップへの考え方 | F's Garageの下記の引用部分を見て、「イベントに共感したので協賛する」という意識をもっと伝えないとと思った。

    せっかく準備いただいてるわけですから、その機会は十分に活かさせてもらいたいですし、それを望んでイベント設計をされているわけで、しっかり話に乗って賑わいを出すのに貢献するという考え方でしょうかね。テンション低く、お金だけ出して終わるのも気分のよくない印象を与えてしまいます

  • 技術コミュニティではなくて、ママさんコミュニティや沖縄の教育関係のコミュニティには足を運んだり良くしていたかも。

    • ただどれも現時点ではフェードアウトしている。

生活

  • 子供が生まれた。今年の残り一ヶ月は、疑似育児休業(たかが一ヶ月 && 別に育児休業給付があるわけでもないので「疑似」)と称して育児に奮闘してみるつもり。
  • 子供が予定より早く産まれたりで10月、11月はずっと病院通いや手続きで市役所に行ったりだった。こども医療助成はすごい。
  • 家庭の振り返りは去年から引き続き継続中。
  • カレンダー振り分け術 を実践している。ゲームしてるみたいで楽しい。
  • スプラトゥーンがSになった。

2017年時点の抱負の振り返り

去年書いたもの が今年どうだったかという話

  • 謙虚に仕事をする

    • 謙虚というか、静観という感じの仕事ぶりだったかも。
  • 一発当てる

    • あたっていない
  • 読む / 書く

    • 去年よりはマシになったかも

2019年の抱負

  • 使える武器を増やしたい
  • 一発当てる
  • 意志はきちんと伝える