Railsを5.2.4から6.0.4にアップデートした手順をメモ

Railsを5.2.4→6.0.4にアップデートする機会があった。アップデートのために行った手順、手順ごとの調査をメモした。 手順 1. Rails以外のバージョンが古いライブラリをアップデートする Railsアップデートの影響範囲を小さくするため、Rails以外のライブラリ…

activerecord-import の on_duplicate_key_update, on_duplicate_key_ignore 周りを調査

背景 activerecord-importのバージョンを0.15.0から1.2.0(最新)にアップデートしたい。 on_duplicate_key_update周りでBREAKING_CHANGEがある。 DBはMySQLを使用している。 on_duplicate_key_updateとは MySQL https://dev.mysql.com/doc/refman/5.6/ja/inse…

Ralisのstrict validation

Active Record バリデーション - Railsガイド 使ったことなかったが、ユーザー普通にフォームからPOSTしただけでは起きえないエラーのvalidationに良さそう。 POSTされたデータが、普通にフォームをPOSTしただけじゃ起きえないような整合性の崩れ方している…

form runの調査

form run とは フォーム系のSaaS form.run 背景 マッチング系のサービスにおいて 一方が任意の項目を設定する -> もう一方が回答する といったモデルを設計するときに参考になるので調査した。 できることを調査 1. フォームの項目が自由に設定できる フォー…

Googleフォームの調査

Googleフォームとは www.google.com のこと 背景 マッチング系のサービスにおいて 一方が任意の項目を設定する -> もう一方が回答する といったモデルを設計するときに参考になるので調査した。 できることを調査 1. フォームの項目が自由に設定できる 以下…

構造が定まってないHashにアクセスする場合は[]よりもfetchのほうが安全

Railsの話。Hashは[]で値が取り出せる pry(main)> p = {a: {b: :c}} pry(main)> p[:a][:b] => :c Hashの構造が定まってなくて、求めている構造のときのみ値を取得するケースを考える 例えば信用できない外部APIのレスポンスをパースしたり、ユーザーがPOSTす…

『良いウェブサービスを支える 「利用規約」の作り方』を読んだ

良いウェブサービスを支える 「利用規約」の作り方 を読んだ。 利用規約に限らず、ウェブサービスに関する法規制についてのわかりやすいガイドブックだった。 この本を読んだモチベーション 法的な制約によりXXの実装が必要だったことが後から発覚して手戻り…

データモデルとUIの整合性をとる

ソフトウェア開発で要件を詰める際に、データモデルとUIの整合性に気をつけている。 特にどういった点に気をつけて整合性を確認しているか書く。 データモデルとは 一言で言うとデータをモデリングしたもの、つまりソフトウェアが扱うデータを整理して構造化…

画面遷移が複雑なAndroidアプリにどう対処したか

(メモレベルの雑文なので、読みづらいかもしれません) やりたいこと 作っていたAndrodアプリの画面遷移が複雑なため、画面遷移を一望し、条件付きの分岐を行う仕組みを作りたい。 以下のようなIoT機器の設定アプリをイメージしてください ある画面に出入りす…

DroidKaigi 2019で「BLEアプリ設計パターン」という発表をしました

DroidKaigi2019で発表してきました。 スライド speakerdeck.com (追記:動画上がってたので追加しました) www.youtube.com 人前で30分も喋るのは初なので、これはガチでやらねばと思って会社から時間もらって色々準備させてもらいました。 おかげさまで、自分…

iOSDC Japan 2018 に参加しました

ちょっと体調が悪かったため、一部しか参加できませんでした。 個人メモですが、感想を書きます。 コンパイラから紐解くSwift method dispatch 登壇者が高校生なのに衝撃を受けました。「希望の国のエクソダス」という小説をちょっと思い出しました。 メソッ…

RxJavaを使ったエラーハンドリングをどうするか その2 例外翻訳編

状況 一つのユースケースでBLE通信とWebAPI通信を行う場合を考えます。 サンプルコード class SomeDeviceUseCase { /** BLE通信でデバイスの設定を変更し、WebAPI経由でその設定をサーバーに記録する処理 */ fun changeSetting(setting: Setting) : Completa…

RxJavaを使ったエラーハンドリングをどうするか その1

前提 RxJavaでは例外が投げられた時、Observable#subscribeの引数onErrorにThrowableで渡って来る。 例 class ApiClient { fun fetchSomeData() : Single<SomeData> { // 取得処理 } } 利用側 apiClient.fetchSomeData() .subscribe ( { data : SomeData -> /** 成功処</somedata>…