布団の中にいたい

Elasticsearchいじったり、Androidアプリ書いたり。最近は数学の勉強が楽しくなってきました。

「インタフェースデザインのお約束」を読んだ

ツイッタークックパッドの方が紹介されていて、エンジニアにもおすすめということだったので読んだ。

内容は副題の通りにUXを実現するための101のルールについて概説している本なのですが、なぜだめなのかをはっきり説明してくださっていてわかりやすいことに加えて、101個それぞれがどこかで体験したことあるなというもので共感しながら読むことができました。あとかなりはっきりした口調で書かれているので読みやすかったです。

個人的にはフォームの章は読んでいてとても面白くて、「あー、あのサイト確かに使いづらい」とか「確かにあれは便利だった」というようなことが多々あったので一読の価値ありだと思います(気になった項目のタイトル書きたいんですが、項目のタイトルだけで内容が分かるので著作権的に書いていいか不安なので書きません)

あと、まえがきで著者の方が

私は常々、自分はデザインにかけては純粋主義者だと公言している。

と書かれている通り、読んでいてユーザーにとって不要であるものについてはなるべき削ぎ落とそうという意思が非常に感じられます。そのため読んでいる途中で「あの実装は会社都合で仕方がなかったんだ。。。」みたいな箇所が少々あって申し訳ない気持ちになりました。

まとめ

私自身はバックエンドとインフラ周りを主に触っているエンジニアなので、あまりデザインについてはよく分からず、アプリを使ったときは「なんか使いやすい」「なんか使いづらい」程度の感想しか持っていなかったのですが、「インタフェースデザインのお約束」を読んで、デザインとして何があったから使いやすいと感じたのか、または使いにくかったのかについて思うきっかけになったかなと思います。

デザイナーの方はもちろんエンジニアでもそういった視点を持って開発に望んだほうがコミュニケーションも円滑になるので気になる方は読んでみると良いかと思います。

おまけ

twitterでどういう意見があるかなと思って検索してたんですが、全く同じ感想を持ったツイートがあったので紹介

gqlgenでgraphql schemaのファイルを分割する

何か新しいことをやってみようとGraphQLの勉強をし始めていて、まずは手慣れている言語で触ってみようということでgolangのgqlgenを触ってみています。

gqlgen自体はドキュメントも豊富なので軽く触ってみている分にはお手軽なのですが、一つのファイルに全て書くのは嫌だなと思って色々調べてみたところ普通に分割できたのでご紹介。

そもそもschemaの分割自体はgqlgenのドキュメントにも明示的に書かれていて、以下のようにgqlgen.ymlを修正します。

gqlgen.com

schema:
- schema.graphql
- user.graphql

そして分割された側のschemaでQueryとMutationをextend(subscriptionはまだ触ってないのでよく分からん)すればgqlgen側でよしなにやってくれます。

// user graphql

extend type Query {
 // ...
}


extend type Mutation {
 // ...
}

ただそうなると大本になるQueryとMutationはどうやって定義したらいいのだろうと思っていたら、空のままで書くだけでも問題ないようでした。

github.com

なので以下のように書いて設定ファイル側で両方読み込むようにしてやれば一応は色々生成できました。

schema.graphql

type Query

type Mutation

user.graphql

extend type Query {
// ...
}

extend type Mutation {
// ...
}

まとめ

意外と簡単にschema分けられたのでだいぶ楽でした。GraphQL自体はまだほとんど触れられてないのでもう少し色々試してみようかと思います。あとフロントも。

2020年の目標

あけましておめでとうございます。本年もどうぞよろしくお願いいたします。

年明けから一日ほど立って、ぼんやりと去年と一昨年について思い出していたんですが、両方とも自分の学びにつながることはあまりできなかったように思います。

技術関連についてはできることは確かに増えたし、継続的に開発する上で設計を考慮した上で進めるみたいなことも特に意識しなくてもできるようになってきたのですが、自分自身で何か満足した学びが得られたかと言われると何とも言えないなと少々反省しています。特に去年は仕事以外の時間は療養もしくは副業に当てていこともあって、新しい技術のキャッチアップがあまりできなかったこと・自分の好きな勉強に時間を当てられなかったことが主な原因だろうとは思っています。

