TsukuCTF2023 writeup

# はじめに
12/09~12/10 に開催されたTsukuCTF2023にチーム"SabaNoMisoni"で参加しました。
順位は36位(7,689 points)。上位10%に入れませんでしたが、とても楽しいCTFでした。

<strike>次の日から平日という現実から目を背けるために</strike> 運営の皆様へ恩返しをと思い、OSINT限定・品質無担保なWriteupを初投稿します。
Writeupの順序は点数順です。低い方から順に記載しています。
※一部、問題の画像がUploadできなかったため、別形式にて添付しています。

# OSINT
## castle
>この前、お城に行ってこの写真を取ってきたんだ!
どこにあるかわかるかい?
フラグのフォーマットは、TsukuCTF23{緯度_軽度} です。 小数点は第三桁まで有効とします。
![castle.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/a8840871-2253-43e2-b521-8294897bab82.jpeg)

Googleレンズを使うと、すぐに答えが得られます。
姫路の太陽公園にある白鳥城とわかるので、GoogleMapから座標を取得して回答しました。
- [x] Flag:TsukuCTF{34.886_134.630}


## eruption
>つくしくんは旅行に行ったときに噴火を見ました。噴火の瞬間を実際に見たのは初めてでしたが、見た日付を覚えていません。
つくしくんが噴火を見た日付を写真の撮影日から特定して教えてください。
撮影場所が日本なのでタイムゾーンはJSTです。フラグの形式は TsukuCTF23{YYYY/MM/DD} です
![eruption.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/aa5b44dd-0e30-e0f3-4419-2b9131da1212.jpeg)

こちらもGoogleレンズで検索すると、ほぼ同じ画像が出てきました。(imageの情報に、日付が入っているのでその日付を入れても正解です)
- [x] Flag:TsukuCTF{2022/01/28}
## location_for_what
>とある場所を友達と探索していると、「ここ、何かの映画の聖地だった気がするけど、名前忘れちゃった......」とのこと。
シュッと特定して教えてあげよう!
Flagの形式は TsukuCTF23{映画のタイトル} です。

瞬殺でした。
- [x] Flag:TsukuCTF{言の葉の庭}
## green_bridge
>この写真が撮影されたのはどこですか...?
Flagフォーマットは TsukuCTF23{緯度_経度} です。
端数は少数第4位を四捨五入して小数点以下第3位の精度で回答してください。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/f56d1253-fb56-3e52-df22-c2a161904400.png)

