WEB+DB PRESS Vol.117

いつもの読書メモ。

特集1 実践投入 TypeScript

TypeScript は JavaScript のスーパーセットで、JavaScript コードはそのまま TypeScript でも有効なコードになるため、プロジェクトの途中からでも導入しやすい。実際、自分が関わったプロジェクトは、新規に TypeScript で書き始めるプロジェクトより、既存の JavaScript プロジェクトに TypeScript を導入する方が多かった。この導入しやすさが、数ある AltJS の中で TypeScript が頭一つ抜き出た要因として大きいと思う。

特集2 AWS/GCP コスト削減

自分が使っているクラウドMicrosoft Azure だけど、利用を確約することで割引を受けられるリザーブインスタンスや、必要なときに必要なリソースだけ使用するオートスケーリングなどは、Microsoft Azure にも同様のものがある。本特集のコスト削減テクニックの多くは適用できそうだ。

特集3 最新 Windows 開発環境

WSL2 で Docker が動かせるようになり、さらに Visual Studio Code の Remote Develpment 機能でシームレスに Docker コンテナ内で開発・デバッグできる。Web 開発環境として、Windows が盛り返してきた。

さらに Microsoft には TypeScript があるし、GitHub と npm も支配下に置いているし、Web 開発において重要な部分を抑えた印象がある。まるでオセロの四隅のように。

WEB+DB PRESS Vol.117

WEB+DB PRESS Vol.117

  • 発売日: 2020/06/24
  • メディア: Kindle

Swashbuckle.AspNetCore.Cli と OpenAPI Generator を使って Web API のクライアントを生成する

はじめに

Swashbuckle.AspNetCore を使うことで、ASP.NET Core MVC で実装した Web API に Swagger UI を組み込める。

docs.microsoft.com

Web API の動作確認をする程度ならこれで十分だけど、せっかく Swagger/OpenAPI を使うなら、クライアントのソースコードも生成したい。当然、自動化も。

Swashbuckle.AspNetCore.Cli と openapi-generator を使えばできそうなので試してみた。

Swashbuckle.AspNetCore.Cli

Swashbuckle.AspNetCore.Cli を使って swagger.json を生成する。

インストール

Swashbuckle.AspNetCore.Cli .NET Core 2.1 SDK 以降で利用可能。.NET Core グローバルツールとしてインストールできる。

dotnet tool install -g swashbuckle.aspnetcore.cli

.NET Core 3.0 SDK 以降なら、.NET Core グローバルツールだけでなく、ローカルツールとしてもインストールできる。今回はこちらを使用。

dotnet new tool-manifest
dotnet tool install swashbuckle.aspnetcore.cli

swagger.json 生成

dotnet swagger コマンドで swagger.json を生成する。

dotnet swagger tofile --output [output] [startupassembly] [swaggerdoc]

[output] には swagger.json、[startupassembly] は Swashbuckle.AspNetCore を組み込んだ Web APIアセンブリのパス、[swaggerdoc] には Startup 内で SwaggerDoc メソッドに渡している名前(ここでは "v1") を指定した。

openapi-generator

Swashbuckle.AspNetCore.Cli を使って出力した swagger.json からクライアントのソースコードを生成するには、openapi-generator を使う。

インストール

openapi-generator の CLI は npm でインストールするのが一番簡単。

npm install @openapitools/openapi-generator-cli -g

クライアントのソースコードを生成

TypeScript 版のクライアントのソースコードを生成してみた。

npx @openapitools/openapi-generator-cli generate -i swagger.json -g typescript-axios -o .\lib

-g にはソースコードの生成につかうジェネレーターを指定する。サポートしているジェネレーターは下記ページを参照。

openapi-generator.tech

自動化

Web API プロジェクトのビルド後イベントのコマンドラインに下記を追加。

dotnet swagger tofile --output $(OutDir)swagger.json $(TargetPath) v1
npx @openapitools/openapi-generator-cli generate -i $(OutDir)swagger.json -g typescript-axios -o $(OutDir)lib

これで Web API プロジェクトをビルドすると、自動で TypeScript のクライアントライブラリが生成されるようになった。

まとめ

Swashbuckle.AspNetCore を組み込んだ Web API のプロジェクトに対して、Swashbuckle.AspNetCore.Cli と openapi-generator-cli を使うことで、swagger.json 生成とクライアントソースコード生成がコマンドラインのみで行えるようになり、自動化できた。

ゴールデンゴールド(7)

フクノカミから分裂して生まれたカネノカミとヒトノカミ。三体協力して寧島の発展を加速させるかと思いきや、なんか対立しているし。寧島の発展も、加速はしているけど暴走ぎみ。カネノカミは島外から怪しい不動産屋を呼び寄せ、ヒトノカミは島のキャパ超えて人を集めまくっている。

そんな暴走の果てに最悪の結末!?早過ぎない?って思ったら夢だったか。 フクノカミが見せた予知夢っぽいな。次巻ではフクノカミと琉花が手を組みそう。このマンガの結末はバッドエンドだろうなぁと思っていたけど、意外とハッピーエンドありえるのかも。

アラフォー

早いもので 2020 年も半分が終わろうとしている。 そして 37 才になってしまった。 37 才はアラフォーらしい。 自分の感覚としては、アラウンドなんとかは±2ぐらいかと思っていたので、世間と感覚がズレているんだろうか。 まぁいい。年齢なんて記号だ。