英語については少しだけとはいえ、勉強の時間を明確に取っていたのでなんとなく伸びているような感覚はありますが今年が勝負ですかね。

このブログ自体は殆ど更新できていないので、今年はインプット増やしつつブログも書きたいと思います。

目標

雑多に書きましたが今年の目標は以下で。

  • 仕事関連の本を月5冊程度読む
    • 仕事関連以外の本を含めるとかなり読んでいるが、仕事関連の本はあまり読んでいないので読む
  • TOEIC 720点
    • 勉強はしつつも受けてなかったのでとりあえずの目標
  • AtCoderやってみる
    • 競プロ自体に興味はあるものの時間的に合わない(開催時間にはだいたい寝てる)ので、あまり参加していなかったが今年は自分のスキルアップも含めて挑戦する
  • 学んだことのアウトプットを継続して行う
    • 自分の興味のあることについてのアウトプットをブログでもいいし、外部発表でもいいので形にする。できればそれ経由で仕事がほしい。

終わりに

ざっと目標を書いてみたものの忘れずにやること自体が目標なのでだいぶ緩めに設定しています。今年の年末に笑顔で振り返りができるといいな。

今年のふりかえり

2019年もあと数日で終わりので今年の振り返りです。

以下去年の振り返りです。

asahima.hatenablog.jp

覚えてる範囲の出来事は以下です

  • 病院通い
  • 副業
  • 英語

病院通い

今年一年は体調を崩してばかりの一年でした。年始にインフルエンザにかかったことから始まり、別で色々あって秋にちょっとした手術とアレルギー発覚、冬にもう一回手術と病院にお世話になりっぱなしな状態でした。結局年始から週2,3のペースで病院に通うような状態で他のことになかなか時間をかけられない状態でした。

現在はだいぶ落ち着いているので来年はもう少し活動的に動ければと思います。

副業

前年より貯金はできるようになったものの相変わらず金欠だったので空いている時間にちょこちょこ副業をしていました。基本的にはバックエンド(Rails、Laravel)の開発で、空いていない場合についてはフロントエンド(Vue、React)についてもお手伝いさせていただいていました。私自身の稼働が取れそうにない場合は設計の相談などを引受させていただいていました。

ただ途中から副業の時間を取る事自体が難しくなってしまったので収入を増やすことができず。来年はできること増やしつつ、副業も増やしていきたいです。

英語

春頃に英語のコーチングの方についていただいていました。会話についてというよりは英語の勉強の仕方であったり、私の苦手な部分について指摘してもらったりみたいなことをしていただいていました。個人的に受けてよかったなとは思うものの現在も続けられているわけではないのでどうしようもないです。

まとめ

前年の振り返りでは「自己投資の1年にする」と書いていますが、自身の体のメンテナンスであったり英語であったりという意味では頑張れたのではないかと思います。というか前年も病院通いだったんですね。。。今年で概ね治ったと信じて、来年は本業・副業問わず仕事に関わることについて投資できればよいなと思います。

細かい目標はまた年始にでも書きます。

grpc-goを使った際のヘルスチェック

grpcを使ったアプリケーションを作る時にヘルスチェックをどうしようかと思って色々調べたのでメモ。

grpcでヘルスチェックを行う場合、公式にかかれているGRPC Health Checking Protocolを使うと良さそうです。

https://github.com/grpc/grpc/blob/master/doc/health-checking.md

上記のページで記載されているヘルスチェック用のサービス定義自体は非常にシンプルでリクエストを送ると、サーバーのステータスを返すだけのものになっています。

自身でこのサービスを定義して利用してもいいのですが、grpc-go自体にヘルスチェック用のサービスから吐き出されたファイルを含んでいるのでそちらを使うだけで問題ありませんでした。

簡単に使うと以下のような感じ。

