Thanks Driven Life

日々是感謝

チェアマットと椅子のキャスターを買い替えた

チェアマット

f:id:gongoZ:20210809173441p:plain
チェアマットを敷いている様子

経緯

最近引越した影響でひたすら散財しています。これもその1つで、もともと使っていたものは既に疲弊しきっていたため、この機会に買い替えるぞという気持ちになりました。

買ったやつ

いろいろ探した結果、なんかシュッとしていたのでこれにしました。

www.vanilla-chair.com

足触りがよくて結構好きです。

椅子のキャスター

ついでに椅子のキャスターも交換しました。

f:id:gongoZ:20210809174009p:plain
チェアマットの上に椅子を載せている様子

この椅子は kaggレンタル でレンタルしているもの*1ですが、レンタル時に「フローリング用のキャスターを装着してくれ」というオプションにしていました*2。(前述の)旧居で使っていたチェアマットぐらいであれば問題なかったのですが、今回用意したやつだとかなりブレーキがかかってしまい、ふと椅子をずらしたい時にも結構な引っ掛かりが発生してそこそこストレスでした*3

というわけで本来初期装備である「カーペット用のキャスター」を購入し、装着しました。滑りが良くなっていい感じです。このままフローリングに飛び出さないように気をつけます。

*1:https://www.kagg.jp/office-chairs/hermanmiller/272349/961775/

*2:結局フローリングで生のまま使うことはほぼ無かった

*3:腰を浮かせれば問題ないのですが、ふとずらしたい時にまで意識は届きづらく

2020年ふりかえり

来年もよろしくお願い致します

仕事(業務)

引き続き SmartHR でやっております。

仕事(環境)

コロナ禍ということで3月末からリモートワークが始まりました。

shanaiho.smarthr.co.jp

これまでは自宅にこたつ机+座椅子しかなく、このままでは腰が爆発するだろうと想い、この機会にいろいろしました*1

before after*2
f:id:gongoZ:20200409190931j:plain:w400 f:id:gongoZ:20200410112815j:plain:w400

健康

10月頃まではイケイケでしたが、最近いろいろあってまた体重が増えてきました。 最近フィットボクシング2も購入したので、来年になったら本気出します。

食事

コロナ禍ということで外食の回数が激減し、代わりに UberEats が増えました。 そればかりだと健康が死ぬなと思い、時折自炊を挟みつつ、定期宅食サービスを契約して日々を過ごしています。

自炊は、だいたいカレーです

gongo.hatenablog.com

技術

プライベートではほとんど何もしていない一年でした。毎年の Emacs Advent Calendar も今回はネタが出せず不参加。

ゲーム

あいかわらずスマホゲーが中心です。去年から始めた メギド72は最近は手付かずで、代わりにDQウォークを始めました。

据置きゲーとしては以下をプレイしました。

アニメ・映画

  • ヴァイオレット・エヴァーガーデン
    • 「へぇ映画やるんだ。映像綺麗だな。試しにアニメ見てみますかねー」と軽い気持ちで Netlifx で見始めたらめちゃくちゃハマった
    • 泣きたい時に見ると良さそう
  • 鬼滅の刃
    • 漫画 & アニメともに未読状態で無限列車編から参入したところ、これもハマりました
    • 言ってしまえば Ufotable 最高
  • GREAT PRETENDER
    • なんかこう、良かった

*1:リモートワーク環境を整えるための支給があったりしました https://shanaiho.smarthr.co.jp/n/n3853908ba226

*2:4月時点での写真。今はもうちょいゴチャゴチャしている。マット敷いたり

*3:https://news.yahoo.co.jp/byline/konnoharuki/20200928-00200433/

*4:弁当の大きさと自宅の冷凍庫のサイズの関係上、一度の配達で数がなかなか増やせなかった + 送料ちょい高

データモデルをチームメンバーに共有する時に TypeScript の型定義風にしている話(お試し中)

SmartHR Advent Calendar 2020 の3日目です。

本記事の概要

例えばこういう感じでテーブル設計(物理データモデル)したものを

f:id:gongoZ:20201201192641p:plain

