せまい部屋

web/gameエンジニアのweblog

ActiveStorageのreturnにはまっためも

どうにもテストが落ちてしまって地味な検証を要した

tl;dr

ActiveStorageで has_many_attached マクロを設定している場合、model.attach(ファイル)の戻り値はActiveStorage::Attachmentの配列。has_one_attached マクロを設定していると model.attach(ファイル)のreturnはnil

railsguides.jp

起きたこと

Trailblazerなんか使っているので一つずつステップを記述していて、その一つに、ActiveStorageへのファイルアップロードがありました。以下のような感じ。

class User < ActiveRecord::Base
  ...
  has_many_attached :photos
  has_one_attached :icon
  ...
end
class MyOperation < Trailblazer::Operation
  ...
  step :save!
  ...

  def save!(options, user:, **)
    user.icon.attach(options[:params][:file])
  end
end

運良く事前に :photos に対する多数のファイル添付が可能なように実装されていたので、仕様に沿って今回は1対1となるような has_one_attached マクロを設定。比較的似たような処理を書くもののどうにもrequestのスペックが通らず…

結果

今回のケースだとstepに指定している save! メソッドがtruthyであればいいけどずっとnil返しててしんでいました。実地で戻り値を確認していくと、attachメソッド返り値が違うぽくて、多数添付できる場合は [#<ActiveStorage::Attachment id: ...>] 、1対1の場合はnilになってfalthyになってました。事前に実際リクエストして試したのも裏目に出て余計発見できませんでした😞
attach自体は意図した動作であることを確認して、現状は以下の感じで確認するように改修しています。

  def save!(options, user:, **)
    user.icon.attach(options[:params][:file])
    user.attached?
  end

LL久しぶりだけどRailsとその周りのツール群はどうにもメタなことやりすぎてる感じが難しい。

Fitbit AltaHR買った

最近時間にゆとりがあるので早寝早起き、健康志向を目指すべくここ数年話題のアクティビティトラッカーを使ってみることにしました。同僚の人が使っていたのもあってこの手のプロダクトといえばFitbitみたいな印象があったのですが、いざ調べてみるとGarminエプソンからも引けをとらない商品が出ているみたいです。
どのアクティビティトラッカーでも割りと計測できる項目というのは似通っていて、各社のどのモデルを購入するかで防水防塵や心拍測定、GPS搭載等が異なります。今回自分のケースでは、歩数計、心拍数、睡眠トラッキング、たまにランニングという用途で検討した結果AltaHRを買いました。

AltaHR

www.fitbit.com

商品到着時の充電は僅かで、電池残量が少なすぎたのか原因は不明ですが初回連携のペアリング時に「ディスプレイ上に表示される4桁のコードを入力してください」がアプリ上では指示されましたが、本体側には何も表示されませんでした。時は21世紀ですが困ったらリブートの法則に従い再起動して連携してみると難なく連携でき事なきを得ました。ちなみに再起動には充電ケーブルを接続した上でUSB側についているハードボタンを適当な間隔で3回押すというテクが必要になります。パッケージと中身はapple製品にも通ずる簡素なやつで、謎の分厚い説明書とかはありません。

f:id:takoji3:20180226101451j:plain f:id:takoji3:20180226101604j:plain

専用の連携アプリを利用して手始めに2,3時間使用してみると歩数、移動距離と心拍数もしっかり取れているようで前評判通りの機能を発揮しているようでした。睡眠管理がしっかり動くのかどうか今後検証してみたいと思います。

f:id:takoji3:20180226134655p:plain

週1回〜はランニングするようにしていてGPS内蔵モデルなら経路までしっかり記録できるわけですがアクティブなランナーでもないのであくまで健康志向なデータが残せればよいかという結論で今回のAltaHR購入となりました。一応スマホを持ち運んで一緒に走れば経路も残せるような感じがしているので、下調べどおり満足できる機能群ではありそうです。
最新モデルのIonicも目を引く感じでしたが、如何せん健康に気を使ってみようかなーという自分のようなビギナーユーザーには価格がネック…機能はもちろんGPSも搭載。問答無用ですべてを活動計測していく強い気持ちなら手を出してみたい一品という感じがしました。
向こうしばらくは早2年を経過しているiPhone6sのバッテリーが芳しい性能を発揮できていないので、常時Bluetoothオンにするような運用体制で充電難民にならないか経過観察していきます。

ロサンゼルス&サンフランシスコ街歩きと観光

諸事情により2018年2月はまるっとオフになったこともあり、予てから一度行ってみたかったアメリカ西海岸らへんに行ってみることにした。一応末端とはいえエンジニアとして生きているので単純にその本場みたいなところを訪れてみたかったという理由。当初1月末出発で考えていたが現職の込み入った某により2月頭〜半ばの計11日間になった。サンフランシスコを中心に予定を立てたが、折角そのあたりに行くので有名所の観光も兼ねてロスにも訪れるというプランで動いた。気が向くままに街歩きをしたいのもあって通常のパッケージツアーには乗らず個人で航空券その他を手配。宿はAirbnb、移動に困ったときはUber or Lyftも使ってみようという今風な作戦を考えた。

ロサンゼルス

初日

アメリカへはロサンゼルスから入ることにした故かどうか、今回は羽田出発で、最近は国際線がどんどん飛んでいるらしい。USまでは賞味10時間overのフライトになるため成田だとただでさえ辛い空港までの旅路をある程度は楽に行ける。ターミナルの規模は小さかったが2~3Fフロアに日本風な橋がかかっていた。

f:id:takoji3:20180204145516j:plain

長旅を終えるとJST深夜のタイミングでPST午前10時みたいな感じでもろ時差ぼけする。ただついたら付いたで「あ〜これがアメリカか〜」みたいなテンションで楽しい感じになれた。ロサンゼルスではダウンタウン近辺、ハリウッド、サンタモニカの3箇所を適当に回れればほぼほぼ満足みたいな感じだった。空港を含めこれらは比較的移動可能な近場にあるので適当に目星をつけた。

f:id:takoji3:20180205061436j:plain

Airbnb

いい感じのホテル取るよりは安いというのとあわよくばホストと英語の実践兼ねて喋れればという考えで民泊サービスを利用してみた。実際ただの家or部屋を借りて宿とするだけだが、現地の生活場所を借りるということでなんだか楽しかった。よくある風呂トイレ共用の個室だったので他のゲストも普通にウロウロしていた。ステイ先は物件によっては若干の不便さがある場合もあるが、個人的には何より現地感をお手軽に味わえる良いサービスだと思う。適度に都市部に近い位置でも1泊6,7000円で最低限満足する部屋はある。条件を譲ればユースホステルのような感じで2,3000円、ゴージャス()な部屋なら1,2万〜とピンきり。今回の部屋は3泊したが計1.7万程度。国が広いせいか部屋も家も広い。

f:id:takoji3:20180205104434j:plain

www.airbnb.com

ハリウッドの山の上

ドルビー・シアターとか観光どころは適当に回ったので言及はさておき、有名な看板の裏側まで登ってきた。webで調べる感じ結構道を間違える説があるらしいが、T字路でアジア系の現地人に全力で裏から看板が見たいならこっちと教えてもらった。撮影スポットではなく頂上に行きたいので Mt Lee はこっちと書いてある方に進みましょう。

f:id:takoji3:20180208030259j:plain

サンタモニカ

海辺の街🚢これも有名な観光地なので特に言及しないけど、GTA5で出てきてる桟橋と遊園地がそのままあったのが印象的だった。砂浜からの夕日というオシャンティー以外の何物でもない光景も見てきた。

f:id:takoji3:20180207102543j:plain

サンフランシスコ

街歩き

ついにきたかーというテンションで全力で歩いていたが、都心部は坂が多くて起伏がすごい。ゴールデンゲートブリッジやアルカトラズ島にも足を運んで完全にただの観光客と化してたが折角なので行かないと損なので歩きまくった。

f:id:takoji3:20180209040846j:plain

ユニオンスクエア近くのAppleストアは日本と同じくごった返していた。いわゆるお膝元店ぽいのでなかなか盛況。もちろん品揃えは何も変わらなくて逆にそれがアップル製品の凄さなのかという考え方もあるが、盛況なのはHomePodの発売が重なっていたせいかもしれない。

f:id:takoji3:20180210113915j:plain

シリコンバレー

今回一番行きたかった場所という意味ではやはりシリコンバレーらへんを実際訪れるというところ。Facebookスタンフォード大学GoogleApple他が選択肢としてあるけどちょうど土曜になってしまって本来の感じではないのと各現地ショップも営業してないのでGoogleとコンピューター博物館に訪れた。カルトレイン移動すれば車はなくても割りと簡潔に到着できる。SanAntonio駅から歩いて30~40分程度で到着した気がする。本社のGoogleplex敷地内は、テーマカラーのベンチやらビーチバレーコートやら同じく観光客のような人たちも多数来ていて1民間企業なのかこれはというスケールだった。しっかりドロイドくんたちが屯し闊歩する様を収めてきた。

f:id:takoji3:20180211041005j:plain f:id:takoji3:20180211044039j:plain f:id:takoji3:20180211044703j:plain f:id:takoji3:20180211051201j:plain

コンピューター博物館は数学者の発明から現代のコンピューターまで歴史を追って見た。単純に面白いのと、英語でも説明を頑張って読んでいたせいか午後から閉館まで滞在できてしまった。ざっくりした興味の自分でもこの有様なので、興味のある方は1日いれると思う。

f:id:takoji3:20180211055715j:plain

その他

最後はヨセミテ国立公園を歩いてエルキャピタンを拝見したり、帰国便の国際線ターミナルに迷い泣く泣く気合で延泊したりしていた。注文や適当なやり取りにも慣れ始めていたので、多少アクシデンタルな方が一人旅ぽくてよかったとも言えるかもしれない。

まとめ

今回はまとまった時間が取れることになったので盛大に時間とお金を放出してアメリカに飛びやりたいことを体験してきた。海外に出るのはリフレッシュも含めやはり楽しいのでまたぜひとも実践したいところだが次回はもはやいつになるか不明なのが悲しいところ。雰囲気や気候は日本より遥かに良いと感じているのでいつかまた戻ってきたいと希望しつつ、ここがソフトウェアの最先端なのだなーと感慨深い感じで歩いていて楽しかった。エンジニアとしてこの地に立てると嬉しいだろうなという考えは頭の片隅に置きつつ、この晴れやかな精神を忘れず今後共精進する所存。