2019年の振り返り

‌ 2020年に入って早1週間が経過しましたが、皆様いかがお過ごしでしょうか。 一年の振り返り!みたいのはあんまりやるつもりがなかったのですが、あまりにもみんなやっていて目につくので、これはやった方が良い物なのか・・・と思い直し、遅ればせながら振り返ってみようかと思います。 1月 そういえば2018年振り返りみたいなブログ書いてないんですが、2019年は心おだやかに生きたいと思っております — nasa9084@某某某某(0x1a) (@nasa9084) January 3, 2019 twitterによると、2019年は心おだやかに生きたいというのが目標だった様子。あまり心穏やかには生きられませんでした。合掌。 そういえば昨年は年明け早々インフルエンザにかかったんでした。 一月はLOCALのイベントに行ったり、YAPC::Tokyoに行ったりしていた様子。ここ半年はカンファレンス/勉強会参加数も減ってきてしまっているので、ここらでちょっと頑張りたいところです。 2月 ONIconをやったり、自作ケーブルを作り始めたり。 gomaconfやcookpadtechconfもこのあたりだったようです。 3月 ペティナイフが欲しい — nasa9084@某某某某(0x1a) (@nasa9084) March 1, 2019 ペティナイフ、ネット上でもいろんな人が「便利!」って言ってて、しかしまぁ三徳で不自由してなかったんですけど、買ってみたら実際メチャクチャ便利で、正直三徳よりペティを使うことの方が圧倒的に多い。 LINE.goというイベントを開催したのも3月でした。 朝ご飯 pic.twitter.com/PLRDDJEOCY — nasa9084@某某某某(0x1a) (@nasa9084) March 4, 2019 ご神体は今も職場の机にまつられています。なんと今は鳥居もついています 4月 皆さん技術書典の進捗どうですか — nasa9084@某某某某(0x1a) (@nasa9084) April 2, 2019 今もまた、技術書典の進捗に追われています。 たいした意味もなく近所のコインランドリーで枕を洗濯した結果、ドラム式洗濯乾燥機がほしくなってる — nasa9084@某某某某(0x1a) (@nasa9084) April 12, 2019 この後勢いよくドラム式洗濯機を買いました。最高。 5月 PyCon mini sapporoが5月だったらしいです。GoConでしゃべったのもこのあたりだったらしい。 改めて。でかい。 pic.twitter.com/zO9TLfdhy8 — nasa9084@某某某某(0x1a) (@nasa9084) May 29, 2019 OSC19doも5末〜6始でしたね 6月 鰹節食べ放題 pic.twitter.com/c6ouIwcHis — nasa9084@某某某某(0x1a) (@nasa9084) June 11, 2019 ところで、まとめを書くのも疲れてきました。 7月 Golang 101を開催したのが7月だったようす。またやりたいんですが、会場が難しいですね。 進捗です pic.twitter.com/cbZGgdeHiA — nasa9084@某某某某(0x1a) (@nasa9084) July 27, 2019 次の技術書典に向けて、これの第二巻を書いています。 ...

2020-01-08 · nasa9084

go-openapi を書き直しています

本記事はGo2 Advent Calendar の20日目の記事です。昨日はyaegashiさんによる、jsonx.go でした。 皆さんはOpenAPI Specification というモノをご存じでしょうか。OpenAPI SpecificationはJSONまたはYAMLでREST APIを表現するための仕様で、現在バージョン3.0.2 が最新です。いわゆるSwagger の後継で、バージョン1系、2系がSwagger、3系以降がOpenAPI、ということになっています(Swaggerなら聞いたことがある/使っているという人も多いのではないでしょうか)。 OpenAPI Specificationは人間にも機械にも(比較的)読みやすい仕様書として、コード生成や、ドキュメントページの生成に使用することが可能です。 個人的には専らコード生成に使用しており、Go言語向けの実装としてgithub.com/nasa9084/go-openapi (以下go-openapi)を実装・公開しています。 go-openapiは2017年ごろから細々と実装を続けており、(多分)二番目か三番目には古いと思われるOpenAPIのGo実装です。 基本的にはただひたすらOpenAPIのオブジェクトをGoの構造体として定義、値のバリデーション関数を用意しているといったもので、特別な機能はほとんどありません。 YAMLのパーサも、go-yaml/yaml を使用しており、自前では実装していません。 そんな中、@goccy さんが、encoding/jsonとコンパチなインターフェースを持ったYAMLパーサを開発した、という話を耳にし、これを機に、とgo-openapiの実装を一から書き直し始めました。 もともと、パースは完全にgo-yaml/yamlに依存しており、Unmarshal系のメソッドも実装していなかった(途中から全部書くのはつらかったので・・・)ため、一部バリデーションに必要な関数を埋め込んだりもできなかったので、書き直したいとは思っていたのです。 現時点ではまだマージしておらず 、書いている途中なのですが、大きな変更点として次の様なものがあります。 もともとパブリックだったフィールドをすべてプライベートに変更し、ゲッターをはやした 各構造体に対応するUnmarshalYAML()メソッドをすべてコード生成するようにした YAMLパーサはgithub.com/goccy/go-yaml に乗り換えた rootオブジェクトを各構造体に埋め込むことで、バリデーションをとりやすくした 今後はよりコード生成に便利なメソッドを追加していきたいと思っています。 時間の都合で今日はここまで。技術的な話が全然無い記事になってしまった・・・

2019-12-20 · nasa9084