エンジニア含めデザイナーやプロダクトマネージャー(以下、PdM)に共有する論理データモデルは、以下のように TypeScript の型定義風にして共有するみたいなことをやってみている、というお話です。

type UUID = string

type Book = {
  id: UUID
  authorId: UUID
  publishedAt: Date
}

type Author = {
  id: UUID
  name: string
  penName: string | null
}

またはこんな感じ

type UUID = string

type Book = {
  id: UUID
  author: Author
  publishedAt: Date
}

type Author = {
  id: UUID
  name: string
  penName: string | null
  books: Book[]
}

TypeScript 風なので、なんだったらこれでも OK

type 書籍 = {
  id: uuid
  著者: 著者
  出版日: Date
}

type 著者 = {
  id: uuid
  氏名: string
  ペンネーム: string | null
}

補足

  • SmartHR 全体の開発フローとして採用(試用)しているものではありません。個人的な活動です 👍
  • この施策で何が変わったかとかまでは書いてないです。まだ始めたばかりなので 💪

経緯

1. 前提

SmartHR における開発の流れは、ざっくりこうなっています(本当にざっくりです)。

  1. なんやかんやあって、スタート 🏁

  2. 抽出されたユーザーストーリーから、PdM が *1 概念データモデル を作成する

    f:id:gongoZ:20201203003813p:plain

  3. チームメンバーでレビューしていく

  4. 設計していくぞー

  5. エンジニアが 物理データモデル を作成(テーブル設計)する

    f:id:gongoZ:20201201192641p:plain

  6. チームメンバーでレビューしていく

  7. 開発していくぞー

  8. なんやかんやあって、リリース 🎉

今回は 5 〜 6 のお話です。

2. 発端

ある日、とある新機能開発のテーブル設計をチームメンバーに共有する機会がありました。 ERD を見てもらい、共有会は無難に進み、なんやかんやありながらも最終的に GoGo の方針が固まりました。

その過程で、とあるメンバーとこういったやりとりがありました。

👳‍♀️ = 僕
👤 = フロントエンジニア

---

👳‍♀️ 「というわけで、こんな感じのテーブルにしようと思います」

    authors テーブル:
        t.string :name, null: false
        t.string :pen_name
        t.timestamps

    books テーブル:
        t.string :author_id, null: false
        t.datetime :published_at

👤 「null: false ってなんですか?」
👳‍♀️ 「データベースの NOT NULL 的なやつの ActiveRecord::Migration での記法ですね!」
👤 「ついてないやつは Nullable?」
👳‍♀️ 「です!」
👤 「t.timestamps って何ぞや」
👳‍♀️ 「created_at と updated_at を同時に生み出してくれるすごい奴です」
👤 「拝承」

何気ないやりとりでしたが、後日あらためて考えた結果、あまり私の共有の仕方が良くなかったなと思い至りました。

  • Ruby on Rails に(この時点ではまだ)不慣れだったメンバーを含めた共有会で、この見せ方は逆にわかりづらい
    • いずれは慣れていってもらうというのが理想系だが、そもそもスタートに見せる形ではなかった
    • そもそも詳細な実装については、このあとのコードレビューで見てもらうことになっている
    • スタートとしては、まずは認識の誤差を埋めるために イメージしてもらいやすい形 にすべきだった
  • 「どうせこのまますぐコードに写して commit するしな」みたいな気持ちで横着していた
    • どうせ詳細に書くなら SQL で書けば良かった
    • とはいえ、あまり物理層に近い書き方をすると、やはりそれもイメージしづらい形かもしれない

詳細な実装方針とか、言語としての仕様とか、いろいろな作業フェーズで必要な情報は変わってくると思います。 それでいうと、今回の発端となったフェーズでは

今から私たちが作ろうとする機能は、どんなデータを扱うのか

といった、より概念レベルでの、なんというか 身に沁みやすいもの で共有できるといいのだろうなと考えました。

TypeScript の型定義記法を選択した理由

特に深い意図はなくて、単純に「周りにそれを理解できる人が多かったから」です。

元々のきっかけとなった話し相手がフロントエンジニアだったということもあり