誕生日がだいたい 1 年の中間地点に位置している。 これは半年を振り返るには良い機会なので、振り返り、 というか正月に設定した OKR の進捗を確認してみようかと思う。

  • 個人開発
    • Write code every day
    • プロダクトを 2 つ以上リリースする

個人開発では、年明け早々、GitHub Issues のクライアントアプリ IssueHub のソースコードGitHub で公開した。 去年に続き、平日はプライベートでコードを書けている。 Xamarin.Forms 製品のアプリをもう一つ、あとは Google Play ストアで公開するだけの状態まで持ってきているので、 そろそろリリースしたい。

  • 英語
    • Study english every day

Duolingo をほぼ毎日やっている。うっかりやり忘れた日が 1〜2日あるくらい。今は英語コースの2周目に突入している。 5周終わった段階で、どれくらいの英語力になっているか試してみたい。 あとは、英語のリスニングとして、Podcast で英語の番組をいくつか購読している。 英語の勉強法で海外ドラマを勧めたりする記事はよくあるけど、見たい海外ドラマは無いので、 代わりに英語の Tech 系 Podcast を聴いている。 会話は全然聞き取れなくて、知っている単語を拾うので精一杯という段階。先は長い。

  • コミュニティ
    • Fukuoka.NET
    • JXUG
    • ふくあず

1 月に Fukuoka.NET 参加しようと登録したはいいものの、インフルエンザにかかってしまいキャンセル。 その後は新型コロナの影響で、勉強会やもくもく会は開催されないか、開催されるとしてもオンラインになってしまった。 家に仕事部屋があるわけではないし、小さい子供がいるから、Teams や Zoom でのオンライン参加は難しい…。 コミュニティ活動は今後どんな形に変わっていくんだろうな。少なくとも、新型コロナ以前と同じはありえないだろうし。

2020 年後半、コミュニティ活動は今年いっぱい難しそうなので、その分のリソースを個人開発と英語に投入するとしよう。

三体

Rebuildで絶賛されていた『三体』が気になったので購入。 三体は三部作で、二部の日本語翻訳版がちょうど発売されたばかりだ。 小説を読む習慣がない上に、SF を読むこと自体初めてだけど、 頭から雑念を追い出して読むことに集中できた。 瞑想に近い感覚。 読書はストレス発散に良いというのも頷ける。

この三体、最初はマトリックスみたいな外の世界の話かと思っていた。 科学的にありえない怪現象〈ゴースト・カウントダウン〉なんて、絶対宇宙の外側からの干渉でしょ、って。 外は外でも地球の外、異星人とのファーストコンタクトものだったとはなぁ。 物語が進むにつれてスケールが、国や地球、銀河の枠を超えていく。 そして、謎が次々と明らかになっていった。 ゴースト・カウントダウンの正体も。

物語のテンポがあまりに良すぎて、1日1章ずつゆっくり読み進めていくつもりだったのに、 うっかり一気に読み終えてしまった。誤算だ。 積読が多いのですぐに続きを、とはいかないけど、二部以降も必ず読もう。 ただ、科学技術用語が目白押しで、自分はソフトウェアエンジニアなので普通に読み進めることができたが、 SF を読み慣れているとかでないと挫折しそうで、家族には勧めづらいな。

三体

三体

nico

六本松にある福岡市科学館で図書館の本を受け取ったついでに、nico でケーキを買って帰った。

チョコケーキは、キャラメルクリームのほろ苦さとチョコレートクリームの濃厚な甘さが絶妙にマッチしていて美味だった。この手のケーキでは今のところ一番かも。最後まで飽きずに味わえる一品。

ピスタチオとチョコのタルトは一目惚れして購入。香ばしいタルトにピスタチオ、そしてチョコレートが合わないわけがない。中にベリーソースが仕込んであって、程よいアクセントになっていた。

子ども用にシュークリームも購入。注文を受けてからカスタードクリームを入れるスタイルなので、シューはサクッとしたまま。いつも買っているお気に入りの店のシュークリームと甲乙つけがたいみたいだった。

お値段はちと可愛くなかったけど、味には満足。nico 期待以上だった。他にもまだ気になるケーキはあったので、ぜひリピートしたい。それにしても、九大跡地が再開発されて、六本松駅周辺はいい感じだな。住みたいくらいだ。

関連ランキング:ケーキ | 六本松駅桜坂駅別府駅

ぼくたちは勉強ができない(17)

17 巻でぼく勉はうるかエンド。 3人娘のうち、想いの強さは誰が上というのはないけど、 想っていた時間の長さを考えると、やはり選ばれるならうるかだろうなと思っていた。 というか、うるかであってほしかった。 成幸も、父親が亡くなって立ち直れたのはうるかのおかげのようだし、 うるかも再び水泳に打ち込めるようになったのは成幸のおかげだった。 お互いのこんなエピソード見せられたら、うるか以外ありえないよなぁ。

これで物語はいったん区切りを迎えたわけだけど、 まさかのマルチエンディング方式で、 次は理珠ルート。 自分は3人娘よりは先輩と先生を推していたので、 この2人のルートが待ち遠しい。 まだしばらく楽しめそうだ。