Swashbuckle.AspNetCore.Swaggerでswagger.jsonのRootPathを変更する

Swashbuckle.AspNetCore.Swaggerでswagger.jsonのRootPathを変更したい

表題の通りの欲求が発生するケースが、エンドポイントをサブディレクトリで分けて追加していくリアルワールドアプリケーションでは発生することがあります。 サブドメインを切ってくれればいいんですが、証明書の管理面倒だぞ!って話になったり、事情は色々です。

UsePathBaseを使ってのRootPathを指定することで、エンドポイント自体のRootPathは変更可能ですが、今度はSwagger.jsonのRootPathを変更する必要があります。

UseSwaggerのSwaggerOptionsのRouteTemplateの頭にサブディレクトリを付与する

個人的にSwashbuckleに関連するConfigureをまとめてるのは以下です。 github.com

UseSwaggerのSwaggerOptionsのRouteTemplateの頭にサブディレクトリを付与するコード例

github.com

app
    .UseSwagger(option => {
        if (swaggerSettings.RouteTemplateSettings.IsOverridable) {
            option.RouteTemplate = $"{swaggerSettings.RouteTemplateSettings.RouteTemplatePrefix}{option.RouteTemplate}";
        }

settingによって切り替えるコードにしているのでswaggerSettings.RouteTemplateSettings.IsOverridableの検査が入っていますが、option.RouteTemplateに、サブディレクトリを付与することで、swagger.jsonのRootPathを変更することが可能です。

次に

  • SwaggerUiのRootPath
  • SwaggerUiからrequestを投げるエンドポイントのRootPath(Swagger a.k.a. OpenApi的にはServersに関するSettings)

の設定を行っていきます。(続きます。)

Manage It! 読書メモ

プロジェクト管理の書籍、久しぶりに読む

Manage It!を読んでの感想とか。

プロジェクト is 何

新しいプロダクトやサービスの作成を目的とする新たな取り組み、もしくは体系的なプロセスを指す。

Done条件は成果の納入。

リスクを伴い、多くの場合、リソースが限られることによる制約を受ける。

プロジェクトマネージャー is 何

上記のリスクとリソースの管理者を指す。

完了が何を意味するかを明確に示し、伝達し、プロジェクトをDone状態に導くことを職務とする。

推進力の把握

プロジェクトによって様々。 機能セットと期日が大事なケースもあれば、品質要件が必達なケースもある。 それらをまず把握すること。

顧客からみたプロジェクトの推進力のリスト

  • 成果(機能セット)
  • リリース期日
  • 品質

プロジェクトの制約条件

  • 利用環境
  • チーム構成の柔軟さ
  • 義務つけられるプロセスがあるか
  • メンバーとその能力
  • 算額

※ 制約条件はあとから変更可能

制約条件によって、プロジェクトの最大規模が決まる。

列挙した要件の中で一番大事なものがそのプロジェクトのドライバー(推進力)。 要件に優先順位をつけて、Top のものがドライバーということ。

 Projectに過剰な制約条件を課そうとするスポンサーに対処する

この項の、「優先順位のリスト化をして、選ばせることが有効なのは相手に迷いがあるケース」というのは自分の経験とも合致する。

工数で割れないものは実現できない。

というのは当たり前なのだけれど、管理業と交渉業は論理とは別の筋肉を使うので難しい。

相手が、希望と、絶望、どちらに金を払うタイプかによって、話を通すときに使う言葉を変えるというのは、リアルワールドではよくやる手段ではある。

が、こういった私のムーブは、正道で対処することを好む人からすると邪道なのだろうなあとも思う。(が、正しいことを伝えて、わかってもらえる人ばかりであるならば、世の中世話はないので、どうしても必要になるなあという感想。)

Thinkpad x1 yoga gen6 を購入した

Thinkpad x1 yoga gen6 の雑レビューとか

タイトルの通りですが、Thinkpad x1 yoga gen6 を購入しました。 www.lenovo.com

購入したのは、Windows10Pro / WQUXGA(UHD+) / Core i7 1185G7 / 32GB ram / 2TB SSD / LTE の構成です。

Lenovoさん、ストレージが2TBにすると+19万とかしてたんですが、GWセールで手が出る価格だったので思い切って2TBを選択しました。

購入に至った経緯

  • メイン端末とバックアップ端末の性能差が開いてきてしまったので、端末の故障時でも仕事に差し支えない状態にしたい。
  • 単純に見ていてx1 yoga gen6 がカッコよかった。
  • 2in1だから、お絵描きタブレットとして払い下げることも可能。

TL;DR

TigerLake世代の2in1ノートが欲しいのであればおすすめ

Cpu

f:id:CreatioVitae:20210512004909p:plain

f:id:CreatioVitae:20210619213650p:plain

TigerLakeは発熱がすごいのでデュアルファンになったと聞いていましたが、実際、benchとか軽く見てみると、最初はめちゃ速だけど、途中から熱の影響もあって、性能が落ち気味になる感じです。

これは、ThinkpadというよりはTigerLake全般に言えるようですね。

一方で私はVisualStudioでの開発が主用途になるので、数分程度、瞬間的にデスクトップPCのCPUと同様のシングルコア性能と、それなりのマルチコア性能があれば必要十分だなあというところです。

IntelさんのCPUは、次のAlderLakeで性能的なジャンプがあると聞いていますが、big.littleをWindows10がどこまで使いこなせるかはまだ未知数です。

TigerLake世代の端末を買うのもよい選択なんじゃないかなーと思います。

Ram

f:id:CreatioVitae:20210512011641p:plain

LPDDR4x-4266の32GB、実際はデュアルチャネルでの接続のようです。(そもそもデュアルチャネルじゃないとIris Xeにならないって本当なのだろうか???)

CPU-ZだとQuadになってるんですが、LPDDR4x-4266での32GBの仕様がCPU-Zにとってイレギュラーなんですかね?(1185G7の仕様を見ても、デュアルチャネルまで)

Storage

f:id:CreatioVitae:20210512012151p:plain

サムスンの980PROが搭載されていました。

gen4のSSDといっても、980PROとか、SN850みたいな、めちゃ速Storageは積んでくれないよなあと思っていたんですが、まさかの980PROだったのはうれしい限りです。

gen4らしいスピードが出ていて素晴らしい。

某所で、2TBにラインナップされているのはサムスンSSDだよ!と、教えていただきました。 知らなくて、端末が到着するまでずっとドキドキしてました😨

雑感

bluetooth接続のマウスだと、プチフリが起きる感じだったので、無線のUSBドングルを差しての運用にひとまずなりました。

bluetoothに関するどこが悪いのかはまだわからないですが、ひとまず無線接続で問題なさそうなのでよかったです。

こういう時、ThinkpadはUSB Aのジャックが2つあるんで楽でいいですね。

Ryzen MobileもよいCPUでしたが、なんだかんだシングルコア性能が高いほうが快適なのでよかったです。

そして16:10のディスプレイはやはり良いですね。

AlderLake、Zen4世代のジャンプに期待しつつ、x1 yogaと一緒にコードを書いていこうと思います。

WIP:VisualStudio2019 16.9 の新機能復習

WIP:VisualStudio2019 16.9 の新機能復習

コピペ時に、不足しているusingを自動で追加してくれる

f:id:CreatioVitae:20210324133758p:plain

上記オプション(赤枠)を有効にすることで利用できる。

平成末期のVisualStudio2019は、ペーストした後にctrl + .(クイックアクション)を押してusingの追加をしていましたが、令和のVisualStudio2019(16.9)はペーストするだけで不足しているusingが挿入できるので、クイックアクションを使う手間が省くことができるようになりました。

;で、object / methodの選択を確定でき、();が入るようになった。

今までは、、new HttpClient();と書く場合、HttpClientを入力候補から選択する際にTabやSpaceを利用していました。 VisualStudio2019 16.9では、これらに加えて;でも確定できるようになりました。

;で確定するメリット

;で確定した場合、HttpClient();まで挿入されるので、();を書く業から人間は解放されます。

Terminalで開く

f:id:CreatioVitae:20210324135310p:plain

開発者用コマンドプロンプト等が使いやすくなりました。 ソリューションエクスプローラーから、ファイルを右クリックして、ターミナルで開くを選択することで、選択したファイルの階層をカレントディレクトリに設定した状態でVisualStudio2019上でターミナルを開くことができます。

dotnet コマンドを発行する際に開発者用コマンドプロンプト等を使うことがありますが、ソリューションエクスプローラーからターミナルを開けるようになったことで、よりカジュアルに使っていけるようになった印象です。