👳‍♀️ 「そういえば僕たちは TypeScript を使っています」
👤 「はい」
👳‍♀️ 「↓ こうじゃなくて……」

    authors:
        t.string :name, null: false
        t.string :pen_name

👳‍♀️ 「↓ これならどうよ」

    type Author = {
      name: string
      penName: string | null
    }

👤 「わかりやす! 特に `string | null` あたり」
👳‍♀️ 「なるほど。僕もそう思っていました」
👤 「せやったか」

TypeScript 風で良さそうだな? という気持ちになってきました。


また、デザイナーやPdM も、情報設計を TypeScript 風に記述していたことが判明しました。

新機能追加や改修のための概念データモデルを作成する際にも、既存のテーブル構成に対して積み重ねているため、この時点で既に TypeScript 風になっていると楽してもらえそうだなと考えました。


つまり

f:id:gongoZ:20201203021601p:plain

👳‍♀️ 「みんな TypeScript いけるじゃん! これにしよ!!」

まとめ

(論理)データモデルの共通言語として TypeScript は結構書き心地が良いなと感じました。

気合いが入っている時は図でしっかり書いた方が視覚的にモチベーションが高まりやすいこともあるので、ある程度いい感じに選んでいければと考えています。

今回の試みはまだ試行回数が少ないので何とも言えませんが、これをきっかけとしていい感じになっていけば嬉しい。嬉しい。

*1:"ユーザーストーリーをどのように実現するのか、デザイナーおよびエンジニアと仕様を検討します。概念データモデルの作成や、ワイヤの作成など、作るために必要な仕様の具体化を行います。" https://tech.smarthr.jp/entry/2020/01/23/141628

フォームローラーを使い始めました

f:id:gongoZ:20201027130732j:plain

毎日グリグリして一ヶ月以上経過しました。体の好調度が増した気がします。

※ 使う時はヨガマットを敷いています

経緯

一ヶ月前、会社の Slack ワークスペースでこんな発言をしました。

f:id:gongoZ:20201027130906p:plain

これ以前から、寝起き直後や仕事終わり後の体バキバキ状態をなんとかしたいなと思っていました。 特に肩や首周りは日常的に死んでおり、(最近は更新していませんが)フィットボクシングやリングフィットアドベンチャーを続けていなければ更に破壊されていたのではないかと思えるぐらいです。

そんな中、上の発言後に同僚から「これめっちゃいいですよ」と教えてもらったのが、フォームローラーでした。

amzn.to

「筋膜リリース」というワード自体は何度か耳にしたことがあり、とはいえ「筋膜をリリースってなんやねん」と思ってこれまでは手を出していませんでした。が、せっかくお勧めされたのでこの機会にやってみるかーとやってみました。

効果

ここからは完全に雰囲気の感想です。

  • 肩や首周りの、なんかこう稼動域が広がった気がする
    • 動かしづらいとか、なんか詰まってる感っていうのが柔らいだ
  • 背中がすごいスッキリする
    • 背中こんなに凝ってたのかってぐらい
    • なので、使い始め当初は動かしづらくてそこそこ痛かった
    • 今は気持ちいい
  • 時間はそんなに取られないため、気軽にできる
    • 仕事中に「ちょっと体固まってきた気がするから、ちょっとやるか」みたいな
    • そういう意味ではリモートワークのこの環境も適していたと言えるかも

とりあえず「良き」という感想です。

参考にした動画

「どうやって使えばいいんだ?」「効果的な動きは?」といったことについては、これも同僚から勧められた、以下の Youtube チャンネルが参考になりました。

www.youtube.com

チャンネルの中で、僕が普段のルーチンにいれている奴は以下の奴です。いろいろ合体しているやつなので便利。

www.youtube.com

まとめ

フォームローラーを習慣付けした結果、「それでも肩甲骨が痛くなったら、前日暴食しすぎて肝臓に負担がかかったんだな」って原因の切り分けが可能となりました。

PHPerKaigi 2020 に参加 & register_globals についてトークしました

phperkaigi.jp

経緯

新卒の頃から携わってきた PHP。しかし書かなくなって数年が経過し、そんな僕が PHP にできる恩返しといえば、 register_globals についての記録を後世に伝えることだと日々考えていました。

