GraphQL スキーマを図にして、状況をわかりやすくしよう

GraphQL で開発していくと、GraphQL スキーマが膨らんでいきます。また GraphQL スキーマは分割できますが、これを進めるとどのフィールドがどこと関係しているのか、追うのが難しくなってきます。


そこで GraphQL スキーマを図にして追ってみようと思うわけです。図に吐き出してくれるツールとしては Graphqlviz があり、npm でインストールしてターミナルでスキーマを指定してコマンド叩けば簡単に図にできます。
github.com

ただし複雑なスキーマをこれで単純に描画すると凄まじい事になり、例えば GitHub GraphQL API の パブリックスキーマ に対し生成を試みると、
f:id:funnelbit:20220107175344p:plain
これは一部抜粋ですが、これだけでもまさに混雑的リレーションの小宇宙という感じで追うのが不可能です。ちなみに単純に GitHub GraphQL API の パブリックスキーマ npx graphqlviz schema.docs.graphql | dot -Tpng -o graph.png とかすると 100MB の png 画像が爆誕します。

普段開発しているプロダクトのスキーマはここまででは無いにせよ、単純な図で追うのはもはや厳しかったです。そこで現在は GraphQL Voyager というものを使っています。
github.com

こちらは Web アプリケーションのライブラリであり、提供されているコンポーネントを呼び出すとイントロスペクションを fetch してブラウザ上に図を描画してくれます。デザインが工夫されていて見やすいですし、さらに図を押すとハイライトされたり、検索できたり、表示するフィールドを絞り込めたり非常に便利でした。
f:id:funnelbit:20220107181131p:plain

ここにサンプルがデプロイされているので触って遊ぶことができます。
apis.guru


手っ取り早く手元で試すなら、example ディレクトリに行って、fetch している url を書き換えて動かすと良いと思います。
github.com

GraphQL Code Generator の Typescript plugin では strictScalars をオンにすると良さそう

GraphQL ではビルドインされている Scalar type 以外にも Custom scalar type を扱うことがあります。例えば gqlgen では Time という type が用意されています。GraphQL Code Generator で Typescript プラグインを用いてコード生成している場合、この Time のようなものに関しては、どの型としてコード生成するのか設定を codegen.yml に書く必要があります。

gqlgen の Time という type は時刻の文字列を RFC3339 形式で返してくるのですが、これを考えたとき

generates:
    ....
    plugins:
      - "typescript"
      ...
    config:
      ...
      scalars:
        Time: string # Time という Custom scalar type を string としてコード生成する

このような記述をすることになるのかなと思います。

ただし万が一この記述を忘れると Time は any 型としてコード生成されてしまい、型の恩恵を受けられなくなってしまいます。この忘れを防止するのが strictScalars で、これを true にしておけば、コード生成時に scalars オプションにかかれていない scalar type を発見した場合にコケてくれるので書き忘れがなくなります。

generates:
    ....
    plugins:
      - "typescript"
      ...
    config:
      ...
      strictScalars: true # scalars: Time: string の記述を消すとエラーを出してくれる
      scalars:
        Time: string

www.graphql-code-generator.com

NURO光 インターネット開通まで4ヶ月かかった

引っ越しに伴って NURO 光 に申し込んだのですが大変でした。6月下旬に申し込んで、2週間後ぐらいに屋内工事できるとのことで、これは1ヶ月ちょいで開通するかもなと思っていました。しかし現実は甘くなかった。


工事一回目
時間通り業者がやってきましたが「配線の主配電盤(MDF)ってどこにありますか?」と聞かれる。自分も全く知らず、わかりませんと答えたら「探してきます」といって探しに行ってくれました。
ただその後戻ってきて「MDF はわかって屋内工事してみたのですが、線がどうしても引っ張ってこれません。(自分には)無理なので今日は切り上げて次複数人で工事します」とあっさりいわれ、失敗。そこから2週間後に再度工事するということになった。

工事二回目
なんか強そうな二人組みが来てすんなり工事できました。一体なんだったのか。その後屋外工事の予約をする。8月の終わりに来てもらえるようインターネットで予約しましたが、その後連絡があり「予約埋まったので9月にさせてください」とのこと。9月の上旬になる。

工事三回目
9月上旬に工事の人(NTTサイド)がきて工事が始まりました。「やっとネットが使えるぞ!!」と大喜びして待っていると「ちょっと現場まで来てもらえますか」と言われ、何かなと思ったら「開通不可能です」と言われました。線がどうしても通せないと言われ、出来ませんということ。これ以降は NURO 光サイドの判断次第なので、NURO さんからの連絡をお待ち下さい、我々はどうにもできない、と言われて帰っていきました。

工事四回目
どうしたら良いのか数日待っていると NURO から連絡が来て「通線確認というものをやれせてほしい」と言われました。対応は不要なので勝手にやるとのことで、1週間後にきてなんか確認して帰っていきました。会ってないので一体何が行われたのかは不明です。

その後音沙汰なく、調査結果とか知らされないので一体どうなったのかわからず数日待っているとSMSに「工事日の予約をしてください」と連絡が来たのでとりあえず予約しました。この時点で10月末の工事予定です。

NTTはできないと言っていたのになんで工事できるとなったのかわからないのでNUROに聞いてみると「(受付窓口の自分も)把握していない。工事できるかどうかの検討をまだ続けている。実際に工事可能かどうかはいつわかるのか不明です」と言われ、もう祈るしかねえとなって10月末まで待ちました。

工事五回目
工事が来ました。ベテランっぽい感じでした。NTT無理って言ってたし、もう無理なのかなあと思って待ってたら「できました!!」といわれ無事開通しました。やった〜〜