こちらもGoogleレンズを使って、橋を特定しました。
こちらの[旅ブログ](https://ameblo.jp/renne-bright/entry-12825519448.html)から、"もみじ谷大橋"と特定できたため、GoogleMapの航空写真とストリートビューを駆使して、座標の特定をしました(ガードレールの切れ目などを考慮し座標を微調整しました)。
- [x] Flag:TsukuCTF{36.956_139.880}

## perfume
>とある施設でいろいろな香水を見かけたが、施設の場所が思い出せない。
この施設の場所を調べ、教えてほしい。
フラグはTsukuCTF23{緯度_経度}であり、小数点第三桁まで有効である。![perfume.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/143d404d-77b8-117c-bf8a-dae61f167ba1.jpeg)


こちらもGoogleレンズを使いました。中央のガラス容器と同じ容器が映った写真が複数出てきました。それらが撮影された場所"大分香りの博物館"の座標を入力しました。
- [x] Flag:TsukuCTF{36.956_139.880}

## tsukushi_estate
>つくし君が写真に写っているビルにオフィスを構えたいらしいのだけど、築年数が少し心配......
つくし君の代わりに調査してください!
Flagの形式は TsukuCTF23{築年_月} です。
例えば、2022年3月に出来たビルであれば、 TsukuCTF23{2022_03} になります。
![tsukushi_estate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/cb05f6cd-f638-cd70-c253-92ecc7328d35.png)


Googleレンズにかけてみたものの、あまり良さげなものが得られなかったため、"つくし不動産　ビル　入店"でGoogle画像検索をしました。すると[ほぼ同じ画像](https://www.athome.co.jp/rent_office/6978084503/)がヒットしたため、そのビルの築年数を入力しました。
- [x] Flag:TsukuCTF{1983_03}

## travel_with_tsukushi
>旅が好きなつくしくんは、空港の写真からそれがどこの空港かすぐにわかります。
つくしくんからの挑戦状!
これがどこの空港かわかるかな?
Flagフォーマットは TsukuCTF23{空港の3レターコード(IATA)} です。![airport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/0a6e69f9-380f-4bcc-dc0a-61a6a58f8c46.png)


こちらもGoogleレンズ。Googleレンズは偉大です。
[こちらのサイト](https://4travel.jp/travelogue/11772716)がヒットし、この空港のIATAを入力しました。
- [x] Flag:TsukuCTF{KUL}

## kiZOU
>ここは日本で一番のリゾート地!少し歩くと目の前に素敵な像が見えたから写真を撮ったつもりだったんだけど、見返したら端っこしか写ってない!困ったなぁ、この像についてもっと知りたかったんだけどなぁ。僕の代わりにこの像について調べてくれないか?
フラグ形式は TsukuCTF23{像を寄贈した人物の名前} です。![image(1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/8bd1eaba-c568-2a7a-d4a8-c5af75565880.jpeg)


このお店は、"au Style Naha"であることが分かります(画像を拡大してみると右側にあります)。
また、検索をすると、このお店は"パレットくもじ"にあることが分かります。GoogleMapのストリートビューで確認すると、シーサーがおかれていることが分かります。![kiZOU_streetview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/84297b60-e8ea-e3ed-6924-1750b3a50941.png)

Google検索で"パレットくもじ　シーサー　寄贈"など調べていると、とある[Xの投稿](https://x.com/kintaro11111/status/1082234341361504256?s=20)に行きつきます。そこに書かれている寄贈者名を入力しました。
- [x] Flag:TsukuCTF{上原清善}

## big_statue
>大きなドリアンだ!どこにあるんだろう?? フラグの形式は TsukuCTF23{緯度_経度} です。例えば、この像が東京の渋谷駅にある場合、フラグは TsukuCTF23{35.6580_139.7016} となります。![statue.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/4398cc22-9bc7-0cac-971d-164d0bf3fba1.jpeg)

この問題は、easyにしては少し難易度が高いように感じました(私の解法がストレートではないからだと思っています)。

まずは、Googleレンズを使いましたが、ヒットせず。検索エンジンをBingに変更しても変わらなかったため、像の上にある5文字 "利陞 榴莲王"で検索しました。
そうすると、"[Mỹ Thuật Tân Việt](https://mythuattanviet.com/mo-hinh-trang-tri-decor-bang-mut-xop-va-nhua-composite/)"社の[この画像](https://www.bing.com/images/search?view=detailV2&insightstoken=bcid_r2QS7cSbPmkGzQ*ccid_ZBLtxJs%2B&form=SBIIRP&iss=VSI&sbisrc=ImgPicker&idpbck=1&sbifsz=3024+x+4032+%c2%b7+109.83+kB+%c2%b7+jpeg&sbifnm=statue.jpg&thw=3024&thh=4032&ptime=348&dlen=149952&expw=1109&exph=1477&selectedindex=0&id=0D00139BCCB3A743B71A3000EB80DEA0FDB36FD6&vt=2&sim=15,0&thid=OIP.nrjf3QISFUd39y8rtkKXnwHaJ3&mediaurl=https%3A%2F%2Fth.bing.com%2Fth%2Fid%2FR.9eb8dfdd0212154777f72f2bb642979f%3Frik%3D1m%252bz%252faDegOsAMA%26riu%3Dhttp%253a%252f%252fmythuattanviet.com%252fwp-content%252fuploads%252f2022%252f11%252f7ad1b5e01594d0ca8985-1.jpg%26ehk%3D0nmmKYGmwcEGQfbAkI%252bnI9z7zuXupZPG4l1WSFFLAEA%253d%26risl%3D%26pid%3DImgRaw%26r%3D0&pivotparams=insightsToken%3Dbcid_r2QS7cSbPmkGzQ*ccid_ZBLtxJs%252B%26imgurl%3Dhttps%253A%252F%252Fth.bing.com%252Fth%252Fid%252FR.9eb8dfdd0212154777f72f2bb642979f%253Frik%253D1m%25252bz%25252faDegOsAMA%2526riu%253Dhttp%25253a%25252f%25252fmythuattanviet.com%25252fwp-content%25252fuploads%25252f2022%25252f11%25252f7ad1b5e01594d0ca8985-1.jpg%2526ehk%253D0nmmKYGmwcEGQfbAkI%25252bnI9z7zuXupZPG4l1WSFFLAEA%25253d%2526risl%253D%2526pid%253DImgRaw%2526r%253D0%26%26cal%3D0.05%26cat%3D0.05%26car%3D0.95%26cab%3D0.95%26ann%3D%26hotspot%3D&ccid=nrjf3QIS&simid=607990769248119385&ck=2F46882752CA3608C0F731925492CB06)がヒットしました
(注:検索結果の画像にリンクされているサイトで当該画像を見つけることができなかったため、Bingの検索URLを記載しています。)

この画像は問題の画像の"反対側"から撮影されたと推測しました。これ以外の手がかりがないため、検索でヒットした画像の建物の上部にある文字"SEAH CONSTRUCTION"で再度検索しました。

この建物は、シンガポールにある"Seah Construction Pte Ltd"のビルであると特定できました。Googleストリートビューで現地確認をして、同じ場所であると自信が得られました。([Google Street View](https://www.google.com/maps/@1.3622977,103.8873116,3a,75y,337.8h,103.04t/data=!3m7!1e1!3m5!1sj7Ntm2V35z5ZM9_CTMfzzg!2e0!6shttps:%2F%2Fstreetviewpixels-pa.googleapis.com%2Fv1%2Fthumbnail%3Fpanoid%3Dj7Ntm2V35z5ZM9_CTMfzzg%26cb_client%3Dmaps_sv.tactile.gps%26w%3D203%26h%3D100%26yaw%3D227.69019%26pitch%3D0%26thumbfov%3D100!7i16384!8i8192?entry=ttu))
![statue_streetview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/196c7183-5f90-fe80-db31-9573e657d6db.png)
最後に座標の調整をして回答しました。
- [x] Flag:TsukuCTF{1.3623_103.8872}
(おそらく[この辺](https://www.google.co.jp/maps/place/1%C2%B021'44.4%22N+103%C2%B053'14.1%22E/@1.3622735,103.8870542,64m/data=!3m1!1e3!4m4!3m3!8m2!3d1.3623265!4d103.8872539?hl=ja&authuser=0&entry=ttu))

他の人がどうやって回答したのか、少し気になっています...

## TrainWindow
>夏、騒音、車窓にて。
フラグのフォーマットは、TsukuCTF23{緯度_経度}です。
緯度経度は小数第五位を切り捨てとします。![TrainWindow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/6c6782a1-1d4e-0d14-0be1-c47cf56438e2.jpeg)

こちらもGoogleレンズ大先生の力を借りました。こちらの[ブログ](http://tanakamasayasu.blog.fc2.com/blog-entry-1591.html)に掲載されている車窓がヒットしました。
ブログから"伊豆多賀"であることは分かりましたが、このブログの写真だけでは、撮影場所の特定はむずかしいと思い、Googleマップで現地訪問しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/5a204654-b89b-ff58-3bf5-c578d7641282.png)

問題の画像から島があることが確認できるため、まず島が周辺にあるかを確認しました。"初島"があると確認ができましたが、ここに違いないという自信はありませんでした。

続いて、問題の写真・ブログの写真の左側に山があることや問題の画像右側のマンションの屋根に特徴がある(4つの穴が開いているように見える)ことを頼りに、線路沿いを散策しました。

Googleマップの航空写真を頼りに探していると、来宮方面側に似たようなマンションの屋根があります。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/e2d0434e-d8c2-11e0-44ef-61fa3eafdd2f.png)
この付近で撮影された車窓であると自信が得られた気がしたので、座標調整をしたところ、正解できました
(おそらく[この辺](https://www.google.com/maps/place/35%C2%B003'50.6%22N+139%C2%B003'59.3%22E/@35.064122,139.0664905,96m/data=!3m1!1e3!4m4!3m3!8m2!3d35.0640448!4d139.066476?entry=ttu))

- [x] Flag:TsukuCTF{35.0640_139.0664}

この問題は、たまたま正解できた問題かなと思っています。

## laser
>光源の座標を正確に教えてください。
フラグフォーマットは、TsukuCTF23{緯度_経度}です。 小数点以下5位を切り捨てて、小数点以下4桁で答えてください。![laser.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/7de3e3c7-320a-85dc-800d-901451812a1e.jpeg)

こちらもGoogleレンズを使うと、[Xの投稿](https://x.com/tonarimatihe/status/1721162537365037376?s=20)にたどり着きました。
どうやら阪神百貨店の周辺でレーザーが空に向かって照射されているようなので、"大阪 緑色 レーザー 空"と<strike>安直に</strike>Google検索しました。
これは、"[ランドマークレーザー](https://www.ktv.jp/news/feature/231107-razorbeam/)"と呼ばれていることが分かり、さらに調べるとこちらの[サイト](https://blog.osakanight.com/article/eid727.html)から設置場所が"梅田吸気塔"であることが判明したので、最後に座標を調整して回答しました。
- [x] Flag:TsukuCTF{34.7015_135.4991}
(おそらく[この辺](https://www.google.co.jp/maps/place/34%C2%B042'05.7%22N+135%C2%B029'57.1%22E/@34.7015591,135.499048,53m/data=!3m1!1e3!4m4!3m3!8m2!3d34.7015723!4d135.4991957?hl=ja&authuser=0&entry=ttu))

## 3636
>ここはどこ...?
Flagフォーマットは TsukuCTF23{緯度_経度} です。
端数は少数第四位を四捨五入して小数点以下第三位の精度で回答してください。
![3636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/eba1de37-32d8-12a6-f017-87a442829a7f.png)

Googleレンズでは間違いなく出てこないだろうなと思い、Googleレンズを使わずに解くことにしました。
画像から得られた情報を頭の片隅に置いておいて進めました。
* 電話番号と思われる数字"5-3636"
* HPと思われるアドレス"~o.ed[.]jp"
* 右矢印

"ed[.]jp"は教育機関に使用されるドメインであるため、幼稚園・保育園・小学校・中学校・高校あたりを想定して、Google検索しました。
電話番号とHPのアドレスを条件にGoogle検索して、"こども園"を見つけました。
画像にある"右矢印"の情報から、こども園近くの右折する場所に置かれているのだろうと推測し、Googleストリートビューで探したところ、問題の画像の看板が発見できました。最後に座標を調整して回答しました。
- [x] Flag:TsukuCTF{37.502_139.929}
(おそらく[この辺](https://www.google.co.jp/maps/place/37%C2%B030'06.6%22N+139%C2%B055'44.2%22E/@37.5019268,139.9288974,72m/data=!3m1!1e3!4m4!3m3!8m2!3d37.5018444!4d139.9289526?hl=ja&authuser=0&entry=ttu))

## river
>弟のたくしから、「ボールが川で流されちゃった」と写真と共に、連絡がきた。
この場所はどこだ?
Flagフォーマットは TsukuCTF23{緯度_経度} です。
端数は少数第5位を切り捨てて小数点以下第4位の精度で回答してください。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/ea96867d-0dd2-34d6-29cb-9036be55ba7e.png)

はじめに画像から得られる情報を整理しました。
* 川の右側に大きな道路が走っていること
* 専用駐車場があること
* 少し先にバス停のようなものがあること

初手、何をしようか悩んだため、とりあえずGoogleレンズを使いました。
検索結果に出てきたこの[ブログ](http://nisshindo.jugem.jp/?eid=9)に掲載されている鹿児島県の荒田川と似ているように感じます。
続いて、鹿児島にある荒田川（中洲通沿)をキーワードにGoogleマップで探索すると、"川の右側に大きな道路が走っていること"の条件に合致しました。
また、航空写真を見ているとバス停のようなものも確認できたため、ストリートビューで現地探索をしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/18ee3242-5358-cd03-a360-68852914df15.png)
画像左側に専用駐車場もあり、この場所であると断定ができたため、座標を調整して回答しました。
- [x] Flag:TsukuCTF{31.5757_130.5533}

### river 雑記
実は、運営側へ「正解にTsukuCTF{31.5757_130.5532}を加えるべきではないか」と意見を出しました。
理由は、以下の画像です。
Pinの位置はほとんど違いがないのですが、経度の小数点4桁目が2と3で分かれてしまうのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/8770f8e1-2352-a749-56e7-d0ec9a0871ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/21652659-c798-bb9a-d606-935d7c221a34.png)
妙にIncollectが連発するので、これは経度の4桁目が違うのかな？と勘を働かせて正解しました。

ちなみに、正解の追加はされませんでした。
すでに複数の正解者がいたこと、回答回数の制限もないことから修正の必要なしと運営側で判断されました。迅速に対応いただきました運営の皆様、お忙しい中ありがとうございました！(夜中4時頃にチケットを送って申し訳ございませんでした。迅速な対応で感動しました)

## broken display
>表示が壊れているサイネージって、写真を撮りたくなりますよね!
正しく表示されているときに書かれている施設名を見つけて提出してください!
フラグ形式: TsukuCTF23{◯◯◯◯◯◯◯◯IYA_◯◯◯◯◯◯S}
![broken_display.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/0cd5d827-2900-ac7e-c38c-2f96dbd770f6.jpeg)


初手Googleレンズで出る気もするが出なかった場合に泥沼化しそうと思い、まずは画像の情報を整理しました。
* ◯◯◯◯◯◯◯◯IYA_◯◯◯◯◯◯S
* ディスプレイ9枚のサイネージ
* 窓から駅が見える(駅に近い)

Googleレンズで検索すると、ディスプレイ9枚のサイネージが掲載されている[サイト](https://nishi2.jp/205234/)がヒットしました。<strike>普通に出てきて、アレ?となりました</strike>

サイト内に記載ある"ガーデンズ"(英語に直すと、"Gardens")はFlagの形式と合致します。
また、このサイトの下部の"西宮"(ローマ字表記"Nishinomiya")もFlagの形式と合致します。
Flag形式がすべて大文字なので、すべて大文字で入力しました。
- [x] Flag:TsukuCTF{NISHINOMIYA_GARDENS}

(観葉植物、サイネージ横の白い灯り?も一致するので、ほぼこれだなという自信がありました。)

## stickers
>この画像が撮影された場所を教えてください!
Flagフォーマットは TsukuCTF23{緯度_経度} です。
ただし、小数点4桁の精度で答えてください。![stickers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/10189d58-eeaf-5b7e-93bf-73b42352e55e.png)

こういう類の問題はGoogleレンズで1発かなと安直にかけてみましたが、何も得られませんでした...。

画像から得られる情報を整理しました。
* "なつかしの　熱海プリ"の車が停車している(場所は熱海)
* 比較的小さめ
* シールがたくさん張られている(問題名と同じ)

まず、"なつかしの　熱海プリ"が何かの特定から始めました。"なつかしの味 熱海プリン"とわかり、撮影場所は熱海と断定しました。
GoogleMapで"なつかし味 熱海プリン"と検索して、[お店の周辺](https://www.google.co.jp/maps/place/%E7%86%B1%E6%B5%B7%E3%83%97%E3%83%AA%E3%83%B3+1st%E6%9C%AC%E5%BA%97/@35.1019629,139.0774505,21z/data=!4m6!3m5!1s0x6019be639ce25b35:0xec75fcced7b1e468!8m2!3d35.1020312!4d139.0773421!16s%2Fg%2F11d_wn1g4k?hl=ja&authuser=0&entry=ttu)を散策するも見つかりません。

<strike>仕方なく</strike> Googleマップと格闘していると熱海温泉という単語が多いことに気が付き、問題の写真はひょっとすると足湯・温泉が出る場所ではないかとひらめきました。
(温泉街で小さな屋根付き足湯をよく見かけた覚えがあるという個人的な経験からひらめきました)
足湯や温泉が出る場所がないかを探索していき、"熱海七湯"を発見しました。しかし、屋根のないものばかりだったため、一旦Googleマップから離れ、"熱海七湯"を調べました。
熱海市の[サイト](https://www.city.atami.lg.jp/kanko/onsen/1001823.html)がヒットし、そのなかの"[熱海七湯 河原湯](https://www.city.atami.lg.jp/shisetsu/bunka/1002089/1002094.html)"に、小さめな屋根がついていることが判明しました。
Googleマップに戻り、熱海七湯 河原湯を調べると、同じ小屋・たくさんのシールが貼られていて、この場所であることが断定できました。
- [x] Flag:TsukuCTF{35.0967_139.0748}

## flower_bed
>花壇の先にQRコードのキューブがあるようですね。友人曰く、モニュメントの近くに配置されているものらしいです。
こちらのQRコードが示すURLを教えてください! リダイレクト前のURLでお願いします!
Flagの形式は TsukuCTF23{URL} です。例えば、https://sechack365.nict.go.jp がURLなら、 TsukuCTF23{https://sechack365.nict.go.jp} が答えになります。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/813e9c15-371a-48a9-b629-16372b7878d1.png)

QRコードの横に文字が書いているので拡大して確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552061/04253114-4f34-d074-c2db-93ae24f1dfcf.png)
"Prefectual Civil Hall and House Official Site"と読解できるので、素直にこの文字列を検索すると、"旧福岡県公会堂貴賓館"にある"FUKUOKA"モニュメント横のQRコードであることが判明します。問題文に"リダイレクト前のURL"という記載もあるため、QRコードが読み取れる画像がないかを検索することにしました。

Googleマップに貼られている画像からQRコードを読み取ることができたため、そのURLを入力しました。
- [x] Flag:TsukuCTF{http://www.fukuokaken-kihinkan.jp}

# おわりに
AV Tokyo2023以来のCTFでしたが、とても楽しめました。本当はもっと上位を狙いたかったですが、予定の都合でAV Tokyo2023と同じくスマホチャレンジ(しかも今回は電車)、12/10 02:00~05:00以外に時間が取れず、なかなか厳しかったです。
個人としては、5,139 pointsで久々に沢山解いたな～という達成感と、udon_2023とtsukushi_no_kuniを解けなかった悔しさが入り混じっています。また次回も出たいと思います。

今回のCTFで驚いたことは、Googleレンズ/Bing画像検索がとても優秀だったことです。
着手が難しい問題でもとりあえずGoogleレンズで、という策が有効すぎて、怖さすら感じました。
(これは別CTFの作問者側としてはなかなかの脅威で...。レンズで1発の問題にならない問題を少しずつ考えておこうと思った次第です)

運営してくださった皆様、ありがとうございました！

## チームメンバーのWriteup
[12/11 23:37更新]
チーム"SabaNoMisoni"のk4r45u氏もWriteupを書いているので、ぜひそちらもどうぞ
https://zenn.dev/k4r45u/articles/7819afe0a997f3