こんなこともあり、後日 PHPerKaigi の存在を知ったので、Proposal を出してみました。

発表資料

speakerdeck.com

YAPC::Asia Tokyo 2015 で発表した時 の内容と基本的には同じですが、加えて register_globals の歴史みたいなものも記載しました。昔話として読んでいただければ幸いです。

参加者としての感想

さらっと

  • そういえば PHP 系?のカンファレンスに出るの始めてかも
  • ビールがデプロイされる時刻が他イベントよりかなり早い気がした
  • PHPer Kaigi ということで、PHP そのものよりも PHPer がどうやって生きているかみたいな話が多かった
  • 長谷川カスタムバーガー美味しかった
  • トレーディングカードありがとうございます!
  • ゲリラLTで10分ぐらい喋ってる方がいて、後続の人の分が無くなってちょっと残念
    • ゲリラだしちゃんとしたレギュレーションも無かったと思うので、まあそういうものかという感想
  • Tシャツやパーカーは痩せたら着ます

おわり

おつかれさまでした!

インドカレー料理本を買いました

稲田 俊輔「南インド料理店総料理長が教える だいたい15分!本格インドカレーhttps://www.amazon.co.jp/gp/product/B084GJFHV7

会社 Slack に #趣味_スパイス料理 というチャンネル *1があり、そこでは同僚が日々美味しそうなカレーを作っては公開しています。ある日、このチャンネルで今回購入した料理本が紹介されていたので、試しに買ってみました。

本の内容としては

  1. ベースの作成手順(この本では『基本のマサラ』と呼称)
  2. あとはひたすら『ベース + ◯◯』を紹介

というシンプルなものです。とりあえずは最初に紹介されていた鯖水煮缶カレーを作ってみました。

f:id:gongoZ:20200213214833j:plain

スパイスからカレーを作るという体験が久しぶり*2というのもあり、美味しく感じました。本のとおりに作ることができれば美味しいものが出来上がるのだなという気持ちになれてよかったです。

ちなみに昨日作った時は勘でスパイスとかをぶちこんだので、よくわからない味になってしまいました。 反省して計量器具を購入して、まずはしっかり 1g 単位で揃えていきました。計算とは偉大。ちなみにこれ買いました。

https://www.amazon.co.jp/gp/product/B07H55WBWV

これからも時々は作っていこうと思います。

*1:#部活_スパイス探求部という、食べにいく専門の部活もあります

*2:大学時代に研究室でカレーパーティみたいな催しがあり、そこで少しだけやりました。もう忘れました。

Fit Boxing とリングフィットアドベンチャーを始めて3ヶ月が経過しました

リングフィットアドベンチャー Fit Boxing

Fit Boxing のスタンプある場所は、リングフィットアドベンチャーもやっています。

前回(三ヶ月前)はこちら: https://gongo.hatenablog.com/entry/2019/10/01/212238

記録

開始 (10月上旬) 前回 今月 増減 (前回/開始)
98.8 93.6 92.8 -0.8 / -6.0 kg

f:id:gongoZ:20200131234545p:plain:w450

  1. 予定どおり10月で継続記録が途絶えた
  2. そのあとリングフィットアドベンチャーを購入する
  3. 「毎日はもういいから、今度はできる日にがっつりやろう!」の精神で、がっつりやっていくつもりでいた
  4. 続かなかった

というのが2019年末。やはり継続する方を優先させた方がいいな、ということで現在は

  • リングフィットアドベンチャー
    • 運動負荷を減らして(今は23)、最初に「クールダウンしますか?」って聞かれるタイミング(約10分)で終わり
    • ものすごい余裕ある時は10分追加
  • Fit Boxing
    • デイリーは体力強化・全身・10分
    • ものすごい余裕がある時は10〜20分追加
  • これらをセットで

こんなプランにしています。ちなみに体脂肪と筋肉量は下図:

体脂肪 筋肉量
f:id:gongoZ:20200131235647p:plain:w400 f:id:gongoZ:20200131235636p:plain:w400

いい感じのような、あまり変わらないような

体調

  • 問題なし
  • 数値は変わらないけど、体感はなんとなく絞れてる気はする

ネクストアクション

91kg 台!