感想
ここまで時間かかるとは思わなかったので、長期戦覚悟で Docomo のホームルーター契約しとくと良かったなあと思いました。自分は Rakuten でしのごうとしましたが、全然電波入らなくてめっちゃ苦労しました。

インターネットが無いと趣味の開発とか娯楽とかが奪われるので大変でした。ただインターネットが無いと夜さっさと寝ようという気分になるので早起きになり健康にはなりました。

javascript の new URL() はスペース、改行コードを受け入れてなかった事にする

new URL(" https://example.com\n\n\n\r ") としてもエラーにならずに、url 文字列だけ抜き出して普通にオブジェクト化できるんですね。知らなかった。良いのかはわからないですけど....

new URL("     https://example.com\n\n\n\r      ")
// URL {origin: 'https://example.com', protocol: 'https:', username: '', password: '', host: 'example.com', …}

他にも無視される文字列あるのかも。

golang だと当然?エラーとなります。こちらは parse 関数ですが。

   _, err := url.Parse("     https://example.com\n\n\n\r      ")
    if err != nil {
        panic(err) // panic: parse "     https://example.com\n\n\n\r      ": net/url: invalid control character in URL
    }

EV車で楽しさを感じた日

EV化がおし進められている昨今。エンジンがモーターになることについて、結構がっかりしている人は多い印象です。自分もそうだったのですが、数年前に電気自動車のトミーカイラZZに乗って完全に印象が変わりました。


ピュアスポーツの名の下に生まれた京都発の純国産本格スポーツカー<Tommykaira ZZ>


踏んだ瞬間にあふれる爆発的なトルクが放つ強烈な加速。怖すぎて全然踏めないと思わせるスピード感。ミニクーパーF56で感じていたシングルターボ192馬力を古臭く感じさせるフィールには驚きを隠しきれませんでした。


やはりモーターの踏んだ瞬間即最大トルクが出る特性と滑らかさは素晴らしいです。一度アレを体験すると、どんなガソリン車でもあのフィールには絶対に敵わないだろうと思ってしまいました。もちろん、トミーカイラZZのような割り切ったマシンだからできることで、通常の航続距離とか考えていくとこういう化け物にはならない気はしますが、モーターが楽しいと感じてしまった衝撃は大きかったです。


誤解のないように言っておくと、エンジン車ならではの魅力は当然あるし僕も好きです。今乗っている車もエンジンのフィールが良いので購入したわけですし。バイクは問答無用で MT に乗ります。モーターにいい音なんてありませんし。ただ EV って、環境のためにやむを得ず移行するみたいな空気感がある気がしていて、自分もそうだったのですが、一度体験すると車好きのためにもあるものだなと実感できるのではないかなと思いました。


航続距離を伸ばすために重いバッテリーとかエンジンを載せないといけないため、即座に手の届く楽しいピュア EV が現れる!というわけにはならないでしょうが、今後現れてくる EV が車好きをはねのけるというのはまったくないと思っており、未来に(勝手に)希望を持っています。


EV シフトしてしまうと MT の存続はもはや時間の問題感がありますが。最近では回生ブレーキを強めるレバーが付いてたりしますが、そういうものを使った新しい操作が今後伸びていくのかもしれません。

www.honda.co.jp

自動車の慣らし運転

バイク乗りからすると、慣らし運転はして当然で、1000km まで走ったらオイル交換って感じです。

一方、4輪の自動車は今の時代もう慣らしは特に意識しなくても良いそうです。全く不要というわけではなく、急な運転をしなければ問題ないですよ、ということらしいです。


www.faq.mazda.com


そして 1000km でオイルを変える必要もない。ヨーロッパ諸国は環境負荷を考えてオイル交換頻度を少なめにすべきという方針があるので、そういう流れもありそう。マツダ公式見解もこんな感じです。NAなのでかなり少ない。


www.mazda.co.jp


例外としてはスペシャルなエンジン載っけている車で、そういうのは慣らしを強く意識する必要があるとメーカが主張しています。例えば GT-R とか。


www.nissan.co.jp


頭からバイク乗りの考えが抜けないので、一応 1000km までは上限3千回転ぐらいで運転しています。今 700km 走ったので、あとちょっと。ただし慣らし距離に達したらオイルとオイルフィルターを変えるかどうかは迷うところです。ディーラの人は今の時代の車では必要ありませんと断言していますし。気持ち早めに変えるぐらいでも良いのだろうか。気になる〜〜

MAZDA3 FASTBACK の三角停止表示板

MAZDA3(FASTBACK) 買って真っ先に導入したのが三角停止表示板です。高速道路で何かあって停車せざるを得ないとき、三角停止表示板を立てる必要がありますが、今日の車には標準で乗っていません。ディーラーオプション品の三角停止表示板は価格が高いので、アマゾンで買って載せました。

一応三角停止表示板にもサイズがあり、MAZDA3 のトランク下には三角表示板が収まるくぼみがあります。ここのサイズを測って購入しました。

f:id:funnelbit:20210818095245j:plain
f:id:funnelbit:20210818095302j:plain
f:id:funnelbit:20210818095325j:plain

買ったのはこちら

ケースのサイズを教えてください。実測で、縦(奥行)、横(幅)、高さ。よろしくお願いします。

このレビューをみて格納できそうだったので購入しました。
実際に積み込んでみた結果がこちら
f:id:funnelbit:20210819134655j:plain
少々余裕がありますが、収まってくれているので良しとしました。

組み立てて見ても問題なかったし大丈夫そうです。とはいえこれが活躍しないことを祈ります。