import (
    health "google.golang.org/grpc/health"
    healthpb "google.golang.org/grpc/health/grpc_health_v1"
)

func main() {
    listenPort, err := net.Listen("tcp", ":20001")
    if err != nil {
        log.Fatalln(err)
    }
    server := grpc.NewServer()

    healthpb.RegisterCatServer(server, health.NewServer())
    reflection.Register(server)
    
    if err := server.Serve(listenPort); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

加えてGRPC Health Checking Protocolに従うことで、grpc-ecosystemにあるgrpc_health_probeを使うことができます。

https://github.com/grpc-ecosystem/grpc-health-probe

このコマンド自体もgoで書かれており、内部でgrpc-goのhealth.pb.goを読み出して利用しています。

grpc_health_probeをサービスのヘルスチェックの中に組み込めば完了です。

async/await で複数のAPIを非同期に処理する

一つの画面で複数のAPIを叩く時にだいぶ遅くなっていてハマったのでメモ。

最初はだいたい以下のように書いていたのですが、この場合だとrequest1の処理が完了 → request2の処理というように非同期で処理する意味があまりない形になっていました。

async function sample() {
    await request1(arg1);
    await request2(arg2);
}

なんとかならないかと思っていた所、async/awaitはPromiseを返すということがわかったので、Promise.allですべて実行する形にしてすべてが終了してから次の処理に進む形にした所、ある程度早くなりました。

Promise.allのドキュメントは以下。

Promise.all() - 複数のPromise関数を実行し、全ての結果を得る | JavaScriptリファレンス

変更したコードはだいたい以下のような感じ。

async function sample() {
  const reqs = [{
    request: req1
    args: arg1
  },{
    request: req2,
    args: arg2,
  }]

  await Promise.all(reqs.map(req => req.request(req.args)))
}

2018年のまとめ

今年も後数時間で終わるのでざっくりとした今年の振り返りをしようと思います。

主な出来事はだいたい以下の通り。 - 勉強会で久しぶりのLT - 転職 - 副業開始

勉強会で久しぶりのLT

学生の頃はちょっとした勉強会でたまにLTをしていたりしていたのですが、社会人になってほとんど勉強会に参加もしていませんでしたし、ましてやLTなんて全くしていませんでした。LTをすること自体を目的化してもいなかったので特段何かあるかわけではなかったのですが、社外のエンジニアと交流する機会を作りたいと思って登壇してきました。以下がその時の資料。

speakerdeck.com

goでOSSにコントリビュートしていきましょうというお話で、go歴浅めの人でもさっくりできる例をいくつか紹介しました。LT後に参加者の方から「私もコントリビュートしてみたくなりました!」と言われて少しうれしくなりました。

転職

実家の都合で急遽お金を稼がないと行けないのでまた転職しました。給与自体を上げることができればよかったんですが、会社の給与水準的に無理そうだったので交渉もあまりしないで早々に退職しました。前職自体は今でも最高の勤務環境だったのであまりやめたくなかったのですが今回ばかりはしょうがなく。

ちなみに転職して給与はそこそこ増えました。

副業

前述の通り、急遽お金が必要になったのと、大学に入り直そうと思っているので貯金するために副業をはじめました。周囲の人から「副業は休日が潰れるからしんどい」「休まる時間がない」と聞いていたので戦々恐々としていたのですが、いざやってみると普段あまり触らない技術について暇な時間に触れるのでとても楽しいです。加えて目的を達成するためにコードを書いているので自分の糧になっていると強く感じていることもあって満足度が非常に高いです。今の案件が終わるまでに次の案件を見つけられればいいな。

まとめ

これ意外でも詳細は書かないですが病院に通い詰めだったりで色々あった今年ですが概ね楽しくやれたかなと思っています。ここ数年は生活するだけでいっぱいいっぱいだったこともあって自分への投資を怠っていたように感じるので来年はちょっと我慢して自己投資の一年にしようかと考えています。合わせて自身の興味が分散していることも少々気になっているので、やることを選んでいこうかと思います。